|
各位大佬,
我在进行移植 freertos 到板子上的时候遇到一些问题,希望得到大家的帮助。
板子情况: LPC2420, 晶振12M。
使用的启动代码为 NXP 官方提供。
移植环境:
Keil MDK 4.0x.
使用的 freertos 6.04, 官方移植:portable/RVDS/ARM7_LPC21xx/ 的文件。
编译运行成功。
freertosconfig.h 使用过 LPC21xx 的模板和 LPC23xx 的模板,都不起作用。
主要设定了系统工作频率 Fcclk.
我的程序代码:
===============================================
void TaskA(void* pvParameters)
{
while(1) {
vTaskDelay(1000);
}
}
void TaskB(void* pvParameters)
{
while(1) {
vTaskDelay(500);
}
}
int main(void)
{
// ....
//xTaskCreate(TaskA, "TaskA", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
xTaskCreate(TaskB, "TaskB", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
vTaskStartScheduler();
return 0;
}
================================================
现在的问题:
程序会运行到 startup.s 中的:
PAbt_Handler B PAbt_Handler
死掉。
===============================================
portASM.s 中的:
vPortStartFirstTask
PRESERVE8
portRESTORE_CONTEXT
portRESTORE_CONTEXT 的实现代码如下:
==================================
MACRO
portRESTORE_CONTEXT
LDR R0, =pxCurrentTCB ; Set the LR to the task stack. The location was...
LDR R0, [R0] ; ... stored in pxCurrentTCB
LDR LR, [R0]
LDR R0, =ulCriticalNesting ; The critical nesting depth is the first item on...
LDMFD LR!, {R1} ; ...the stack. Load it into the ulCriticalNesting var.
STR R1, [R0] ;
LDMFD LR!, {R0} ; Get the SPSR from the stack.
MSR SPSR_cxsf, R0 ;
LDMFD LR, {R0-R14}^ ; Restore all system mode registers for the task.
NOP ;
LDR LR, [LR, #+60] ; Restore the return address
; And return - correcting the offset in the LR to obtain ...
SUBS PC, LR, #4 ; ...the correct address.
MEND
======================================
希望大家能够多多帮助, 多谢了! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|