本文主要是介绍FreeRTOS移植到ARM9 ARM926EJS, 含GCC和keil版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
内含测试例程, 测试通过
按个人修改只需几个地方:
//开定时器
static void prvSetupTimerInterrupt(void)
{
Timer_Init(TIMER1, 1000000 / configTICK_RATE_HZ, 1);
request_irq(IRQ_TIMER1, vPreemptiveTick, 0); //register int
Timer_enable(TIMER1);
}
//修改中断入口函数
_software_interrupt:
.word vPortYieldProcessor /*for freerots, if no os, this is software_interrupt */
_irq:
.word vFreeRTOS_ISR /*for freertos, if no os, this is irq */
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
本人移植过程中发现了个问题:
当时参考例程的任务切换是汇编的:
__asm volatile
(
" bl xTaskIncrementTick \t\n" \
" cmp r0, #0 \t\n" \
" beq SkipContextSwitch \t\n" \
" bl vTaskSwitchContext \t\n" \
"SkipContextSwitch: \t\n"
);
编译通过, 但一运行就卡死
折腾一番后, 最后将上面的汇编译成C代码, 运行成功
(这里看两者意图是一样的, 不明白, 望有高人指点)
if(xTaskIncrementTick()!=0)
{
vTaskSwitchContext();
}
下载地址: (19条消息) ARM926EJSFreeRTOS移植KEILGCC.zip-嵌入式文档类资源-CSDN文库
这篇关于FreeRTOS移植到ARM9 ARM926EJS, 含GCC和keil版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!