历史上的今天
今天是:2025年02月07日(星期五)
2021年02月07日 | STM32Fxxx 上移植 Huawei LiteOS
2021-02-07 来源:eefocus
启动文件的代码如下:
Heap_Size EQU 0x00000400
AREA LOS_HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
AREA LOS_HEAP_INFO, DATA, READONLY, ALIGN=2
IMPORT |Image$$ARM_LIB_STACKHEAP$$ZI$$Base|
EXPORT __LOS_HEAP_ADDR_START__
EXPORT __LOS_HEAP_ADDR_END__
__LOS_HEAP_ADDR_START__
DCD __heap_base
__LOS_HEAP_ADDR_END__
DCD |Image$$ARM_LIB_STACKHEAP$$ZI$$Base| - 1
PRESERVE8
THUMB
AREA RESET, CODE, READONLY
IMPORT ||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit||
IMPORT osPendSV
EXPORT _BootVectors
EXPORT Reset_Handler
_BootVectors DCD ||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit|| ; Top of Stack
DCD Reset_Handler ; Reset Handler
; Reset handler
Reset_Handler
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ALIGN
END
.sct 文件对应启动文件的改变主要增加了两个加载域:VECTOR 和 ARM_LIB_STACKHEAP
.sct 文件代码如下:
LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
* (LOS_HEAP_INFO)
}
VECTOR 0x20000000 0x400 { ; Vector
* (.data.vector)
}
RW_IRAM1 0x20000400 0x0000F800 { ; RW data
* (.data, .bss)
* (LOS_HEAP)
}
ARM_LIB_STACKHEAP 0x2000FC00 EMPTY 0x400 { ;LiteOS MSP
}
}
4、测试
内核代码移植完毕后,main()函数就可以跑起来了。
int main(void)
{
UINT32 uwRet = LOS_OK;
LED_Init(); //硬件驱动初始化
uwRet = LOS_KernelInit(); //OS内核初始化
if (uwRet != LOS_OK)
{
return LOS_NOK;
}
uwRet = create_task1(); //创建任务
if (uwRet != LOS_OK)
{
return LOS_NOK;
}
LOS_Start(); //启动OS
}
其中,create_task1()如下所示,主要是填满TSK_INIT_PARAM_S类型结构体,调用LOS_TaskCreate函数进行创建:
UINT32 create_task1(void)
{
UINT32 uwRet = LOS_OK;
TSK_INIT_PARAM_S task_init_param;
task_init_param.usTaskPrio = 1;//任务优先级
task_init_param.pcName = "task1";//任务名
task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)task1;//指定任务入口函数
task_init_param.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//设置任务堆栈大小
uwRet = LOS_TaskCreate(&g_TestTskHandle,&task_init_param);//调用任务创建函数
if(uwRet !=LOS_OK)
{
return uwRet;
}
return uwRet;
}
task1主要做的工作是指示灯的状态切换:
VOID task1(void)
{
UINT32 uwRet = LOS_OK;
while(1)
{
macLED1_TOGGLE();
uwRet = LOS_TaskDelay(1000);//操作系统延时
if(uwRet !=LOS_OK)
return;
}
}
refer:
https://blog.csdn.net/franklfeng/article/details/64437907
https://blog.csdn.net/sinat_27066063/article/details/84320579
上一篇:STM32 启动代码分析详解
史海拾趣
|
招聘启示电子工程师二名 要求:大专以上学历, 懂安防系统的设计,模拟电路设计,会电子线路设计,工作能力强,能独挡一面,至少三年工作经验.有意者,可发简历到邮箱,或电话联系,谢谢! 宁波三阳电器有限公司 地址:宁波市鄞州区下应街道蔡家漕工业区10幢 ...… 查看全部问答> |
|
Altium Designer 原理图和PCB多通道设计方法介绍 转载自:http://bbs.21ic.com/icview-141848-1-1.html by:pk.kong 曾经把不少ad6的资料整理想发出来,后来发现用ad6的朋友并不多,所以一直没有动手。 不过最近好几个朋友问ad6这个多通道设计的问题。特别是许mm,可是每次我都忘记把资料带回来 ...… 查看全部问答> |
|
PIC单片机做RS-485通讯时遇到的问题,急请高手指教!! 我以前用过MEGA64和51做RS485通讯效果都很好,但是这次用PIC16F877A就遇到比较麻烦的问题,请各位高手指点!! 应用要求:一个主控板,通过轮询方式访问多个子节点。轮询时间间隔是0.5s 硬件:MAX487,用光耦TLP521隔离,单片机是PIC16F877A 问 ...… 查看全部问答> |
|
1:《狼图腾》姜戎 2:《不能承受生命之轻》米兰.昆德拉 3:《借我一生》余秋雨 4:《平凡的世界》路遥 5:《文化苦旅》余秋雨 6:《如何做最好的自己》王宇 7:《一网情深》李开复 8:《退步集》陈丹青 9 ...… 查看全部问答> |
|
老鬼下午还在深圳,晚上已经到了天府之国成都。我想这个对于做自动化的人老说应该不是很稀奇的事情。 一路上边走边看,记录下了路上的点点见闻。老鬼就点拨下和自动化相关的乱七八糟。 &n ...… 查看全部问答> |






