1.软件篇---LiteOS之系统移植(鸿蒙系统)
2.HUAWEI LiteOS 移植过程
3.鸿蒙轻内核M核源码分析:LibC实现之Musl LibC
4.LiteOS:剖析时间管理模块源代码
软件篇---LiteOS之系统移植(鸿蒙系统)
物联网时代,最小最系统的源码选择对设备功能和性能至关重要。LiteOS因其轻量高效,系统成为物联网设备领域中的代码优选。该系统以其强大性能在资源受限环境展现出卓越性能,最小最推动设备智能化。源码小白源码账号
LiteOS系统移植步骤包括:配置文件调整、系统内核代码适配、代码端口代码移植。最小最调整配置文件以适应新硬件,源码优化内核以支持任务、系统内存管理等功能,代码移植端口代码确保系统在特定硬件上正常运行。最小最
获取LiteOS源码,源码建立包含config、系统core、port、component四类文件夹的目录结构,分别存放配置文件、内核文件、商城源码程序端口文件和组件。系统文件结构清晰,包含arch、components、kernel三个主要部分。
在移植过程中,采用STMFCBT6芯片作为示例,需在工程中添加相关文件。参考代码仓库:lq/keil_sdk,为自己的成长与进步增添动力。每一次的努力都是积累,每一次的付出都带来成长,坚持下去,奇迹就在转角等待你。
HUAWEI LiteOS 移植过程
本文主要介绍了将LiteOS系统移植到STMFZGT6单片机开发板的过程。
在开发环境中,主要使用的工具包括以下几种。
本文主要记录了基于gcc开发的LiteOS移植过程,如果使用vscode的近乎社区源码朋友,其原理相同,也可以作为参考。
在基础工程准备阶段,我使用的是STMCubeMX生成的工程文件。生成过程如下:
1. 打开STMCubeMX程序。
2. 选择对应的芯片(STMFZGT6)。
3. 设置时钟来源为外部晶振。
4. Debug设置为串行(我用的是Jlink下载程序),为了方便移植,将系统tick来源设置为TIM1。
5. 配置LED的引脚为输出,我的开发板两个可控led分别为GPIOF_9和GPIOF_。
6. 设置系统时钟,配置为MHz。
7. 分别设置头文件和.c文件。
8. 中着急打了个病句...
9. 最后生成工程,选择为makefile生成格式。
工程将在对应文件夹内生成。
切换到文件夹内,asp接收源码执行make指令构建工程,将在build文件夹下生成你在cubemx里设置的工程名.elf文件。
此时修改Core文件夹下的main.c文件,就可以实现基础的基于HAL库的单片机控制。
修改Makefile文件,添加烧录命令如下:
此时执行make run就可以将.elf文件烧录到单片机中。
在移植LiteOS源码下载过程中,我所使用的源码是GitHub上的LiteOS代码的develop分支。
下载该仓库的代码,得到文件夹结构如下。
在STMCubeMX创建的工程下面新建文件夹为LiteOS(具体什么名看你心情),并将以下几个文件夹导入:
得到
OS_CONFIG文件夹下的target_config包含头文件是stmf的HAL头文件,如果是cortex-m3或者其他内核的单片机需要在这里修改包含的头文件,我的工程将之改为了#include "stmf4xx.h"。
此时需要修改你工程的Makefile文件,将新添加的LiteOS的代码添加到你的工程当中去。
具体修改如下:
此时执行make构建工程,会出现报错,说是源码演示商城重复定义了PendSV_Handler和SysTick_Handler,这是因为这两个函数在LiteOS系统中已经有了定义。这时要到Core/Src文件夹下的stmf4xx_it.c将重复定义的两个处理函数注释掉。
注释掉两个函数的定义。
此时再执行make clean删除原来的构建生成文件,重新make构建。
构建成功,能够生成elf文件,移植成功。
可以修改OS_CONFIG文件夹下的target_config文件,适配自己的开发板。
在移植测试阶段,可以根据STMCubeMX构建工程时所用的GPIO引脚在程序中定义任务。我的测试任务如下:
我的任务定义位于main.c,也可以将任务定义移动到单独的文件中。
功能就是两个led灯实现不同频率的闪烁。
可以观察到上面的led灯闪烁频率低于下面的led,任务创建成功,移植成功。
鸿蒙轻内核M核源码分析:LibC实现之Musl LibC
本文探讨了LiteOS-M内核中Musl LibC的实现,重点关注文件系统与内存管理功能。Musl LibC在内核中提供了两种LibC实现选项,使用者可根据需求选择musl libC或newlibc。本文以musl libC为例,深度解析其文件系统与内存分配释放机制。
在使用musl libC并启用POSIX FS API时,开发者可使用文件kal\libc\musl\fs.c中定义的文件系统操作接口。这些接口遵循标准的POSIX规范,具体用法可参阅相关文档,或通过网络资源查询。例如,mount()函数用于挂载文件系统,而umount()和umount2()用于卸载文件系统,后者还支持额外的卸载选项。open()、close()、unlink()等文件操作接口允许用户打开、关闭和删除文件,其中open()还支持多种文件创建和状态标签。read()与write()用于文件数据的读写操作,lseek()则用于文件读写位置的调整。
在内存管理方面,LiteOS-M内核提供了标准的POSIX内存分配接口,包括malloc()、free()与memalign()等。其中,malloc()和free()用于内存的申请与释放,而memalign()则允许用户以指定的内存对齐大小进行内存申请。
此外,calloc()函数在分配内存时预先设置内存区域的值为零,而realloc()则用于调整已分配内存的大小。这些函数构成了内核中内存管理的核心机制,确保资源的高效利用与安全释放。
总结而言,musl libC在LiteOS-M内核中的实现,通过提供全面且高效的文件系统与内存管理功能,为开发者提供了强大的工具集,以满足不同应用场景的需求。本文虽已详述关键功能,但难免有所疏漏,欢迎读者在遇到问题或有改进建议时提出,共同推动技术进步。感谢阅读。
LiteOS:剖析时间管理模块源代码
LiteOS的时间管理模块基于系统时钟,分为两个关键部分:SysTick中断和应用程序时间服务。SysTick中断为任务调度提供稳定的时钟节拍,而应用程序时间服务则包括时间转换、统计和延迟等功能,这些都是通过系统时钟的周期性中断实现的。
系统时钟通常由定时器/计数器驱动,周期性地产生中断,每秒的Tick数由用户配置决定。比如,如果配置为每秒个Tick,那么每个Tick代表1毫秒。Cycle是系统最小的计时单位,由主时钟频率决定。在 MHz的CPU中,1秒内会产生,,个Cycle。
用户在秒、毫秒级别计时,而操作系统则使用Tick作为基本单位。在需要执行任务挂起或延迟操作时,时间管理模块会处理Tick与用户时间单位之间的转换。
源代码可在LiteOS开源站点获取,涉及的文件包括kernel\include\los_tick.h、kernel\base\include\los_tick_pri.h等,具体可以参考gitee.com/LiteOS/LiteOS...。本文将通过分析STMFIDiscovery板子的源码,深入剖析时间管理模块的初始化、配置和关键函数。
首先,时间管理模块的初始化和启动过程涉及系统时钟配置和OsTickInit函数,配置项包括系统时钟和每秒Tick数。然后是OsTickStart函数,启动时会初始化定时器并启用Tick中断。
此外,时间管理模块提供的时间转换、统计和延时管理功能,如从毫秒到Tick的转换,获取Tick内包含的Cycle数,以及微秒和毫秒级别的等待。这些功能的实现细节也在本文中进行了讲解。
总结来说,LiteOS的时间管理模块是任务调度和时间服务的核心,通过深入源码理解,开发者可以更好地利用这些功能进行高效的时间处理。