2283|1

2549

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

【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。

 

 

最新回复

一个宏来实现不同的跳转这里,在两个demo的内核模式,楼主讲的很清楚     详情 回复 发表于 2022-1-10 07:23
点赞 关注
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

一个宏来实现不同的跳转这里,在两个demo的内核模式,楼主讲的很清楚

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表