⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 AT91RM9200-UC/OS-II,clock,irq,usart,pio等驱动
💻 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 + -