问题如下:
我看了很多代码,及时OS启动前先禁止所有的中断。
但我搜遍了整个程序也没找到对应的开中断的地方。
这是为何?
如 BSP_IntDisAll(),却没有开中断的语句。
int main(void)
{
CPU_INT08U err;
/* 禁止所有的中断 */
BSP_IntDisAll();
/* 初始化"uC/OS-II"内核 */
OSInit();
/* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
OSTaskCreateExt(AppTaskStart, /* 启动任务函数指针 */
(void *)0, /* 传递给任务的参数 */
(OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
APP_TASK_START_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
APP_TASK_START_PRIO, /* 任务ID,一般和任务优先级相同 */
(OS_STK *)&AppTaskStartStk[0],/* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
APP_TASK_START_STK_SIZE, /* 任务栈大小 */
(void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
(如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
/* 定义如下:
OS_TASK_OPT_STK_CHK 使能检测任务栈,统计任务栈已用的和未用的
OS_TASK_OPT_STK_CLR 在创建任务时,清零任务栈
OS_TASK_OPT_SAVE_FP 如果CPU有浮点寄存器,则在任务切换时保存浮点寄存器的内容
*/
/* 指定任务的名称,用于调试。这个函数是可选的 */
OSTaskNameSet(APP_TASK_START_PRIO, APP_TASK_START_NAME, &err);
/*ucosII的节拍计数器清0 节拍计数器是0-4294967295*/
OSTimeSet(0);
/* 启动多任务系统,控制权交给uC/OS-II */
OSStart();
} |