本帖最后由 thinkabout4451 于 2015-1-17 16:14 编辑
最简单的两个hello world任务。
在BSP_Init函数里,ms不能做太多事情,比如增加几个printf就不行了。(之前是增加了一个lcd的初始化函数)
现象就是打印几个aaaaa就没反映了,如果修改代码只打印一两个aa等,就没问题,能正常进任务往下跑。
其实最开始发现这个问题:是BSP_Init里增加一个lcd12864的初始化,就不行,但如果放到后面的任务初始化里就没问题。
搞的头大,有没有大侠了解这个情况来着,非常感谢
代码如下:
void BSP_Init(void)
{
RCC_Configuration();
SysTick_init();
InitLED();
Init_Usart1();
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
}
int main(void)
{
OS_ERR err;
/* 板级初始化 */
BSP_Init();
/* 初始化"uC/OS-III"内核 */
OSInit(&err);
/*创建任务*/
OSTaskCreate((OS_TCB *)&StartUp_TCB, // 任务控制块指针
(CPU_CHAR *)"StartUp", // 任务名称
(OS_TASK_PTR )Task_Start, // 任务代码指针
(void *)0, // 传递给任务的参数parg
(OS_PRIO )STARTUP_TASK_PRIO, // 任务优先级
(CPU_STK *)&StartUp_Stk[0], // 任务堆栈基地址
(CPU_STK_SIZE)STARTUP_TASK_STK_SIZE/10, // 堆栈剩余警戒线
(CPU_STK_SIZE)STARTUP_TASK_STK_SIZE, // 堆栈大小
(OS_MSG_QTY )0, // 可接收的最大消息队列数
(OS_TICK )0, // 时间片轮转时间
(void *)0, // 任务控制块扩展信息
(OS_OPT )(OS_OPT_TASK_STK_CHK |
OS_OPT_TASK_STK_CLR), // 任务选项
(OS_ERR *)&err); // 返回值
/* 启动多任务系统,控制权交给uC/OS-II */
OSStart(&err);
}
找到原因了, SysTick_init(); 最在最后就行了
估计是执行到就开始了cpu的时间调度了。。。
|