当前位置:首页 > 嵌入式系统课程设计
OSStartHighRdy启动就绪态中任务优先级最高的任务。OSIntCtxSw保存被中断任务的一些状态寄存器保存到该模式下的堆栈中,当优先级高的任务完成后,再从堆栈中返回。而OSIntCtxSw_1是任务切换时,对新任务所做的堆栈处理。
4.μC/OS-II的多任务调度
μC/OS-Ⅱ以及绝大多数商业上销售的实时内核都是可剥夺型内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。
5. 根据应用,划分任务,编写程序
四、温度AD转换程序: #include \
#define TASK_STK_SIZE 64 OS_STK Main_TaskStk[TASK_STK_SIZE]; uint32 i,flag; uint32 k,k1,k2,k3; void write(void); int read(void); void delay(uint32 n); void display(void); void task_1(void *p_arg) {
p_arg = p_arg; /* 避免编译警告 */
25
TargetInit(); while(1) {
if(flag==50) { write(); k=read()*100/255*5; k1=k/100; k2=k/10; k3=k; flag=0;
IODIR=0xFFFFff00;
} flag++; i=k1;
IOCLR=0xffff<<16; IOSET=0x1<<24; display(); IOCLR=0x1<<23; delay(50);
i=k2;
IOCLR=0xffff<<16; IOSET=0x1<<25; display(); delay(50);
i=k3;
26
IOCLR=0xffff<<16; IOSET=0x1<<26; display(); delay(50);
} }
/***** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
******************************************************************************/ int main (void) {
PINSEL0=0x00000000; PINSEL1=0x00000000; OSTaskSuspend(OS_PRIO_SELF);
//suspend itself
IODIR=0xFFFFFFff;
write();
k=read()*100/255*5; k1=k/100; k2=k/10; k3=k;
IODIR=0xFFFFff00;
OSInit();
OSTaskCreate(task_1, (void *)0, &Main_TaskStk[TASK_STK_SIZE - 1], 0); OSStart(); return 0;
27
}
/************************** 相关函数 *****************/ void delay(uint32 n) { int iii,ii;
for(iii=0;iii } int read() { IODIR=0x0; return (IOPIN & 0xff); } void write() { IOSET=0x3<<8; //start delay(10); IOCLR=0X3<<8; delay(100); IOSET=0x1<<11; delay(10); IOCLR=0x1<<11; } void display() ale 28
共分享92篇相关文档