1. 移植过程
2.编译成功 ,烧录到单片机上,一旦调用freeRtos的API会使得单片机卡死。
原因:堆栈溢出,需按照datasheet来配置小于datasheet SARAM的的大小,能用的大小为全局变量的余量。
3.初始化时钟时一旦完成初始化会使得整个系统卡死。
void SysTick_Handler(void) //cpu 中断来源 汇编语言编写
{
//xPortSysTickHandler();
static char print_cont1 ,print_cont=0;
//test
static uint32_t systickCount = 0;
systickCount>645352?(systickCount=0):(systickCount++);
if (systickCount % (8000) == 0) { // 每100次打印一次,减少日志量
printf("SysTick Handler Called %d times\r\n", systickCount);
}
//
if (Rtos_count != 0x00) {
printf("Rtos_count %d \r\n", Rtos_count);
Rtos_count--;
}
#if SYSTICK_MODE == USE_INTERRUPT_MODE
if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)//系统已经运行
{
if(print_cont==0)
{
printf("RTOS time running...\r\n");
print_cont++;
}
xPortSysTickHandler();
}
else
{
if(print_cont1==0)
{
printf("snake arm running...\r\n");
print_cont1++;
}
TimingDelayDecrement();//BOARD_Delay_Decrement();
}
#endif
}
#endif
原因:在操作系统的任务没有被创建的时候,就开始了操作系统的心跳,该心跳会区遍历任务链表的任务。
应当怎加判断条件,在操作系统没有工作的的时候用CPU的心跳 ,在创建任务之后操作系统再去接管CPU的心跳。
4.延时函数在操作系统工作以后不能用。也会出现卡死。
打开延时函数的定义,会发现延时函数在等在一个变量减少为1,而裸机的心跳会使得变量递减,操作系统接管之后,需要重新定义延时函数。
sTimingDelay = count;
while(sTimingDelay != 0);
增加修改代码如下:
extern uint32_t SystemCoreClock;
void delay_us(u32 nus)
{
u32 ticks;
u32 told,tnow,tcnt=0;
u32 reload=SysTick->LOAD; //LOAD的值
ticks=nus*SystemCoreClock; //需要的节拍数
told=SysTick->VAL; //刚进入时的计数器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
}
};
}
void delay_ms_Rtos(u32 count)
{
u32 ticks;
u32 told,tnow,tcnt=0;
u32 reload=SysTick->LOAD; //LOAD的值
ticks=count*SystemCoreClock/2; //ticks=count*SystemCoreClock; //需要的节拍数
told=SysTick->VAL; //刚进入时的计数器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
}
};
5.在创建的任务中。如果调用临界区,不能再使用延时函数。否则也会卡死
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43519774/article/details/145015796
|