时间:2022-09-27
(小熊派IoT开发套件全部教程 ↑点击启阅↑) ▷01 | 物联网一站式开发工具 IoT-Studio ▷02 | Hello World ▷03 | 任务管理 ▷04 | 信号量(任务同步) ▷05 | 互斥锁(共享资源保护) ▷06 | 内存管理 俗话说的好,光说不练假把式,上一个系列 LiteOS内核实战教程 中讲述了内核中任务如何管理、如何使用信号量同步多个任务的运行,如何用互斥锁保护共享资源,如何申请分配动态内存空间。 但是在嵌入式系统中,如果不能将内核有效的应用在实际场景中控制外围设备,那么一切都是纸上谈兵。 在这个系列中,本教程将会带领大家,手把手添加一些常用的外设驱动到LiteOS系统中,掌握外设驱动的移植方法。 驱动层代码,简单通俗的来说就是向上给用户提供一层可以控制设备的API,向下负责和设备打交道,直接操作硬件。 比如LED的驱动代码可以给用户提供一个初始化的 API 和打开/关闭的 API ,按键的驱动代码可以提供初始化的 API 和读取按键状态的 API,LCD的驱动代码可以提供初始化的 API 和屏幕上显示相关内容的API,传感器的驱动代码可以提供传感器初始化的API 和读取数据的 API,等等。
这里以使用 STM32CuebMX 生成的 LED 闪烁的裸机工程为例,其中 Src 目录下的 有了该文件,也就是驱动层代码,我们可以直接调用 那么,驱动层代码从哪里来呢? 如果是比较简单的外设,比如LED,按键这种,只使用了GPIO,可以直接使用STM32CubeMX生成的 如果是比较复杂的外设,比如LCD的底层是使用SPI驱动的,那么除了 STM32CubeMX 生成的 LiteOS 工程 target 目录结构如下: 其中和设备驱动相关的有三个文件夹: Inc:对应STM32CubeMX生成裸机工程中的Inc Src: 对应STM32CubeMX生成裸机工程中的Src Hardware:存放自己编写的设备驱动代码 复制文件的时候按照情况复制到对应的文件夹即可。 这里LED相关的代码文件只有 添加裸机驱动文件路径 因为 LiteOS 的整个项目工程使用 make 构建,所以复制驱动文件之后,需要添加驱动文件的路径到 makefile 中,加入编译。 在该文件中: C文件路径 HARDWARE_SRC:对应Hardware文件夹下的Src文件夹 USER_SRC:对应Src文件夹 头文件路径 HARDWARE_INC:对应Hardware文件夹下的Inc文件夹 USER_INC:对应Inc文件夹 如下,LED驱动的 LED驱动的 至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。 4. 外设驱动文件的使用初始化外设在使用外设之前,首先需要初始化外设,在LiteOS中,初始化设备有两种方式: 在系统启动调度之前初始化:设备在系统中随时可被任意任务使用 在任务中初始化:设备一般只在该任务中被使用 举个例子: 像LED这种的驱动,一般都是任意的任务需要点亮或者关闭LED,没有专门的LED点亮任务或者关闭任务,在系统启动调度之前初始化比较好; 像光照强度传感器这种驱动,一般都是有专门的数据采集任务,专门去读取传感器数据,不需要别的线程去调用驱动读取数据,所以放在该数据采集任务中初始化就可以。 在任务中调用初始化API比较简单,那么,如何在系统启动之前调用初始化API呢? 其实,答案就在 Src 文件夹下的 可以看到,系统上电后首先调用 同样在 怎么样?有没有惊喜?是不是和裸机工程的main函数开始部分一模一样? 我们可以将初始化函数尽情的扔到这个函数里,比如LED的初始化函数 在IoT Studio默认提供的 接下来首先创建一个文件夹,用于存放本系列教程实验的代码: 在该文件夹中创建一个文件: 编写代码:
然后按照之前的方法,在 user_demo.mk 中将 最后在 编译,烧录,即可看到LED开始闪烁: |
|
来自: logicsoft > 《bootloader》