千家信息网

LiteOS驱动移植方法是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"LiteOS驱动移植方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"LiteOS驱动移植方法是什么"吧!1. LiteOS裸机驱
千家信息网最后更新 2026年11月01日LiteOS驱动移植方法是什么

本篇内容主要讲解"LiteOS驱动移植方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"LiteOS驱动移植方法是什么"吧!

1. LiteOS裸机驱动移植系列

俗话说的好,光说不练假把式,上一个系列 LiteOS内核实战教程 中讲述了内核中任务如何管理、如何使用信号量同步多个任务的运行,如何用互斥锁保护共享资源,如何申请分配动态内存空间,但是在嵌入式系统中,如果不能将内核有效的应用在实际场景中控制外围设备,那么一切都是纸上谈兵。在这个系列中,本教程将会带领大家,手把手添加一些常用的外设驱动到LiteOS系统中,掌握外设驱动的移植方法。

2. 何为裸机驱动

驱动层代码,简单通俗的来说就是向上给用户提供一层可以控制设备的API,向下负责和设备打交道,直接操作硬件。

比如LED的驱动代码可以给用户提供一个初始化的 API 和打开/关闭的 API ,按键的驱动代码可以提供初始化的 API 和读取按键状态的 API,LCD的驱动代码可以提供初始化的 API 和屏幕上显示相关内容的API,传感器的驱动代码可以提供传感器初始化的API 和读取数据的 API,等等。

如果对基于HAL库的裸机驱动不熟悉,请先阅读嵌入式基础教程!

这里以使用 STM32CuebMX 生成的 LED 闪烁的裸机工程为例,其中 Src 目录下的gpio.c文件就相当于 LED 的驱动层文件,其中提供了 LED 的初始化代码:

有了该文件,也就是驱动层代码,我们可以直接调用MX_GPIO_Init来初始化LED。

那么,驱动层代码从哪里来呢?

如果是比较简单的外设,比如LED,按键这种,只使用了GPIO,可以直接使用STM32CubeMX生成的gpio.c文件和gpio.h文件;

如果是比较复杂的外设,比如LCD的底层是使用SPI驱动的,那么除了 STM32CubeMX 生成的spi.h和spi.c文件,还需要自己在此基础上手写LCD屏幕的驱动文件,具体的教程可以参考我的裸机教程系列:STM32CubeMX教程。

3. 如何移植驱动到LiteOS

复制裸机驱动文件

LiteOS 工程 target 目录结构如下:

其中和设备驱动相关的有三个文件夹:

  • Inc:对应STM32CubeMX生成裸机工程中的Inc

  • Src: 对应STM32CubeMX生成裸机工程中的Src

  • Hardware:存放自己编写的设备驱动代码

复制文件的时候按照情况复制到对应的文件夹即可。

这里LED相关的代码文件只有gpio.h和gpio.c,所以复制gpio.h到 Inc 文件夹,复制gpio.c到 Src 文件夹。

使用IoT-Studio创建的HelloWorld工程中已经提供好了这两个文件,了解这个操作即可,不用再次复制。

添加裸机驱动文件路径

因为 LiteOS 的整个项目工程使用 make 构建,所以复制驱动文件之后,需要添加驱动文件的路径到 makefile 中,加入编译。

project.mk文件指明了工程中所有文件的路径:

在该文件中:

  • C文件路径

    • HARDWARE_SRC:对应Hardware文件夹下的Src文件夹

    • USER_SRC:对应Src文件夹

  • 头文件路径

    • HARDWARE_INC:对应Hardware文件夹下的Inc文件夹

    • USER_INC:对应Inc文件夹

如下,LED驱动的gpio.c文件添加到USER_SRC下(工程中默认已添加,无需重复添加):

LED驱动的gpio.h文件添加到USER_INC下(工程中默认已添加,无需重复添加):

至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。

4. 外设驱动文件的使用

初始化外设

在使用外设之前,首先需要初始化外设,在LiteOS中,初始化设备有两种方式:

  • 在系统启动调度之前初始化:设备在系统中随时可被任意任务使用

  • 在任务中初始化:设备一般只在该任务中被使用

举个例子:

像LED这种的驱动,一般都是任意的任务需要点亮或者关闭LED,没有专门的LED点亮任务或者关闭任务,在系统启动调度之前初始化比较好;

像光照强度传感器这种驱动,一般都是有专门的数据采集任务,专门去读取传感器数据,不需要别的线程去调用驱动读取数据,所以放在该数据采集任务中初始化就可以。

在任务中调用初始化API比较简单,那么,如何在系统启动之前调用初始化API呢?

其实,答案就在 Src 文件夹下的main.c中,main函数如下:

可以看到,系统上电后首先调用 HardWare_Init 函数初始化硬件设备,然后初始化内核,初始化shell,最后启动LOS内核。

同样在main.c中存放着HardWare_Init函数的实现,来一探究竟:

怎么样?有没有惊喜?是不是和裸机工程的main函数开始部分一模一样?

我们可以将初始化函数尽情的扔到这个函数里,比如LED的初始化函数MX_GPIO_Init(),在系统上电的时候自动将LED初始化,是不是很爽。

修复gpio.c文件中的小bug

在IoT Studio默认提供的gpio.c文件的MX函数中,没有对 LED 的引脚 PC13 进行初始化,手动添加如下的初始化代码:

操作外设

接下来首先创建一个文件夹,用于存放本系列教程实验的代码:

在该文件夹中创建一个文件:

编写代码:

#include #include static int led_blink_entry(){    while (1)    {        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);        osal_task_sleep(1*1000);    }}int standard_app_demo_main(){    osal_task_create("led_blink",led_blink_entry,NULL,0x400,NULL,2);    return 0;}

然后按照之前的方法,在 user_demo.mk 中将led_driver_demo.c文件添加到makefile中,加入编译:

最后在.sdkconfig中配置开启宏定义:

编译,烧录,即可看到LED开始闪烁:

到此,相信大家对"LiteOS驱动移植方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 驱动 代码 工程 文件夹 任务 裸机 外设 设备 函数 系统 移植 教程 方法 路径 内核 数据 生成 传感器 编译 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 厦门中拓互联网络科技有限公司 美国互联网科技 壹账通互联网科技 友谊互联网络科技 滨湖区互联网智能科技产品供应 中国最先进互联网科技公司 重庆威客帮互联网科技 中国航天科技大学国际工业互联网 天津腾达互联网科技有限公司 电子商务与互联网科技的关系 互联网领先科技宣传片 江苏互联网智能科技软件 九思连强互联网电子科技有限公司 江苏互联网智能科技产品出厂价 国产互联网科技公司 众联互联网络科技 数字互联网科技有限公司 山东蛋芒互联网科技有限公司 现代互联网科技公司 华人运通互联网科技公司 手冲咖啡和咖啡机区别 山东特亿宝互联网科技有限公司 互联网科技财经 互联网科技的发展 科技与互联网发展 安徽鑫晟辉互联网科技 以后互联网后是啥科技 区块链结合互联网科技 银川新华互联网科技学校是国营吗 马化腾互联网科技教学
0