439|1

2483

帖子

0

资源

纯净的硅(高级)

【BG22-EK4108A 蓝牙开发套件】二:从SDK的blink led demo开始 [复制链接]

本帖最后由 数码小叶 于 2022-1-8 16:49 编辑

上一篇Simplicity Studio 5以及packages已经安装完毕,在lanucher界面可以看到demo和example,这篇从最简单的blink入手,看看

Simplicity Studio以及SDK的一些操作

 

Snipaste_2022-01-02_20-30-21.png

 

Snipaste_2022-01-02_20-31-19.png

 

采用复制的方式导入工程,这样再怎么修改也没事

Snipaste_2022-01-02_20-32-53.png

 

导入完成,进入到了Simplicity IDE界面,一些编译、调试界面就随着工程出现了

Snipaste_2022-01-02_20-33-59.png

 

第一次接触Simplicity Studio 5,发现还支持图形化选项配置,大大提高了上手的速度啊

Snipaste_2022-01-02_20-35-04.png

 

各种组件配置、管脚配置都集成了

Snipaste_2022-01-02_20-36-00.png

 

对于BG22-EK4108A开发板的原理图,在BG22 Explorer Kit User's Guide里说在Simplicity Studio 5提供,但是在Simplicity Studio 5里却没有找到

Snipaste_2022-01-02_20-45-17.png

最终只有一个管脚映射表

Snipaste_2022-01-02_20-38-49.png

 

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的周期闪烁。

微信图片_20220108164410.jpg

 

在Simplicity Studio 5里,还有另外一个blink demo,这个是没有os的,另外一个就是有os版本

Snipaste_2022-01-08_16-01-20.png

 

和刚才的工程结构对比,是一模一样的

Snipaste_2022-01-08_16-05-40.png

 

对比main函数也是一样的,但是这次有了SL_CATALOG_KERNEL_PRESENT的宏定义

Snipaste_2022-01-08_16-46-43.png

那么自然和之前的工程选择了不一样的跳转方向,但是最终效果都是blink led。

 

 


回复

6435

帖子

0

资源

五彩晶圆(初级)

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

 


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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