harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
硬件平台
基于正点原子战舰V3开发板
MCU:STM32F103ZET6
片上SRAM大小:64KBytes
片上FLASH大小:512KBytes
移植准备
IDE软件:Keil MDK5
串口调试助手
源码下载
HarmonyOS源码开源在gitee上
LiteOS_m的源码仓库
源码结构
根文件夹下的arch_spec.md文件内容即源码结构树,但该结构树不是最新,可以看到当前targers文件夹下已经添加了对STM32F1单片机的例程,但该结构树中并未列出.
├── components --- 可选组件,可裁剪,依赖kernel
│ ├── cppsupport --- C++支持
│ └── cpup --- CPUP功能
├── kal --- 内核抽象层
│ ├── cmsis --- cmsis标准支持
│ └── posix --- posix标准支持
├── kernel --- 内核最小功能集支持
│ ├── arch --- 硬件架构相关
│ │ ├── arm --- arm32架构
│ │ │ └── cortex-m4 --- cortex-m4架构
│ │ │ └── iar ---
│ │ │ ├── los_atomic.h
│ │ │ ├── los_context.h
│ │ │ ├── los_interrupt.h
│ │ │ └── los_mpu.h
│ │ └── include
│ │ ├── los_arch_atomic.h --- 定义通用arch的原子操作
│ │ ├── los_arch_context.h --- 定义通用arch的上下文切换
│ │ ├── los_arch.h --- 定义通用arch初始化
│ │ └── los_arch_interrupt.h --- 定义通用arch中断
│ ├── include
│ │ ├── los_config.h --- 功能开关和配置参数
│ │ ├── los_event.h --- 事件
│ │ ├── los_liteos.h --- liteos最小功能集对外提供的头文件
│ │ ├── los_memory.h --- 堆内存管理
│ │ ├── los_mutex.h --- 互斥锁
│ │ ├── los_queue.h --- 队列
│ │ ├── los_scheduler.h --- 调度算法
│ │ ├── los_sem.h --- 信号量
│ │ ├── los_task.h --- 任务
│ │ └── los_timer.h --- 定时器
│ └── src
├── targets
│ └── targets
│ └── cortex-m4_stm32f429ig_fire-challenger_iar
│ ├── board
│ ├── dprintf.c
│ ├── Libraries
│ ├── main.c
│ ├── project
│ ├── target_config.h --- 板级配置功能开关和配置参数
│ └── Utilities
└── utils
├── include
│ ├── los_compiler.h --- 编译工具配置,类型定义
│ ├── los_debug.h --- debug,printf相关
│ ├── los_error.h --- 错误定义
│ └── los_list.h
└── src
启动流程
在\targets\cortex-m3_stm32f103_simulator_keil\project文件夹下打开工程文件(los_demo.uvproj)
工程下有三个文件夹:liteos-m、main、component
程序加载时,首先进入liteos-m下的los_startup.s文件,内容如下PRESERVE8
AREA RESET, CODE, READONLY
THUMB
IMPORT ||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit||
IMPORT HalHwiDefaultHandler
EXPORT _BootVectors
EXPORT Reset_Handler
_BootVectors
DCD ||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit||
DCD Reset_Handler
DCD HalHwiDefaultHandler
DCD HalHwiDefaultHandler
Reset_Handler
CPSID I
IMPORT LOS_HardBootInit
BL LOS_HardBootInit
IMPORT __main
LDR R0, =__main
BX R0
ALIGN
END
可以看出,启动文件只定义了启动向量和reset向量,其他的向量在los_interrupt.c中动态加载
通过LOS_HardBootInit跳转到系统硬件初始化代码,对Uart进行初始化(该例程只用到了串口)void LOS_HardBootInit()
{
UINT32 uwRet = LOS_OK;
uwRet = LOS_UartBaseInit();
if (uwRet != LOS_OK)
{
return ;
}
return ;
}
初始化后回到启动文件并跳转到main函数:LITE_OS_SEC_TEXT_INIT int main(void)
{
unsigned int ret;
//USART_Config();
printf("\n\rhello world!!\n\r");
ret = LOS_KernelInit();
taskSample();
if (ret == LOS_OK) {
LOS_Start();
}
while (1) {
__asm volatile("wfi");
}
}
main函数开始进行了hello world打印,并进行了内核的初始化,最后进行进程测试,创建并运行两个进程
移植需要的修改
工程中使用自定义.sct文件对各个区进行分散加载,详细加载文件见\targets\cortex-m3_stm32f103_simulator_keil\project\los_demo.sct(注意路径,不是output文件夹下的.sct文件,keil在编译过程中也会产生一个.sct文件),详细内容如下:LR_IROM1 0x08000000 0x00200000 { ; load region size_region
ER_IROM1 0x08000000 0x00200000 { ; load address = execution address
los_startup.o (RESET, +First)
*(InRoot$$Sections)
* (+RO)
}
RW_IRAM1 0x20000000 0x00200000 { ; RW data
* (.data, .bss, .data.init)
}
VECTOR 0x20200000 0x400 ; Vector
{
* (.vector)
}
ARM_LIB_STACKHEAP 0x08100000 EMPTY 0x1000
{
}
}
由于片内SRAM和FLASH大小等因素,各段映射地址需要进行相应调整,我修改的映射地址如下(个人习惯):LR_IROM1 0x08000000 0x00080000 { ; 加载域FLASH起始地址0x08000000 大小0x00080000(512KBytes)
ER_IROM1 0x08000000 0x00080000 { ; 从FLASH中加载程序,所以将程序启动文件定向到FLASH首地址,其它只读字段也定位到这里
los_startup.o (RESET, +First)
*(InRoot$$Sections)
* (+RO)
}
RW_IRAM1 0x20000000 0x00010000 { ; SRAM起始地址0x20000000 大小0x00010000(64KBytes),其它读写段和未初始化变量均定位到SRAM中
* (.data, .bss, .data.init)
}
VECTOR 0x2000E000 0x1000 ; 向量表地址
{
* (.vector)
}
ARM_LIB_STACKHEAP 0x20010000 EMPTY -0x1000 ;堆栈空间,存放在内存的高地址向下的一段空间,大小0x1000(4KBytes)
{
}
}
由于SRAM内存限制,需要修改OS内存池大小
修改位置为\targets\cortex-m3_stm32f103_simulator_keil\target_config.h文件中的OS_SYS_MEM_SIZE宏定义,将内存池大小减小,我将其修改为了0x00000D000(52KBytes)
编译运行
将输出文件下载进MCU,连接串口波特率设置115200即可输出helloworld信息和进程运行信息
原创内容,转载请注明来源
harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验相关推荐
- STM32F407开发板的HTTP模式IAP远程升级之官方例程移植
版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/wbdxz/article/details/82859237 关于远程升级的模板建立,可以参考下面的博文 ST ...
- 十三.linux开发之uboot移植(十三)——三星官方uboot移植过程详解
2018/08/12 21:39 有道云地址:http://note.youdao.com/noteshare?id=9ab91347c6ce1b15ef0c3fa8e8a60605&sub= ...
- 设备接入ONENET(3)STM32 + ESP8266(MQTT协议)接入云 :官方例程移植笔记(HAL+LL库)
重要提示:由于OneNET版本迭代,导致鉴权方式可能变更,若程序无法连接,请参考官方手册或再OneNET论坛搜索相关内容 移植本意应该是指通过修改,使得运行原先在另一个平台可运行的程序. STM32C ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(4)- Flashloader初体验(blhost)...
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader. 在上一篇文章 Serial Downloader模式(sdphost, ...
- HarmonyOS 2.0 手机版使用初体验 ——手机开发者 (Beta版)
12月16日上午10点,华为在北京举办华为开发者日暨HarmonyOS2.0手机开发者Beta版发布活动.华为此次宣布面向手机开发者开放完整的HarmonyOS 2.0系统能力.丰富的API(应用开发 ...
- harmonyos 2.0怎么升级,HarmonyOS 2.0正式发布 分布式能力获得全面升级
原标题:HarmonyOS 2.0正式发布 分布式能力获得全面升级 [CNMO新闻]在HDC2020上,华为消费者业务软件部总裁王成录正式发布了HarmonyOS 2.0,2.0的分布式能力全面升级, ...
- 《 HarmonyOS实战—HarmonyOS(鸿蒙)开发初体验,华为如何引领物联网时代》
Harmonyos(鸿蒙)开发初体验,华为如何引领物联网时代 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人.设备.场景有机地联系在一起,将消费者在全场景生活 ...
- 首款搭载HarmonyOS,华为首款搭载Harmonyos体验分布式技术的摄像头发布
11月5日消息,在今天下午的2020华为智选品鉴会上,华为发布了在2020华为智选品鉴会上,是首款搭载Harmonyos全新一代体验分布式技术的摄像头,售价299元起. 华为智选智能摄像头Pro是华为 ...
- I.MX6ULL 官方 U-Boot 移植系列教程 1 —— 前期准备
文章目录 前言 一.搭建开发环境 二.获取官方资料 1. 获取官方开发板资料 2. 获取官方 U-Boot 源码 总结 前言 去年入手了一块正点原子的 I.MX6U-ALPHA 开发板,跟着其配套的指 ...
最新文章
- Git GitLab 使用及规范
- 利用jQuery对无序列表排序 http://www.apkbus.com/android-80639-1-1.html
- python phpstudy_GitHub - Writeup007/phpStudyBackDoor: phpStudy后门检测与利用工具,Python脚本,可一键 GetShell。...
- python 内置递归
- sql server2008如何创建外键
- CSS基础汇总——点击标题跳转详细博客【学习笔记】
- ci框架 乱码 mysql_CodeIgniter(CI)发邮件标题中文乱码解决方案
- 帆软报表嵌入python程序_C#教程之C#服务器端生成报告文档:使用帆软报表
- 基于FPGA的以太网控制器(MAC)设计(上)
- delphi dbgrideh 行合并_如何轻松快速地合并FLV
- Hive on spark 执行加载不了spark的jars
- 指针分配和释放空间(转)
- 为什么我学51单片机很顺利,学STM32却一头雾水?
- day11-函数作业
- 4 第二式:左右开弓似射雕
- [SQL]联表查询:左联
- python爬取鬼灭漫画+简单JS分析
- MATLAB学习笔记一:基础知识
- 最新PanDownload卢本伟修改版,直达60M/s
- Vue中keep-alive原理
热门文章
- BMP图片魔法师KeyGen
- TFS 报错解决方案:tf400324
- 搭建dubbo项目解决dubbo.xml标签报错的问题
- 解决Android studio 非法字符的问题
- Adobe Premiere Pro CC 2015.0 已停止工作【解决方案】
- Intellij Idea debug 模式如果发现异常,即添加异常断点在发生异常处
- Windows 10 powershell 中文乱码解决方案
- Haskell / GHC中的“ forall”关键字有什么作用?
- 将.gitignore应用于已提交的文件
- 为了用户体验,不要做浏览器兼容