首页 > 代码库 > ucosii 移植STM32笔记
ucosii 移植STM32笔记
今天接触了ucosii在STM32上面的移植,就碰到的几个问题进行总结:
1、工程输出文件出现错误,原因是没有添加相应设备芯片的启动文件;
2、出现undefined symbol ... refered from ...,原因是OS_CPU_A.ASM这个文件没有添加;
3、启动函数(如下),主要用于系统启动之后进行调用的,也叫启动任务:
static void startup_task(void *p_arg)
{
systick_init(); /* Initialize the SysTick. */
while(1)
{
/*创建新任务,系统启动时执行的任务,其余的用户可以其他地方自定义创建*/
OSTaskCreate(led1_task, 0, &led1_task_stk[LED1_TASK_STK_SIZE - 1], LED1_TASK_PRIO); //LED1_TASK_PRIO=5
OSTimeDlyHMSM(0,0,0,500); //500ms延时,释放CPU控制权
}
}
当用户想要创建新的任务,在主函数中进行如下编辑:
int main(void)
{
BSP_Init();
OSInit();
// g_TxMbox=OSMboxCreate((void*)0); //创建全局信号-消息邮箱
OSTaskCreate(startup_task, (void *)0,
&startup_task_stk[STARTUP_TASK_STK_SIZE - 1],
STARTUP_TASK_PRIO);//启动任务
OSTaskCreate(led2_task, (void *)0,
&led2_task_stk[STARTUP_TASK_STK_SIZE - 1],
6);//自定义任务1
OSTaskCreate(led3_task, (void *)0,
&led3_task_stk[STARTUP_TASK_STK_SIZE - 1],
7); //自定义任务2
OSStart();
return 0;
}
4、开发一定要注意的是细节,复制需要重复利用的代码之后,需要修改的地方一定要记得修改,比如这次在创建新任务时,用复制的方式,忘记改了led1、2、3,把程序烧进去了发现只有一个灯作用,然后去找程序的任务创建问题,结果不是,只是忘记修改io口而已。
ucosii 移植STM32笔记