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

📄 main.c

📁 一个基于单片机的小型操作系统
💻 C
字号:
#include "..\ucos-ii\includes.h"               /* uC/OS interface */
#include "uhal.h"
#include "driven.h"

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

///******************任务定义***************///
OS_STK SYS_Task_Stack[STACKSIZE]= {0, }; //system task刷新任务堆栈
#define SYS_Task_Prio				1
void SYS_Task(void *Id);				//(接触屏)键盘管理任务

OS_STK Task1_Stack[STACKSIZE]={0, }; 
void Task1(void *Id);					//显示任务
#define Task1_Prio     13

OS_STK Task2_Stack[STACKSIZE]={0, }; 
void Task2(void *Id);					//显示时间任务
#define Task2_Prio     14

OS_STK Task3_Stack[STACKSIZE]={0, };//任务3,(小)键盘输入  1122
void Task3(void *Id);
#define Task3_Prio		12

U32 Sub_Mode;								//全局状态变量
U8 state=NORMAL;
U8 esc=ESCAP;
U8 number=0;
U8 numlock=0;

extern int term_length;
extern RTC_REG RTC_data, RTC_Sdata;
extern char intstr[9];

int main(void)
{
	
	
	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //
	LCD_Init();
	dis_main();
							//Begin OS
	OSInit();  
	OSTaskCreate(SYS_Task,  (void *)0,  (OS_STK *)&SYS_Task_Stack[STACKSIZE-1],  SYS_Task_Prio);
	OSTaskCreate(Task1,  (void *)0,  (OS_STK *)&Task1_Stack[STACKSIZE-1],  Task1_Prio  );
	OSTaskCreate(Task2,  (void *)0,  (OS_STK *)&Task2_Stack[STACKSIZE-1],  Task2_Prio  );
	OSTaskCreate(Task3,  (void *)0,  (OS_STK *)&Task3_Stack[STACKSIZE-1],  Task3_Prio  );//任务3,键盘输入
	OSStart();              // start the Multitask system //
	// never reached //
	return 0;
}//main


/*
**********************************************************************************************************************
*                       SYS_Task
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月6日
*
* 描述:得到TCH接触屏的响应
*
* 参数:无
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void SYS_Task(void *Id)
{
	//U32 lstate;
	//OS_CPU_SR  cpu_sr;
	
    OSRunning=TRUE;          //使能多任务切换
	uHALr_InstallSystemTimer(); //启动Tick
	
	Uart_Printf("\n In  Task  s");
	for (;;)
	{
	GetTCHXY();
	//Uart_Printf("\n In Main Task");
	OSTimeDly(300);
	}
}




/*
**********************************************************************************************************************
*                       SYS_Task
*
* 作者:孙周旋修改
*
* 时间:2007年7月10日
*
* 描述:得到各种状态的响应页面显示
*
* 修改:当无记录时
*
* 参数:Id:任务号
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void Task1(void *Id) 		//显示任务    
{
	OS_CPU_SR  cpu_sr;
	dis_main();
	Uart_Printf("\n In  Task  1");
	for(;;)
	{
		//Uart_Printf("\n\tTask1 Get State=%d",state);
		switch(state)
		{
			case DISTIME:
				dis_time();
				dis_main();
				OS_ENTER_CRITICAL();
				state = NORMAL;
				OS_EXIT_CRITICAL();
				break;
			case DISDATE:
				dis_date();
				dis_main();
				OS_ENTER_CRITICAL();
				state = NORMAL;
				OS_EXIT_CRITICAL();
				break;
			case DISREC:
				REC_Display();
				if(state==NOREC)			//如果没记录
				{
					NoREC_Display();		//跳到无记录页面
				}
				dis_main();
				OS_ENTER_CRITICAL();
				state = NORMAL;
				OS_EXIT_CRITICAL();
				break;
			case SETRTC:
				RTC_Set_Display();
				if(esc != ESCAP)
					Rtc_Set();
				dis_main();
				OS_ENTER_CRITICAL();
				state = NORMAL;
				OS_EXIT_CRITICAL();
				break;
			case SETREC:
				REC_Set_Display();
				dis_main();
				OS_ENTER_CRITICAL();
				state = NORMAL;
				OS_EXIT_CRITICAL();
				break;
			default:
				break;
		}
	
	OSTimeDly(500);
	}
}

void Task2(void *Id)  						//时钟显示任务   
{

	U32 bcolour=0xff;
	U32 fcolour = 0x00;
	U32* pput0 =(U32*)0xc0009b8;
	Uart_Printf("\n In  Task  2");
	while(1)
	{
		 Rtc_Read();   
		 BCDU8toAsc(HexToInt(RTC_data.hour));
		 		 
		 (void)LCD_Prints(intstr,fcolour,pput0,bcolour);//由于是32位指针,每字符横向8点,因此每向前一个字符32位指针+2
		 LCD_Putcf(':', fcolour, pput0+4,bcolour);
		 BCDU8toAsc(HexToInt(RTC_data.min));
		 
		 (void)LCD_Prints(intstr,fcolour,pput0+6,bcolour);
		 LCD_Putcf(':', fcolour, pput0+10,bcolour);
		 BCDU8toAsc(HexToInt(RTC_data.sec));
		 
		 (void)LCD_Prints(intstr,fcolour,pput0+12,bcolour);
		 
	}		
	Uart_Printf("\n In  Task  22");
	OSTimeDly(1000);
	
}

/*
**********************************************************************************************************************
*                       SYS_Task
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月6日
*
* 描述:任务3,得到键盘输入
*
* 参数:无
*
* 返回值:无
* 
***********************************************************************************************************************
*/                       
void Task3(void *Id) 		
{
	for (;;)
	{
	Uart_Printf("\n\tTask3 State=%d",state);
	GetSETKEY();
	OSTimeDly(200);
	}
}

//end of the main.c model



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -