完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 小熊派开源社区 于 2020-2-25 08:52 编辑
1.LiteOS裸机驱动移植系列 俗话说的好,光说不练假把式,上一个系列 LiteOS内核实战教程 中讲述了内核中任务如何管理、如何使用信号量同步多个任务的运行,如何用互斥锁保护共享资源,如何申请分配动态内存空间,但是在嵌入式系统中,如果不能将内核有效的应用在实际场景中控制外围设备,那么一切都是纸上谈兵。在这个系列中,本教程将会带领大家,手把手添加一些常用的外设驱动到LiteOS系统中,掌握外设驱动的移植方法。 2. 何为裸机驱动 驱动层代码,简单通俗的来说就是向上给用户提供一层可以控制设备的API,向下负责和设备打交道,直接操作硬件。 比如LED的驱动代码可以给用户提供一个初始化的 API 和打开/关闭的 API ,按键的驱动代码可以提供初始化的 API 和读取按键状态的 API,LCD的驱动代码可以提供初始化的 API 和屏幕上显示相关内容的API,传感器的驱动代码可以提供传感器初始化的API 和读取数据的 API,等等。 这里以使用 STM32CuebMX 生成的 LED 闪烁的裸机工程为例,其中 Src 目录下的gpio.c文件就相当于 LED 的驱动层文件,其中提供了 LED 的初始化代码: 有了该文件,也就是驱动层代码,我们可以直接调用MX_GPIO_Init来初始化LED。 3.如何移植驱动到LiteOS 复制裸机驱动文件 LiteOS 工程 target 目录结构如下: 其中和设备驱动相关的有三个文件夹:
复制文件的时候按照情况复制到对应的文件夹即可。 这里LED相关的代码文件只有gpio.h和gpio.c,所以复制gpio.h到 Inc 文件夹,复制gpio.c到 Src 文件夹。 使用IoT-Studio创建的HelloWorld工程中已经提供好了这两个文件,了解这个操作即可,不用再次复制。 添加裸机驱动文件路径 C文件路径
头文件路径
如下,LED驱动的gpio.c文件添加到USER_SRC下(工程中默认已添加,无需重复添加): LED驱动的gpio.h文件添加到USER_INC下(工程中默认已添加,无需重复添加): 至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。 4. 外设驱动文件的使用 初始化外设 在使用外设之前,首先需要初始化外设,在LiteOS中,初始化设备有两种方式:
举个例子: 像LED这种的驱动,一般都是任意的任务需要点亮或者关闭LED,没有专门的LED点亮任务或者关闭任务,在系统启动调度之前初始化比较好; 像光照强度传感器这种驱动,一般都是有专门的数据采集任务,专门去读取传感器数据,不需要别的线程去调用驱动读取数据,所以放在该数据采集任务中初始化就可以。 在任务中调用初始化API比较简单,那么,如何在系统启动之前调用初始化API呢? 其实,答案就在 Src 文件夹下的main.c中,main函数如下: 可以看到,系统上电后首先调用]同样在main.c中存放着HardWare_Init函数的实现,来一探究竟: 怎么样?有没有惊喜?是不是和裸机工程的main函数开始部分一模一样? 我们可以将初始化函数尽情的扔到这个函数里,比如LED的初始化函数MX_GPIO_Init(),在系统上电的时候自动将LED初始化,是不是很爽。 修复gpio.c文件中的小bug 在IoT Studio默认提供的gpio.c文件的MX函数中,没有对 LED 的引脚 PC13 进行初始化,手动添加如下的初始化代码: 操作外设 接下来首先创建一个文件夹,用于存放本系列教程实验的代码: 在该文件夹中创建一个文件: 编写代码: #include 然后按照之前的方法,在 user_demo.mk 中将led_driver_demo.c文件添加到makefile中,加入编译: 最后在.sdkconfig中配置开启宏定义: 编译,烧录,即可看到LED开始闪烁: 关注“小熊派开源社区”微信公众号,回复“LiteOS内核实战”获取实战源代码。 小熊派开源社区,专注于IoT、AI、5G等前沿技术分享,关注“小熊派开源社区”微信公众号,获取更多资料教程。 -----------------------------------------END--------------------------------------- |
|
相关推荐
|
|
590 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2241 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1233 浏览 0 评论
1788 浏览 0 评论
1464 浏览 0 评论
74854 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 14:22 , Processed in 0.975542 second(s), Total 62, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号