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

📄 main.c

📁 杭州立宇泰豪华型44B0开发板
💻 C
字号:
#include	"ucos-ii/includes.h"               /* uC/OS interface */
#include    "uhal/uhal.h"
#include    "Target/44b.h"
#include    "Target/44blib.h"

//task stack size
#ifdef SEMIHOSTED
	#define	TASK_STACK_SIZE	(64+SEMIHOSTED_STACK_NEEDS)
#else
	#define		TASK_STACK_SIZE	10*1024
#endif

//Task definition
//Main Task
OS_STK Main_Stack[TASK_STACK_SIZE]= {0, };
void Main_Task(void *Id);
#define Main_PRIO       10

//TaskKey
OS_STK TaskKEY_Stack[TASK_STACK_SIZE]= {0, };
void TaskKEY_Task(void *Id);
#define TaskKEY_PRIO     11

//Task1
OS_STK Task1_Stack[TASK_STACK_SIZE]= {0, };
void Task1_Task(void *Id);
#define Task1_PRIO       12

//Task2
OS_STK Task2_Stack[TASK_STACK_SIZE]= {0, };
void Task2_Task(void *Id);
#define Task2_PRIO       14

//Task3
OS_STK Task3_Stack[TASK_STACK_SIZE]= {0, };
void Task3_Task(void *Id);
#define Task3_PRIO       16

extern int ReadAdc(int ch);
OS_EVENT *QSem;
void     *QMsgTbl[100];//max 100


void Task1_Task(void *Id)
{
	int a0=0;
	char txmsg;
	
	while(1)
	{
		OS_ENTER_CRITICAL();
	    a0 = ReadAdc(0);
	    OS_EXIT_CRITICAL();
	    if(a0 > 818)
	    {
	      txmsg='0';
	      OSQPost(QSem, (void *)&txmsg);
          OSTimeDly(1000);
        }
        else
        OSTimeDly(20);
        if(OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ){
			OSTaskDel(OS_PRIO_SELF);
		}
	}
}
void Task2_Task(void *Id)
{
	int a1=0;
	char txmsg;
	
	while(1)
	{
		OS_ENTER_CRITICAL();
	    a1 = ReadAdc(1);
	    OS_EXIT_CRITICAL();
	    if(a1 > 818)
	    {
	      txmsg='1';
	      OSQPost(QSem, (void *)&txmsg);
          OSTimeDly(1000);
        }
        else
        OSTimeDly(20);
        if(OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ){
			OSTaskDel(OS_PRIO_SELF);
		}
	}
}
void Task3_Task(void *Id)
{
	int a2=0;
	char txmsg;
	
	while(1)
	{
		OS_ENTER_CRITICAL();
	    a2 = ReadAdc(2);
	    OS_EXIT_CRITICAL();
	    if(a2 > 818)
	    {
	      txmsg='2';
	      OSQPost(QSem, (void *)&txmsg);
          OSTimeDly(1000);
        }
        else
        OSTimeDly(20);
        if(OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ){
			OSTaskDel(OS_PRIO_SELF);
		}
	}
}

void TaskKEY_Task(void *Id)
{
	unsigned char inp;
	char txmsg;
	static keyflag=0;
	
	rPCONG&=0x00ff;//设置EXINT4~7为输入脚
	rPUPG&=0x0f;
	while(1)
	{
		inp=rPDATG;
		if(inp<0xf0)//there is key
		{
			inp|=0x0f;
			if((inp==0x7f)&&(keyflag==0))
			{
			   txmsg='Y';
	           OSQPost(QSem, (void *)&txmsg);
	           keyflag=1;
	        }
	        else if((inp==0xbf)&&(keyflag==1))
	        {
	           txmsg='N';
	           OSQPost(QSem, (void *)&txmsg);
	           keyflag=0;
	        }
	        OSTimeDly(500);  
	     }
	     else
	     OSTimeDly(200);
	 }
}

void Main_Task(void *Id)
{
	char *rxmsg=0;
	unsigned char err;
	
	ARMTargetStart();
	
	QSem = OSQCreate(&QMsgTbl[0], 100);
	
	OSTaskCreate(TaskKEY_Task, (void *)0, (OS_STK *)&TaskKEY_Stack[TASK_STACK_SIZE-1],  TaskKEY_PRIO);
	
	while (1)
	{
		rxmsg=(char *)OSQPend(QSem, 0, &err); 
		switch(*rxmsg)
		{
			case '0':
			       OS_ENTER_CRITICAL();
    	           uHALr_printf("\nAIN0's voltage overflow!");
    	           OS_EXIT_CRITICAL();
    	           break;
    	    case '1':
			       OS_ENTER_CRITICAL();
    	           uHALr_printf("\nAIN1's voltage overflow!");
    	           OS_EXIT_CRITICAL();
    	           break;
    	    case '2':
			       OS_ENTER_CRITICAL();
    	           uHALr_printf("\nAIN2's voltage overflow!");
    	           OS_EXIT_CRITICAL();
    	           break;
    	    case 'Y':
    	           rCLKCON=0x7ff8;	
                   rADCCON=0x1|(0<<2);		//Enable ADC
                   rADCPSR=255;
    
    	           OSTimeDly(100);//It's necessary to delay for 10ms for ADC reference voltage stabilization.
    	    
    	           OSTaskCreate(Task1_Task, (void *)0, (OS_STK *)&Task1_Stack[TASK_STACK_SIZE-1],  Task1_PRIO);
  	               OSTaskCreate(Task2_Task, (void *)0, (OS_STK *)&Task2_Stack[TASK_STACK_SIZE-1],  Task2_PRIO);
  	               OSTaskCreate(Task3_Task, (void *)0, (OS_STK *)&Task3_Stack[TASK_STACK_SIZE-1],  Task3_PRIO);
  	               OS_ENTER_CRITICAL();
    	           uHALr_printf("\nBegin ADC test...");
    	           OS_EXIT_CRITICAL();
    	           break;
    	    case 'N':
    	           while (OSTaskDelReq(Task1_PRIO)!=OS_TASK_NOT_EXIST)
	               {
	    	            OSTimeDly(10);
	               }
	               while (OSTaskDelReq(Task2_PRIO)!=OS_TASK_NOT_EXIST)
	               {
	    	            OSTimeDly(10);
	               }
	               while (OSTaskDelReq(Task3_PRIO)!=OS_TASK_NOT_EXIST)
	               {
	    	            OSTimeDly(10);
	               }
	               OS_ENTER_CRITICAL();
    	           uHALr_printf("\nStop ADC test...");
    	           OS_EXIT_CRITICAL();
    	           break;
    	}
		OSTimeDly(40);
	}
}	

int Main()
{
	Port_Init();
	Uart_Init(0,115200);
	Led_Display(0xf);
	Delay(0);
    Beep(0x01);
	Uart_Select(0); //Select UART0//
	Uart_Printf("\n*************************************************************************");
	Beep(0x0);
	Uart_Printf("\n*                            立宇泰电子                                 *");
	Uart_Printf("\n*                        -uC/OS-II Test 2-                              *");
	Uart_Printf("\n*                          Version 1.21                                 *");    
	Uart_Printf("\n*                     Email:Support@hzlitai.com.cn                      *");
	Uart_Printf("\n*             UART Config--COM:115.2kbps,8Bit,NP,UART0                  *");
	Uart_Printf("\n*-------------Press Exint7 to Start, Press Exint6 to Stop---------------*\n");
	Led_Display(0x0);
	ARMTargetInit();//initialize Target
	
	// Init uCOS-II
	OSInit();

	//Create the Main Task
	OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[TASK_STACK_SIZE-1],  Main_PRIO);

	/* Start uCOS-II */
	OSStart();
	return 0;
}                              


⌨️ 快捷键说明

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