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

实现要求