FreeRTOS移植到F1C100S, 含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();
}
离线
很少上线, 不好意思,
有人说想要完整工程, 但我没单独实验工程, 我的工程功能多比较大, 且交叉性强, 单独做工程麻烦,
工程是在 https://whycan.com/p_11825.html USB工程上添加的
移植有什么问题发出来吧!
离线