【BG22-EK4108A 蓝牙开发套件】二:从SDK的blink led demo开始
[复制链接]
本帖最后由 数码小叶 于 2022-1-8 16:49 编辑
上一篇Simplicity Studio 5以及packages已经安装完毕,在lanucher界面可以看到demo和example,这篇从最简单的blink入手,看看
Simplicity Studio以及SDK的一些操作
采用复制的方式导入工程,这样再怎么修改也没事
导入完成,进入到了Simplicity IDE界面,一些编译、调试界面就随着工程出现了
第一次接触Simplicity Studio 5,发现还支持图形化选项配置,大大提高了上手的速度啊
各种组件配置、管脚配置都集成了
对于BG22-EK4108A开发板的原理图,在BG22 Explorer Kit User's Guide里说在Simplicity Studio 5提供,但是在Simplicity Studio 5里却没有找到
最终只有一个管脚映射表
LED连接的是PA4,在看下项目管理窗口,文件层次很明显,配置工具、配置生成项、编译工具、源文件等。从blink.c和blink.h函数入手,工程虽然简单,但是能从基础去掌握SDK的一些API使用,blink.c只有三个函数
void blink_init(void);
void blink_process_action(void);
tatic void on_timeout(sl_sleeptimer_timer_handle_t *handle,void *data);
初始化函数调用了一个 sl_sleeptimer_start_periodic_timer_ms(),
sl_sleeptimer_start_periodic_timer_ms(&timer,
TOOGLE_DELAY_MS,
on_timeout, NULL,
0,
SL_SLEEPTIMER_NO_HIGH_PRECISION_HF_CLOCKS_REQUIRED_FLAG);
跳转到这个函数的定义
_STATIC_INLINE sl_status_t sl_sleeptimer_start_periodic_timer_ms(sl_sleeptimer_timer_handle_t *handle,
uint32_t timeout_ms,
sl_sleeptimer_timer_callback_t callback,
void *callback_data,
uint8_t priority,
uint16_t option_flags)
从函数入口参数看,像是在创建OS task,暂时还不能确定,但是可以从赋值可以看出,只给周期回调函数赋值on_timeout了。而在on_timeout里改变了 toggle_timeout正好控制了blink_process_action(void)的运行结果,这样blink.c文件结构就清晰了。
在main.c里,首先是sl_system_init();这个架构写的也很清晰,底层、驱动层、服务层、应用层
sl_platform_init();
sl_driver_init();
sl_service_init();
sl_stack_init();
sl_internal_app_init();
然后在void app_init(void)里调用了刚才的blink_init();
下面就是一个宏来实现不同的跳转SL_CATALOG_KERNEL_PRESENT
#if defined(SL_CATALOG_KERNEL_PRESENT)
sl_system_kernel_start();
#else
while (1) {
}
#endif
一个是启动内核,创建任务运行,一个就是无内核运行,在这个demo里,是无内核模式,因为没有定义SL_CATALOG_KERNEL_PRESENT,但是架构依旧很清晰明了,和初始化一样
void sl_system_process_action(void)
{
sl_platform_process_action();
sl_service_process_action();
sl_stack_process_action();
sl_internal_app_process_action();
}
不同的处理函数,隔离开来,blink_process_action();被app_process_action(void)在while循环里一直调用,而影响控制状态的toggle_timeout确实周期改变的,最终达到了led的周期闪烁。
在Simplicity Studio 5里,还有另外一个blink demo,这个是没有os的,另外一个就是有os版本
和刚才的工程结构对比,是一模一样的
对比main函数也是一样的,但是这次有了SL_CATALOG_KERNEL_PRESENT的宏定义
那么自然和之前的工程选择了不一样的跳转方向,但是最终效果都是blink led。
|