📄 main.c
字号:
#include "includes.h"
#include "bsp.h"
#include "serial.h"
#include "irq.h"
OS_STK TaskStartStk[TASK_STK_SIZE]; /* Stack area for TaskStart */
OS_STK TaskStartStk1[TASK_STK_SIZE]; /* Stack area for TaskStart */
OS_EVENT *Sem1;
OS_EVENT *pQMsg;
void *QMsgTbl[MSG_QUEUE_SIZE];
TMessage Msg;
void TaskStart1(void *data);
void TaskStart(void *data)
{
double dly = 0.5;
IRQ irq;
Bsp_init();
irq.Id = AT91C_ID_IRQ0;
irq.IRQ_handling = TaskStart1;
//Sem1 = OSSemCreate(0);
IRQ_Init(irq);
pQMsg = OSQCreate(QMsgTbl,MSG_QUEUE_SIZE);
OSTaskCreate(TaskStart1,(void *)0,&TaskStartStk1[TASK_STK_SIZE - 1],9);
for(;;)
{
OSTimeDly(100);
dly += 1.0;
// UartPrintf(1,"\n\rDly=%f",dly);
//OSSemPost(Sem1);
}
}
void TaskStart1(void *data)
{
AT91_CHAN chan = INIT_UART;
AT91_CHAN *pUart = &UART_CHAN[1];
TMessage *pMsg;
INT8U err;
chan.Id = AT91C_ID_US0;
SerialInit(chan);
UartPrintf(1,"\n\rTaskStart1 ....");
for(;;)
{
//OSSemPend(Sem1,0,&err);
pMsg = OSQPend(pQMsg,0,&err);
UartPrintf(1,"1");
}
}
void main(void)
{
//设置堆栈的,只有设置完毕才能正确打印浮点数
InitUserStack();
//由于在前面的LowLevelInit()中设置了SerialInit(chan)
//但在随后的bss初始化中,把SerialInit对串口的设置数据
//全部给毁掉啦,因此在这里重新初始化
InitDubegUart();
//操作系统初始化
OSInit();
OSTaskCreate(TaskStart, (void *)0,&TaskStartStk[TASK_STK_SIZE - 1],10);
UartPrintf(0,"\n\rStartTask ....");
//jgh 2007-5-28
//在该函数执行前,不能有任何中断产生,因为此时OSRunning=FALSE,
//如果产生中断,那么进入中断时OSIntNesting ++,而当中断退出
//时OSIntExit,由于OSRunning=FALSE,OSIntNesting 不会减1
//所以以后OSIntNesting的初始值为1,这样在调用OSStart后OSRunning=TRUE,
//这样在调用OSIntExit,OS_Sched函数时,由于OSIntNesting!=0不会进行任务调度,
//函数认为还在中断处理程序中,不用调度,这样程序就不调度啦,但响应中断
OSStart(); /* start multitasking */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -