static struct bflb_device_s uart0; extern void shell_init_with_task(struct bflb_device_s shell); static int btblecontroller_em_config(void) { extern uint8_t __LD_CONFIG_EM_SEL; volatile uint32_t em_size; em_size = (uint32_t)&__LD_CONFIG_EM_SEL; if (em_size == 0) { GLB_Set_EM_Sel(GLB_WRAM160KB_EM0KB); } else if (em_size == 321024) { GLB_Set_EM_Sel(GLB_WRAM128KB_EM32KB); } else if (em_size == 641024) { GLB_Set_EM_Sel(GLB_WRAM96KB_EM64KB); } else { GLB_Set_EM_Sel(GLB_WRAM96KB_EM64KB); } return 0; } void bt_enable_cb(int err) { if (!err) { bt_addr_le_t bt_addr; bt_get_local_public_address(&bt_addr); printf("BD_ADDR:(MSB)%02x:%02x:%02x:%02x:%02x:%02x(LSB) \n", bt_addr.a.val[5], bt_addr.a.val[4], bt_addr.a.val[3], bt_addr.a.val[2], bt_addr.a.val[1], bt_addr.a.val[0]); ble_cli_register(); } } int main(void) { board_init(); configASSERT((configMAX_PRIORITIES > 4)); uart0 = bflb_device_get_by_name("uart0"); shell_init_with_task(uart0); /* set ble controller EM Size / btblecontroller_em_config(); / Init rf */ if (0 != rfparam_init(0, NULL, 0)) { printf("PHY RF init failed!\r\n"); return 0; } // Initialize BLE controller #if defined(BL702) || defined(BL602) ble_controller_init(configMAX_PRIORITIES - 1); #else btble_controller_init(configMAX_PRIORITIES - 1); #endif // Initialize BLE Host stack hci_driver_init(); bt_enable(bt_enable_cb); vTaskStartScheduler(); while (1) { } }用中文注释以上每一行代码,给出可复制代码
时间: 2023-08-16 20:05:07 浏览: 42
```
// 引入 uart0 设备
static struct bflb_device_s uart0;
// 声明 shell_init_with_task 函数,该函数会初始化 shell
extern void shell_init_with_task(struct bflb_device_s shell);
// btblecontroller_em_config 函数用于设置 BLE 控制器的 EM Size
static int btblecontroller_em_config(void)
{
// 获取 __LD_CONFIG_EM_SEL 变量的地址,该变量在链接时会被赋值为 EM Size
extern uint8_t __LD_CONFIG_EM_SEL;
volatile uint32_t em_size;
em_size = (uint32_t)&__LD_CONFIG_EM_SEL;
// 根据 EM Size 设置 BLE 控制器的 EM Size
if (em_size == 0) {
GLB_Set_EM_Sel(GLB_WRAM160KB_EM0KB);
} else if (em_size == 321024) {
GLB_Set_EM_Sel(GLB_WRAM128KB_EM32KB);
} else if (em_size == 641024) {
GLB_Set_EM_Sel(GLB_WRAM96KB_EM64KB);
} else {
GLB_Set_EM_Sel(GLB_WRAM96KB_EM64KB);
}
return 0;
}
// bt_enable_cb 函数会在 BLE 蓝牙启用完成后被调用
void bt_enable_cb(int err)
{
if (!err) {
// 获取本地 Public Address,并打印出来
bt_addr_le_t bt_addr;
bt_get_local_public_address(&bt_addr);
printf("BD_ADDR:(MSB)%02x:%02x:%02x:%02x:%02x:%02x(LSB) \n",
bt_addr.a.val[5], bt_addr.a.val[4], bt_addr.a.val[3],
bt_addr.a.val[2], bt_addr.a.val[1], bt_addr.a.val[0]);
// 注册 BLE CLI
ble_cli_register();
}
}
// main 函数
int main(void)
{
// 初始化板级硬件
board_init();
// 确保 FreeRTOS 的优先级大于 4
configASSERT((configMAX_PRIORITIES > 4));
// 获取 uart0 设备
uart0 = bflb_device_get_by_name("uart0");
// 初始化 shell
shell_init_with_task(uart0);
// 设置 BLE 控制器的 EM Size
btblecontroller_em_config();
// 初始化射频
if (0 != rfparam_init(0, NULL, 0)) {
printf("PHY RF init failed!\r\n");
return 0;
}
// 初始化 BLE 控制器
#if defined(BL702) || defined(BL602)
ble_controller_init(configMAX_PRIORITIES - 1);
#else
btble_controller_init(configMAX_PRIORITIES - 1);
#endif
// 初始化 BLE Host stack
hci_driver_init();
// 启用 BLE 蓝牙
bt_enable(bt_enable_cb);
// 启动 FreeRTOS 调度器
vTaskStartScheduler();
while (1) {
}
}
```