📄 main.c
字号:
#include "includes.h"
#define MAX_STK_SIZE 50
//**************************************
void TaskA(void* data);
OS_STK TaskA_Stk[MAX_STK_SIZE+1];
#define TaskA_Prio 4
void TaskB(void* data);
OS_STK TaskB_Stk[MAX_STK_SIZE+1];
#define TaskB_Prio 8
//**************************************
void InitSystem(void);
OS_EVENT *sem;
int main(void)
{
OSInit();
sem=OSSemCreate(1);//创建一个信号量 (注:由任务或启动代码操作)
OSTaskCreate(TaskA, (void *)0, &TaskA_Stk[MAX_STK_SIZE], TaskA_Prio);
OSTaskCreate(TaskB, (void *)0, &TaskB_Stk[MAX_STK_SIZE], TaskB_Prio);
OSStart();
return 0;
}
void TaskA(void *data)
{
INT8U erra;
data=data;
InitSystem();
for(;;)
{
OSSemPend(sem,0,&erra);//等待一个信号量 (注:只能由任务操作)
//如果任务Task_A调用OSSemPend(),且信号量的值有效(非0),那么OSSemPend()递减信号量计数器(.OSEventCnt),并返回该值。
//换句话说,Task_A获取到共享资源的使用权了,之后就执行该资源。
//如果如果任务Task_A调用OSSemPend(),信号量无效(为0),那么OSSemPend()调用OS_EventTaskWait()函数,把Task_A放入等待列表中。
//(等待到什么时候呢?要看OSSemPost()(或者等待超时情况),由它释放信号量并检查任务执行权,见下资料)
*P_IOA_Data=0xff0f;
OSTimeDly(64);
OSSemPost(sem);//发出(释放)一个信号量 (注:由任务或中断操作)
//本函数其中调用OS_EventTaskRdy()函数,把优先级最高的任务Task_A(在这假如是Task_A,
//另外假设当前调用OSSemPost()的任务是Task_B)从等待任务列表中去除,并使它进入就绪态。
//然后调用OSSched()进行任务调度。如果Task_A是当前就绪态中优先级最高的任务,则内核执行Task_A;
//否则,OSSched()直接返回,Task_B继续执行.
}
}
void TaskB(void *data)
{
INT8U errb;
data=data;
for(;;)
{
OSSemPend(sem,0,&errb);
*P_IOA_Data=0xfff0;
OSTimeDly(64);
OSSemPost(sem);
}
}
void InitSystem(void)
{
*P_IOA_Dir = 0xffff; //设置IOA口为同相低电平输出
*P_IOA_Attrib = 0xffff;
*P_IOA_Data = 0xffff;
*P_TimeBase_Setup = C_TMB1_64Hz;
*P_INT_Ctrl = C_IRQ6_TMB1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -