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

📄 main.c

📁 单片机开发环境 windows+ads+hjtag
💻 C
📖 第 1 页 / 共 3 页
字号:

#include "SP_LIB.H"


#ifdef OS_TASK_CREATE_EXT_EN
	//#define DSP_OS_INFO
#endif



enum tagTaskPrio {
	TIME_ACTION_TASK_PRIO = 10,
	FILE_TASK_PRIO,


	SD_TEST_TASK_PRIO,
	SET_TIME_TASK_PRIO,
	FLASH_TASK_PRIO,
	WIRELESS_TASK_PRIO,
	CABLE_COM_TASK_PRIO,
	KEY_TASK_PRIO,
	LCD_TASK_PRIO,
	START_TASK_PRIO,
	PIN_YIN_INPUT_PRIO,
#ifdef DSP_OS_INFO
	OS_INFO_TASK_PRIO,
#endif
	OS_PRIO_TOTAL
};




#define	FILE_TASK_STK_SIZE	300				
OS_STK	FileTaskStk [FILE_TASK_STK_SIZE];		
//void  TimeActionTask(void *pdata);	

#define	TIME_ACTION_TASK_STK_SIZE	200				
OS_STK	TimeActionTaskStk [TIME_ACTION_TASK_STK_SIZE];		
void  TimeActionTask(void *pdata);	

#define	START_TASK_STK_SIZE	300				
OS_STK	StartTaskStk [START_TASK_STK_SIZE];		
void  StartTask(void *pdata);	


//for the following task will not run at the same time, so they use the same stack
#define COMM_STK_SIZE 512
OS_STK	CommStk [COMM_STK_SIZE];		

void  LCDTask(void *pdata);	
void  KeyTask(void *pdata);	
void  CableComTask(void *pdata);	
void  WirelessTask(void *pdata);	
void  FlashTask(void *pdata);	
void  SetTimeTask(void *pdata);	
void  SDTestTask(void *pdata);	


#ifdef DSP_OS_INFO

#define	OS_INFO_STK_SIZE	128				
OS_STK	OSInfoStk [OS_INFO_STK_SIZE];		

void OSInfoTask( void *pdata )
{
	INT8U str[50];
	INT8U       err;
	OS_STK_DATA data;                       /* Storage for task stack data                             */
	INT8U       i;

	SCI_Open( COM0, SCICFG_Baud9600, SCICFG_8DataBit, SCICFG_ParityNone, SCICFG_1StopBit);

	for( ;; ) {
		sprintf((char*)str, "Total= %d, CPU usage= %d, switches= %d\r\n", OSTaskCtr, OSCPUUsage, OSCtxSwCtr );
		SCI_Send( COM0, str, StrLen(str) );
		OSTimeDly( OS_DLY_100MS );
		for (i = TIME_ACTION_TASK_PRIO; i < OS_PRIO_TOTAL; i++) {
			err  = OSTaskStkChk( i, &data);
			if (err == OS_NO_ERR) {
				sprintf((char*)str, "task#= %d, Free= %d, Used= %d\r\n", i, data.OSFree/4, data.OSUsed/4 );
				SCI_Send( COM0, str, StrLen(str) );
				OSTimeDly( OS_DLY_100MS );
			}
		}

		//state task
		err  = OSTaskStkChk(OS_STAT_PRIO, &data);
		if (err == OS_NO_ERR) {
			sprintf((char*)str, "task= State Task, Free= %d, Used= %d\r\n", data.OSFree/4, data.OSUsed/4 );
			SCI_Send( COM0, str, StrLen(str) );
		}
		//idle task
		err  = OSTaskStkChk(OS_IDLE_PRIO, &data);
		if (err == OS_NO_ERR) {
			sprintf((char*)str, "task= Idle Task, Free= %d, Used= %d\r\n", data.OSFree/4, data.OSUsed/4 );
			SCI_Send( COM0, str, StrLen(str) );
		}
		OSTimeDly( OS_DLY_1000MS );
	}
}
#endif






int main (void)
{
	OSInit ();				




#ifdef DSP_OS_INFO
    OSTaskCreateExt(StartTask,
                          (void *)0,                                   
                          &StartTaskStk[START_TASK_STK_SIZE - 1],   // Set Top-Of-Stack    
                          START_TASK_PRIO,                                // One higher than the idle task
                          START_TASK_PRIO,
                          &StartTaskStk[0],                           // Set Bottom-Of-Stack          
                          START_TASK_STK_SIZE,
                          (void *)0,                                   // No TCB extension             
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else	
	OSTaskCreate( StartTask, (void *)0, &StartTaskStk[START_TASK_STK_SIZE- 1], START_TASK_PRIO);		
#endif




	OSStart ();
	return 0;															
}



#define MAIN_MENU_BUTTON_TOTAL 8
void StartTask(void *pdata)
{
	INT8U buttonIndex;
	INT8U key;
	INT8U buttonStyle;
	INT8U str[10];
	INT8U viewPortIndex;
	INT16S ret;
	 
	pdata = pdata;
	SystemInit ();




#ifdef DSP_OS_INFO
    OSTaskCreateExt(TimeActionTask,
                          (void *)0,                                   
                          &TimeActionTaskStk[TIME_ACTION_TASK_STK_SIZE - 1],   // Set Top-Of-Stack    
                          TIME_ACTION_TASK_PRIO,                                // One higher than the idle task
                          TIME_ACTION_TASK_PRIO,
                          &TimeActionTaskStk[0],                           // Set Bottom-Of-Stack          
                          TIME_ACTION_TASK_STK_SIZE,
                          (void *)0,                                   // No TCB extension             
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
    OSTaskCreateExt(OSFileTask,
                          (void *)0,                                   
                          &FileTaskStk[FILE_TASK_STK_SIZE - 1],   // Set Top-Of-Stack    
                          FILE_TASK_PRIO,                                // One higher than the idle task
                          FILE_TASK_PRIO,
                          &FileTaskStk[0],                           // Set Bottom-Of-Stack          
                          FILE_TASK_STK_SIZE,
                          (void *)0,                                   // No TCB extension             
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
    OSTaskCreateExt(OSInfoTask,
                          (void *)0,                                   
                          &OSInfoStk[OS_INFO_STK_SIZE - 1],   // Set Top-Of-Stack    
                          OS_INFO_TASK_PRIO,                                // One higher than the idle task
                          OS_INFO_TASK_PRIO,
                          &OSInfoStk[0],                           // Set Bottom-Of-Stack          
                          OS_INFO_STK_SIZE,
                          (void *)0,                                   // No TCB extension             
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else	
	OSTaskCreate( TimeActionTask, (void *)0, &TimeActionTaskStk[TIME_ACTION_TASK_STK_SIZE- 1], TIME_ACTION_TASK_PRIO);		
	OSTaskCreate( OSFileTask, (void *)0, &FileTaskStk[FILE_TASK_STK_SIZE - 1], FILE_TASK_PRIO );
#endif


	BuzzerBeep( 300 );
	while( (ret = LCD_CreateViewPort()) == ERROR_NO_VIEWPORT_AVAILABLE ) {
		OSTimeDly( OS_DLY_100MS );
	}
	viewPortIndex = ret;
	LCD_SetContrast( 10 );//0~31
	Key_SetKeyLEDDelay( 5 );//key led delay 5 seconds. if set to 0, key led will not turn on or off automatically
	LCD_SetBackLightDelay( 10 );//back light delay 30 seconds. if set to 0, backlight will not turn on or off automatically
	PWR_SetIdleTimeLimit( 600 );	// after 600 second without key operation, system idle, 0 to disable idle

	buttonIndex = 0;
	key = KEY_0;
	while (1) {
		if( key ) {
			LCD_ActiveViewPort( viewPortIndex );
			LCD_SetFont( Fnt_GB11x12 );
			LCD_SetPixelPos( 10, 30 );
			LCD_PutStr(  (INT8U*)"上海桑博电子&&上志电子"  );

			LCD_SetFont( Fnt_GB15x16);
			LCD_SetPixelPos( 3, 140 );
			LCD_PutStr( (INT8U*)"中国★上海:59532657" );
			sprintf( (char*)str, "V%.2f", LIB_GetVersion() );
			LCD_SetFont( Fnt_GB11x12 );
			LCD_SetPixelPos( 70, 13 );
			LCD_PutStr( str );
			buttonStyle = ((buttonIndex==0)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 10, 45, 60, 20, (INT8U*)"显示",  buttonStyle );
			buttonStyle = ((buttonIndex==1)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 10, 69, 60, 20, (INT8U*)"按键",  buttonStyle );
			buttonStyle = ((buttonIndex==2)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 10, 93, 60, 20, (INT8U*)"有线通讯",  buttonStyle );
			buttonStyle = ((buttonIndex==3)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 10, 117, 60, 20, (INT8U*)"无线通讯",  buttonStyle );
			buttonStyle = ((buttonIndex==4)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 80, 45, 60, 20, (INT8U*)"设置时间",  buttonStyle );
			buttonStyle = ((buttonIndex==5)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 80, 69, 60, 20, (INT8U*)"数据存储",  buttonStyle );
			buttonStyle = ((buttonIndex==6)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 80, 93, 60, 20, (INT8U*)"sd卡测试",  buttonStyle );
			buttonStyle = ((buttonIndex==7)?LCD_INVERT_COPY:LCD_COPY);
			LCD_Button( 80, 117, 60, 20, (INT8U*)"- - - -",  buttonStyle );
			LCD_DeactiveViewPort( viewPortIndex );
		}

		OSTimeDly( OS_DLY_20MS );  
		key = Key_GetCode();
		switch( key ) {
			case KEY_UP:
				if( buttonIndex ) {
					buttonIndex--;
				}
				else {
					buttonIndex = MAIN_MENU_BUTTON_TOTAL-1;
				}
				break;
			case KEY_DOWN:
				if( buttonIndex >= MAIN_MENU_BUTTON_TOTAL-1 ) {
					buttonIndex = 0;
				}
				else {
					buttonIndex++;
				}
				break;
			case KEY_LEFT:
				if( buttonIndex >= 4 ) {
					buttonIndex -= 4;
				}
				break;
			case KEY_RIGHT:
				if( buttonIndex < 4 ) {
					buttonIndex += 4;
				}
				if( buttonIndex >= MAIN_MENU_BUTTON_TOTAL-1 ) {
					buttonIndex = MAIN_MENU_BUTTON_TOTAL-1;
				}
				break;
			case KEY_ENTER:
				switch( buttonIndex ) {
					case 0:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(LCDTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          LCD_TASK_PRIO,                                // One higher than the idle task
					                          LCD_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( LCDTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], LCD_TASK_PRIO);		
#endif
						break;
					case 1:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(KeyTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          KEY_TASK_PRIO,                                // One higher than the idle task
					                          KEY_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( KeyTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], KEY_TASK_PRIO);		
#endif
						break;
					case 2:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(CableComTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          CABLE_COM_TASK_PRIO,                                // One higher than the idle task
					                          CABLE_COM_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( CableComTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], CABLE_COM_TASK_PRIO);		
#endif
						break;
					case 3:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(WirelessTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          WIRELESS_TASK_PRIO,                                // One higher than the idle task
					                          WIRELESS_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( WirelessTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], WIRELESS_TASK_PRIO);		
#endif
						break;
					case 4:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(SetTimeTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          SET_TIME_TASK_PRIO,                                // One higher than the idle task
					                          SET_TIME_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( SetTimeTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], SET_TIME_TASK_PRIO);		
#endif
						break;
					case 5:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(FlashTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          FLASH_TASK_PRIO,                                // One higher than the idle task
					                          FLASH_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( FlashTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], FLASH_TASK_PRIO);		
#endif
						break;
					case 6:
#ifdef DSP_OS_INFO
					    OSTaskCreateExt(SDTestTask,
					                          (void *)0,                                   
					                          &CommStk[COMM_STK_SIZE - 1],   // Set Top-Of-Stack    
					                          SD_TEST_TASK_PRIO,                                // One higher than the idle task
					                          SD_TEST_TASK_PRIO,
					                          &CommStk[0],                           // Set Bottom-Of-Stack          
					                          COMM_STK_SIZE,
					                          (void *)0,                                   // No TCB extension             
					                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  // Enable stack checking + clear 
#else
						OSTaskCreate( SDTestTask, (void *)0, &CommStk[COMM_STK_SIZE- 1], SD_TEST_TASK_PRIO);		
#endif
						break;
					case 7:
						continue;
				}
				OSTaskSuspend( OS_PRIO_SELF );

				LCD_ActiveViewPort( viewPortIndex );
				LCD_ClrVP();
				LCD_DeactiveViewPort( viewPortIndex );
				break;

		}
	}

}






void TimeActionTask(void *pdata)
{
	INT8U err;
	INT8U str[30];
	INT8U viewPortIndex;
	INT16S ret;
	INT8U battStatus;
	RTCTime time;
	INT8U battDeadCount=0;

	
	pdata = pdata; //避免编译警告

⌨️ 快捷键说明

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