bsp基础接口规范
bsp.h、bsp_time.h、bsp_sys.h应当在任何平台都可用,适配新开发板时也应当首先移植这些文件。
bsp_flash.h、bsp_usb.h在MCU平台是必需的,因为数据库与命令行依赖这些组件。
bsp_def.h
bsp_status_t
功能
BSP状态返回值,BSP层所有表示执行结果的返回值都应当使用此类型。
实现
typedef enum {
BSP_OK, /* 成功 */
BSP_ERR, /* 错误:未知 */
BSP_ERR_NULL, /* 错误:空指针 */
BSP_ERR_INITED, /* 错误:初始化失败 */
BSP_ERR_NO_DEV, /* 错误:没有设备 */
BSP_ERR_BUSY, /* 错误:设备忙 */
BSP_ERR_TIMEOUT, /* 错误:访问超时 */
BSP_ERR_FULL, /* 错误:空间已满 */
BSP_ERR_EMPTY, /* 错误:无数据 */
...
/* 会随着版本更新补充 */
} bsp_status_t;
XB_ASSERT
功能
断言,使用宏实现,非DEBUG编译目标会被忽略。
参数
- arg 要被断言的值
返回值
- void
示例
XB_ASSERT(ptr);
XB_ASSERT(ptr!=NULL);
XB_ASSERT(ans==BSP_OK);
XB_UNUSED
功能
声明未使用的变量,避免编译器警告。
参数
- arg 未使用的变量
返回值
- void
示例
XB_UNUSED(a);
XB_OFFSET_OF
功能
计算成员变量在结构体中的偏移量
参数
- type 结构体类型
- member 成员名
返回值
- size_t 偏移量
示例
typedef struct{
uint32_t a;
float b;
} Type;
XB_OFFSET_OF(Type,b); //结果为4
XB_MEMBER_SIZE_OF
功能
计算成员变量的大小
参数
- type 结构体类型
- member 成员名
返回值
- size_t 偏移量
示例
typedef struct{
uint32_t a;
float b;
} Type;
XB_MEMBER_SIZE_OF(Type,a); //结果为4
XB_CONTAINER_OF
功能
根据成员变量指针计算结构体指针
参数
- ptr 成员变量指针
- type 结构体类型
- member 成员名
返回值
- container 结构体指针
示例
typedef struct{
uint32_t a;
float b;
} Type;
Type c;
XB_CONTAINER_OF(&c.a,Type,a); //结果为c的指针
bsp.h
bsp_status_t bsp_init(void)
功能
初始化外设和时钟,为XRobot启动时被调用的第一个函数
返回值
- bsp_status_t
参数
- void
实现要求
- 在任何平台上都需要实现
bsp_sys.h
void bsp_sys_reset(void)
功能
系统重启
返回值
- void
参数
- void
void bsp_sys_shutdown(void)
功能
系统关机
返回值
- void
参数
- void
void bsp_sys_sleep(void)
功能
睡眠模式,经过唤醒后继续运行
返回值
- void
参数
- void
void bsp_sys_stop(void)
功能
停止模式,唤醒后需要重新初始化
返回值
- void
参数
- void
bool bsp_sys_in_isr(void)
功能
检查当前是否在中断中
返回值
- bool
参数
- void
bsp_time.h
uint64_t bsp_time_get(void)
功能
返回从启动开始的微秒数
返回值
- uint64_t 从启动开始的微秒数
参数
- void
实现要求
- 长期运行可能随着定时器数值溢出重置时间
uint32_t bsp_time_get_ms(void)
功能
返回从启动开始的毫秒数
返回值
- uint32_t 从启动开始的毫秒数
参数
- void
实现要求
- 长期运行可能随着定时器数值溢出重置时间
bsp_flash.h
在Linux下不需要此文件
bsp_status_t bsp_flash_init(void)
功能
初始化Flash数据库,在System层启动时被调用,用户不需要主动调用。
返回值
- bsp_status_t
参数
- void
实现要求
- 一般为EasyFlash或者其他库的封装
size_t bsp_flash_check_blog(const char* name)
功能
检查对应名称的flash变量是否存在,并返回大小。
返回值
- size_t flash变量大小,0为不存在
参数
- const char* name 要查找的数据条目名称
实现要求
- 一般为EasyFlash或者其他库的封装
bsp_status_t bsp_flash_get_blog(const char* name, uint8_t* buff, size_t len)
功能
获取对应名称的flash变量
返回值
- bsp_status_t
参数
- const char* name 要获取的数据条目名称
- uint8_t* buff 数据缓冲区
- size_t len 数据长度
实现要求
- 一般为EasyFlash或者其他库的封装
bsp_status_t bsp_flash_set_blog(const char* name, const uint8_t* data, size_t len)
功能
写入对应名称的flash变量
返回值
- bsp_status_t
参数
- const char* name 要写入的数据条目名称
- const uint8_t* data 数据地址
- size_t len 数据长度
实现要求
- 一般为EasyFlash或者其他库的封装
bsp_usb.h
在Linux下不需要此文件
bsp_status_t bsp_usb_transmit(const uint8_t *data, size_t len)
功能
USB发送一定长度的数据
返回值
- bsp_status_t
参数
- const uint8_t* data 数据地址
- size_t len 数据长度
实现要求
- 使用USB-CDC或者串口DMA收发
char bsp_usb_read_char(void)
功能
usb读取一个字节,应用在串口终端
返回值
- char 数据
参数
- void
实现要求
- 使用fifo来存储数据
size_t bsp_usb_read(uint8_t *buffer, size_t len)
功能
USB读取一定长度的数据
返回值
- size_t 实际读取长度
参数
- uint8_t* buffer 数据缓冲区
- size_t len 数据长度
实现要求
- 使用USB-CDC或者串口DMA收发
bool bsp_usb_connect(void)
功能
判断USB是否连接
返回值
- bool USB是否连接
参数
- void
实现要求
- 如果无法判断是否连接,会在串口接收到第一个字符后认为已连接
size_t bsp_usb_avail(void)
功能
USB接口有可读数据
返回值
- size_t 可读数据长度
参数
- void
实现要求
- 无
void bsp_usb_init(void)
功能
USB接口初始化,不需要用户调用。
返回值
- void
参数
- void
实现要求
- 无
void bsp_usb_update(void)
功能
更新USB数据,不需要用户调用。
返回值
- void
参数
- void
实现要求
- 无