首页 > 代码库 > 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笔记