1.OpenHarmony轻量设备Hi3861芯片开发板启动流程分析
2.NB-IOT远程升级第3弹:移植代码分析
3.LiteOS通信模组教程01-AT指令玩转WIFI通信
4.ThreadX系列 | 最新v6.1.6版本在MDK中的小熊移植方法
5.超轻量级网红软件定时器multi_timer(51+小熊派双平台实战)
6.手把手教你丨小熊派移植华为 LiteOS-M
OpenHarmony轻量设备Hi3861芯片开发板启动流程分析
OpenHarmony作为一款覆盖从嵌入式实时物联网操作系统到移动操作系统的全面操作系统,其内核包括LiteOS-M、派开LiteOS-A和Linux。发板LiteOS-M是源码专为物联网领域设计的轻量级内核,适合没有MMU的恢复处理器。例如,小熊spark on yarn 源码Hi是派开一款集成2.4GHz SoC WiFi芯片,具有高性能位微处理器、发板最大工作频率MHz、源码SRAM KB、恢复ROM KB和2MB Flash。小熊采用LiteOS-M的派开OpenHarmony开发板,如深开鸿、发板润和软件和小熊派等厂商的源码设备均采用相同的启动流程。
Boot作为操作系统的恢复启动软件,通常称为bootloader,Hi的Boot分为四个部分:RomBoot、FlashBoot、LoaderBoot和CommonBoot。RomBoot负责加载LoaderBoot到RAM,进一步利用LoaderBoot下载镜像到Flash、烧写EFUSE并校验引导FlashBoot。FlashBoot分为AB两面,A面校验成功直接启动,校验失败则尝试B面,B面校验成功会修复A面并引导启动,否则系统会复位重启。LoaderBoot主要负责下载镜像到Flash和烧写EFUSE,而CommonBoot则是FlashBoot与LoaderBoot共享的功能模块。
在分析启动流程时,可以关注编译完成固件中的几个关键部分,如文本段包含源代码函数和字符串常量。通过map文件和asm文件,可以理解编译链接工具生成的全局符号、函数地址及其占用空间和位置。这些文件位于out目录,与操作系统固件平级,有助于分析崩溃原因和跳转关系。
LiteOS-M启动流程从Boot开始,通过跳转调用到内核初始化函数LOS_KernelInit,主要负责内存、悟空源码贴吧中断和任务初始化,为API函数调用准备全局信息。接着,OHOS_Main函数负责调用OpenHarmony系统相关和用户应用相关代码,确保在LOS_start之前任务列表已填充,以实现系统调度。
用户应用的启动原理基于宏定义,展开后调用系统初始化函数。通过链接文件和map文件,可以发现应用代码位于特定的初始化段中。总结而言,最小硬件系统配置后,通过系统初始化、调用OpenHarmony和应用代码,最终启动操作系统。
在没有源代码的情况下,通过对map文件和asm文件的分析,可以有效理解Hi芯片开发板LiteOS-M的启动流程。整个过程从最小硬件系统配置开始,由LOS_KernelInit初始化系统到合适状态,AppInit调用OpenHarmony和应用相关代码,最后由LOS_Start启动操作系统。
NB-IOT远程升级第3弹:移植代码分析
在物联网项目开发中,远程升级功能(OTA)至关重要,这允许通过WIFI、蓝牙、4G、NB-IOT等方式将升级包传输至MCU,实现代码存储与更新。本文系列将详细介绍基于电信AEP平台的NB-IOT设备远程升级流程,包括STM内部分区、BootLoader编写、软件包制作、升级协议对接等内容。本系列将逐步解析,直至完成。 系列文章大纲如下: 在前两篇中,我们深入探讨了BootLoader编写要点及电信AEP平台软件包制作。在第二篇,我们了解了使用PCP协议的max485源码远程升级流程,并通过串口助手模拟升级流程,为代码编写做足准备。 此篇章,我们将通过分析开源FOTA代码,进一步理解PCP协议与远程升级流程,便于各位进行代码移植。源码介绍
本文档以小熊派开发板的ota远程升级代码为例,运行环境如下。结合参考案例代码与上篇内容,能够深化对远程升级的理解,发现过程并不复杂。源码分析
接收数据解析
接收电信AEP平台发送的数据,解析数据以判断是否为PCP协议的远程升级命令。解析信息包括起始标识位、版本号、消息码、校验码、数据区长度与数据区。升级流程状态机
基于消息码的状态机,用于跟踪远程升级流程中的状态变化。设备应答
设备向平台发送应答消息,确认接收与处理能力。设备发送数据
设备将数据发送至平台,执行命令或更新请求。新版本通知
设备收到新版本通知后,向物联网平台返回应答,请求或拒绝升级。请求分片包
设备请求下载完整软件包,以备后续升级。执行升级
设备接收到执行升级指令后,执行更新操作并反馈至平台。上报升级结果
设备完成升级后,向平台报告升级状态。超时处理
针对升级请求或执行过程中可能出现的超时问题,进行妥善处理。踩坑记录
至此,基于电信AEP平台的NB-IOT远程升级系列内容结束。在此过程中,我作为轻松学长,分享了物联网开发的源码数位溢出点滴与经验,希望大家能从中获益,共同成长。 分享是一种精神,通过分享,我们不仅传递知识,也传递了生活的态度与乐趣。愿你在物联网开发的道路上越走越远,分享与学习并行,创造更多精彩。LiteOS通信模组教程-AT指令玩转WIFI通信
此文档由乐鑫官方提供,用于学习LiteOS通信模组的AT指令。
使用小熊派开发板时,将开关拨到AT-PC一端,以便于调试。所有相关工具和文档可通过『小熊派开源社区』公众号获取。
AT指令是模组的基本功能测试工具。
指令:AT,功能:测试AT指令是否正常工作。示例:AT+GMR,功能:查询模组固件版本信息。
指令:AT+RST,功能:软复位模组。示例:无需示例。
模组工作模式包括软AP与Station模式。在软AP模式下,模组作为WIFI热点;在Station模式下,模组连接其他WIFI热点。
使用命令设置模组为软AP与Station模式共存。示例:无需示例。
在连接路由器时,使用命令设置模组连接到可上网的无线路由器或手机热点。示例:无需示例。
使用命令查询模组获取的ip地址。示例:无需示例。
连接远程TCP服务器前,搭建TCP服务器。使用网络调试助手开启TCP服务器。确保PC与模组连接同一网络,使用Ping命令测试网络连接。示例:无需示例。编程猫源码跳跃
开启TCP服务器监听端口,选择作为测试端口。关闭Windows Defender的网络防火墙,以允许模组访问PC。在桌面搜索防火墙,关闭所有网络的防火墙。
查询PC的ip地址,以便进行连接。使用AT命令连接TCP服务器,示例:无需示例。
模组主动发送消息时,设置要发送的字节数,输入数据,示例:无需示例。
模组接收消息时,在网络调试助手中接收信息。在串口助手中输出收到的信息。示例:无需示例。
通信完毕后,使用命令关闭TCP连接。示例:无需示例。
ThreadX系列 | 最新v6.1.6版本在MDK中的移植方法
探索ThreadX v6.1.6在STMLRCT6的高效移植路径一、环境准备与源码引入
开始于小熊派IoT开发板,首要任务是创建一个裸机工程,确保printf功能正常。使用MDK作为开发工具,我们首先从GitHub下载ThreadX的最新源码:- 在MDK工程中,新建threadX/common和ports组,选择AC5编译器。
- 添加必要的.c和.s文件,并配置头文件和ASM路径,确保与STMLRCT6的架构兼容。
然而,官方提供的tx_initialize_low_level.s试图自动接管处理器启动,这可能会引发一些问题。二、问题与调整
官方改动中涉及堆栈设置、向量表重定义和中断接管,这可能导致与STMLRCT6的中断管理冲突。为解决这个问题,我们定制了一个适配文件tx_initialize_low_level_bearpi.S:- 删除无用代码,注释掉官方部分,仅保留对STM启动文件中断处理的必要部分。
接下来,移除HAL库的中断函数,转而使用STM的启动文件,确保中断处理更加精准。三、应用代码编写
在application_entry.c中,我们开始编写两个核心任务,它们将运行在创建的线程上:void my_thread1_entry(ULONG thread_input) {
while(1) {
printf("thread 1 application running...\r\n");
tx_thread_sleep();
}
}
void my_thread2_entry(ULONG thread_input) {
while(1) {
printf("thread 2 application running...\r\n");
tx_thread_sleep();
}
}
void tx_application_define(void *first_unused_memory) {
tx_thread_create(&thread1, "thread 1", my_thread1_entry, ...);
tx_thread_create(&thread2, "thread 2", my_thread2_entry, ..., thread2_stack, THREAD2_STACK_SIZE);
}
// 在main.c中启动内核
void main() {
printf("启动ThreadX在BearPi IoT Board上");
tx_kernel_enter();
}
完成以上步骤后,将工程编译并下载到开发板,务必关注终端输出,观察任务运行情况。 注意:移植过程中可能会遇到自定义应用程序入口的编译错误,这是正常现象,只需根据提示调整即可。通过以上详细步骤,你将能够成功将ThreadX v6.1.6移植到STMLRCT6,并开始构建你的实时操作系统应用。享受编程的乐趣,让多线程在BearPi IoT板上高效运转!
超轻量级网红软件定时器multi_timer(+小熊派双平台实战)
网红multi_timer是一个极其轻量级的软件定时器,它的设计旨在为MCU提供简便、优雅且易维护的定时器解决方案。相较于传统标志位+计数器的判断方式,multi_timer提供了更简洁的实现方式,使得程序编写更加直观且便于后期维护。其主要特点包括简单性、优雅性、便捷性和易于维护。
使用multi_timer时,首先定义一个multi_timer结构体变量,接着进行注册和初始化定时器,启动定时器,设置硬件定时器循环调用计数器以提供时基,并在while循环中循环调用后台处理函数。
实战演练1涉及到STCFW-I-SOP8模块的实践。购买此模块的目的在于验证和移植开源项目,同时积累不同平台的开发经验。通过创建的Keil4工程,将multi_timer添加到工程中,编写并编译固件,最终下载到开发板上,程序运行完美,实现了对单片机平台的重新复习。
实战演练2在小熊派开发板上进行,小熊派基于stm,是热门的物联网开发平台。通过使用stmcubmx配置基础工程,选择芯片型号、配置时钟和串行调试接口,生成Keil5工程并添加multi_timer程序文件,编写代码,实现预期功能。通过调试和下载器,完成固件的生成和下载,程序成功执行。
multi_timer的设计思想包含数据结构及参数含义,例如定时时间、循环定时触发时间、定时器回调处理函数等。函数解析方面,timer_ticks负责计数,timer_init进行初始化,timer_start启动定时器,timer_stop停止定时器,而timer_loop循环调用后台处理函数。整个设计思路清晰,程序结构良好,适用于多种场景。
提供实践工程下载,解决Keil5与Keil4版本混用时可能出现的卡死问题,并为知乎粉丝提供购买小熊派开发板的9折优惠。
此外,还分享了往期精彩内容,包括对小熊派开发板的使用评测、个人学习与工作经验分享、遇到的编程问题以及开源按键组件MultiButton的使用体验。鼓励读者转发分享,以支持。
手把手教你丨小熊派移植华为 LiteOS-M
手把手教你:小熊派移植华为 LiteOS-M 的详细教程 本文将指导你如何将 LiteOS 适配到小熊派开发板,以便在 STM + LiteOS 等技术栈上实现高效功能。首先,我们来了解移植的前言和所需准备。一、硬件与软件环境
1.1 小熊派开发板 这款板子的外观图和具体参数在此处不再详述,但它是基于STML芯片的。 1.2 LiteOS简介 华为 LiteOS 是为物联网设计的轻量级RTOS,支持任务管理、内存管理等基础功能,还集成了IoT协议栈,方便与云平台交互。移植时,主要关注官方提供的调度内核代码和通过STMCubeMX配置的HAL库。二、STMCubeMX配置
利用CubeMX配置小熊派的时钟树、SystemTick定时器和GPIO口,以配合 LiteOS 的工作。设置完毕后生成MDK项目。三、获取与整理源码
由于新版本未支持MDK,使用旧版本代码,通过Git克隆仓库至本地。四、源码移植
在MDK工程目录下创建移植目录,将LiteOS内核文件、CMSIS接口、配置文件和kernel源码逐一分类导入并配置编译路径。五、MDK配置与编译
导入文件后,调整路径,遇到缺少头文件问题时,根据芯片型号修改。注释掉部分STMCubeMX生成的中断处理代码,确保编译通过。六、验证与实验
编写测试代码,通过创建任务和初始化函数,验证移植是否成功。通过点灯操作,检查系统是否运行正常。小熊派-鸿蒙·季 开发板介绍
BearPi-HM Nano开发板于月日时分发布,配套课程、代码及文档正式上线,内容持续更新,旨在支持学习者成长,所有资源免费提供。
BearPi-HM Nano开发板尺寸为.2mm * .7mm * .1mm,采用三段式设计,配备丰富外设资源,包括E接口、HiRNIV Wi-Fi SoC芯片、NT3H1xW0FHKH NFC标签、USB Type-C电源接口、复位按键、用户按键、NFC射频天线、CH串口转换电路。
该开发板搭载HarmonyOS操作系统,并配套DevEco Device Tool开发环境,提供全面教程与实验案例。
HarmonyOS是一款面向未来、适应全场景的分布式操作系统,基于Hi平台提供多种开放能力,包括分布式通信、数据管理、网络连接、身份安全、设备安全、数据安全认证以及加密解密功能等。
开发板通过集成的HiRNIV Wi-Fi SoC芯片支持无线通信,NT3H1xW0FHKH NFC芯片实现NFC标签功能,E标准接口便于扩展多种应用,NFC射频电路配合OpenHarmony能力实现“碰一碰”联网。
HarmonyOS操作系统拥有分布式软总线能力,实现用户数据在多设备间的无缝衔接,提供统一的系统服务开发框架,内核使用musl libc库,支持POSIX标准接口,全面支持内核之上组件及应用开发。
相关资源包括主代码仓库、文档资料及课程免费获取地址,更多信息请查看鸿蒙HPM。
小熊派IoT开发板系列教程正式发布——免费学习
小宅按小熊派开源社区为小熊派IoT开发板量身定制了一系列教程。这套教程从基础知识到高级应用,旨在帮助不同水平的开发者轻松掌握IoT产品的开发。教程内容涵盖了单片机基础、LiteOS操作系统、通信外设以及上云案例等多个方面,并主要采用MDK5软件作为编译器进行讲解。
小熊派IoT开发板是由南京厚德物联网有限公司和华为技术有限公司共同设计的,基于STMLRCT6芯片,具备强大的可扩展性,适用于快速评估和设计物联网应用。
小熊派开源社区首次推出的系列教程,旨在从基础到进阶,满足不同基础的开发者需求。教程内容丰富,包括单片机基础、LiteOS操作系统基础、通信外设开发以及上云案例开发等。教程将使用MDK5软件进行编译,部分内容还会讲解如何使用华为IoT Studio进行开发。此外,教程还包含了如何使用GCC编译器开发STM的相关内容。
教程设计过程中可能存在不足,欢迎大家留言提出宝贵意见和建议,共同完善教程内容。
关注“小熊派开源社区”微信公众号,即可免费学习这些教程。
课程特色:
1. 适应不同基础人群。
2. 系统地介绍IoT产品的开发。
3. 与华为HCIP物联网工程师认证考试匹配。
4. 精心策划,完全免费。
更多精彩内容,请滑至顶部点击右上角关注小宅哦~
作者:NB的老王