这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » uc/os 问题

共3条 1/1 1 跳转至

uc/os 问题

菜鸟
2007-01-30 01:04:30     打赏

刚学UC/OS ,有不懂的请教各位

void main (void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */

OSInit(); /* Initialize uC/OS-II */

PC_DOSSaveReturn(); /* Save environment to return to DOS */
PC_VectSet(uCOS, OSCtxSw);
/* Install uC/OS-II's context switch vector */

RandomSem = OSSemCreate(1); /* Random number semaphore */

OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart(); /* Start multitasking */
}

void TaskStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
char s[100];
INT16S key;


pdata = pdata; /* Prevent compiler warning */

TaskStartDispInit(); /* Initialize the display */

OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();

OSStatInit(); /* Initialize uC/OS-II's statistics */

TaskStartCreateTasks(); /* Create all the application tasks */

for (;;) {
TaskStartDisp(); /* Update the display */


if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */
if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */
PC_DOSReturn(); /* Return to DOS */
}
}

OSCtxSwCtr = 0; /* Clear context switch counter */
OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */
}
}

问:怎么确认临界代码段,main中红色部分的不是,而在taskstar中的是,加关闭中断处理???




关键词: 问题    

菜鸟
2007-01-31 00:10:00     打赏
2楼
OS_ENTER_CRITICAL()在UC/OS-II书中介绍的是关闭中断;是保护临界代码段的一种方法。不知道这上面两个地方为什么有区别??

菜鸟
2007-02-01 02:20:00     打赏
3楼
怎么没人知道?

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]