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

📄 main.c

📁 在proteus仿真arm处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date:2007-12-20
** Last Version: 1.0
** Descriptions: 主函数
**------------------------------------------------------------------------------------------------------
** Created by:   Rein Lee
** Created date: 2007-12-20
** Version:      1.0
** Descriptions: The original version
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
********************************************************************************************************/
#include "config.h"    
#include "stdlib.h"
#include <math.h> 

#define TARGET_DEBUG_BY_UART

//Marco define about hardware
#define LCD_DISP_COLOR 1                        //marco定义LCD的前景色和背景色
#define LCD_BACK_COLOR 0
#define	KEY1	    1<<16						//键盘定义
#define	KEY2	    1<<17
#define	KEY3	    1<<18
#define	KEY4	    1<<19
#define	KEYA	    1<<20
#define	KEYB	    1<<21
#define	KEYC	    1<<22
#define	KEYD	    1<<23
#define	LED1	    28							//LED定义
#define LED2	    29 
#define	LED3	    25
#define	LED1_ON()	IOCLR = 1<<LED1				//LED ON
#define	LED2_ON()	IOCLR = 1<<LED2
#define	LED3_ON()	IOCLR = 1<<LED3
#define	LED1_OFF()	IOSET = 1<<LED1				//LED OFF
#define	LED2_OFF()	IOSET = 1<<LED2
#define	LED3_OFF()	IOSET = 1<<LED3
//Define the command buffer length	
#define	CmdBufLengh	30	
//Define the data buffer length	
#define	DatBufLengh	15	
//Define the TaskStart stack length	
#define	TaskStkLengh	200	
//Define the stack length of other task					
#define	TASK_STK_SIZE	200	    
/* Application tasks priority */
#define          TASK_START_PRIO     1                
#define          TASK_POWERDOWN_PRIO 5
#define          TASK_KEYBOARD_PRIO  15
#define          TASK_LED1_PRIO      20
#define          TASK_LED3_PRIO   	 25
/* Application tasks id */
#define          TASK_START_ID       0                
#define          TASK_LED1_ID        1
#define          TASK_KEYBOARD_ID    2
#define          TASK_LED3_ID        3
#define          TASK_POWERDOWN_ID   4
/******************************************全局变量定义**************************************************/
/********************************************************************************************************/
//Define the stack of application tasks
OS_STK	TaskStartStk[TaskStkLengh];				
OS_STK  TaskLED1Stk [TASK_STK_SIZE];
OS_STK 	TaskKeyBoardStk [TASK_STK_SIZE];
OS_STK 	TaskLED3Stk [TASK_STK_SIZE];
OS_STK 	TaskPowerDownStk [TASK_STK_SIZE];
//Globle variables in applications
MENUICO  mainmenu[8];  							//8个功能图标
static uint8 MenuSelect;						//表示当前选择的图标序号
static uint8 Flag_AppRunning = 0;				//如果=1表示8个功能程序之一在运行
static uint8 EINT3_Time= 0;						//进入EINT3的次数
static uint8 F_flag=0;							//功能函数序号标志,8个bit代表8个功能函数
struct time now;								//当前时间
struct date today;								//当前日期
//char Uart0_Buffer[50];                          //串口接受数据缓冲区
char Cmd_Buf[CmdBufLengh];
char Data_Buf[DatBufLengh];
//User define Data Types
TASK_USER_DATA	TaskUserData[5];                //扩展TCB数据类型
/********************************************************************************************************/
//系统任务
static void  TaskStart(void *pdata);			//Task0 任务0
static void  TaskLED1(void *data);				//LED1闪烁任务,表示操作系统秒时钟运行情况
static void  TaskKeyBoard(void *data);			//键盘扫描程序
static void  TaskLED3(void *data);				//LED3闪烁任务,表示操作系统运行情况
static void	 TaskPowerDown(void *pdata);		//低功耗任务,停止处理器时钟,外设仍然工作
/********************************************************************************************************/
//初始化/*************/
void RTC_SetTime(void);						    //设置时间
void LedInit(void);								//LED初始化
void KeyInit(void);								//键盘初始化
/********************/
//显示/**************/
void Display_Init(void);						//显示初始化
void Disp_SystemInfo(void);						//时间显示
/********************/
//功能图标显示/******/
void MenuIcoInit(void);							//菜单功能初始化
void MenuDisplay(uint8	select);				//菜单显示
void MenuHelpDisplay(uint8 select,uint8 type);	//更新菜单旁边的帮助文字显示
/********************/
//键盘扫描/**********/
void KeyDecode(uint8	keycode);							//键值解码
/********************/
//8个功能函数定义/***/
void Function_1_ADC(void);						//ADC
void Function_2_I2C(void);						//I2C
void Function_3_Win(void);						//ZLG/GUI
void Function_4_UART(void);						//UART0
void Function_5_SPI(void);						//SPI
void Function_6_EINT(void);						//EINT3
void Function_7_Info(void);						//System Information
void Function_8_Help(void);						//Help
/********************/
//外部中断3/***/
void EINT3_Exception(void);						//更新LED2状态和进入EINT3的次数
//Uart输入数据解码/***/
uint8 Uart_Data_Decode(uint8 flag,uint8 index);                   //Uart输入数据解码
/********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: main
** 功能描述: 初始化uC/OS-II操作系统,建立任务,然后启动系统。
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int  main(void)
{   
	OSInit ();		
	PC_ElapsedInit();	
	strcpy(TaskUserData[TASK_START_ID].TaskName, "StartTask");		//Copy Name To TCB Extension																					
	OSTaskCreateExt(TaskStart,						//Name
                    (void *)0,						//Parameter
                    &TaskStartStk[TaskStkLengh - 1],//Top-Of-Stack
                    TASK_START_PRIO,				//Priority level
                    TASK_START_ID,					//Task ID
                    &TaskStartStk[0],				//Bottom-Of-Stack
                    TaskStkLengh,					//Length-Of-Statck 
                    &TaskUserData[TASK_START_ID],	//TCB Extension
                    0);								//Disable stack checking + clear stack	
	OSStart (); 									//Multi Tasking Started
	return 0;															
}
/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: TaskStart,主任务,界面的显示,CPU使用资源的显示,以及RTC时钟的显示
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  TaskStart(void *pdata)
{  
	pdata = pdata;          /* 避免编译警告 */ 	
	TargetInit();			// 目标板初始化	
#ifdef TARGET_DEBUG_BY_UART
    UartSendString("OS-Time-Tick and Interrupt Vevtor Controller have been initialized !\r\n");
    UartSendString("OSStatInit() is running...........\r\n");
#endif	
	OSStatInit();			/* 统计任务初始化,由于占用1s的延时用于统计Idle最大计数,所以proteus仿真很慢 */	
	//目标板的各种设置
#ifdef TARGET_DEBUG_BY_UART
    UartSendString("Initialize RTC module.\r\n");
#endif		
	RTC_SetTime();			// 设置时间和日期
	RTCInit();				// RTC部件初始化,时钟启动
#ifdef TARGET_DEBUG_BY_UART
    UartSendString("Start LCM,T6963C Controller,and GUI.\r\n");
#endif		
	GUI_Initialize();                               // 初始化LCM
	GUI_SetColor(LCD_DISP_COLOR,LCD_BACK_COLOR);	// 设置前景色和背景色		
	Display_Init();			// 应用程序显示初始化
	MenuIcoInit();			// 图标初始化
	MenuSelect = 0;			// 初始设置为选中 功能1
	MenuDisplay(MenuSelect);// 图标显示
#ifdef TARGET_DEBUG_BY_UART
    UartSendString("Creat other System Tasks.\r\n");
    UartSendString("uC/OS-II is running.\r\n");
    UartSendString("          _____      _   _______   _____\r\n");
    UartSendString("         /  ___|    / / /  ___  \\ |  ___|\r\n");
    UartSendString("    _   _| |       / /  | |   | | | |___\r\n");
    UartSendString("   | | | | |      / /   | |   | | |___  |\r\n");
    UartSendString("   | |_| | |___  / /    | |___| |  ___| |\r\n");
    UartSendString("   |  ___\\_____|/_/     \\_______/ |_____|\r\n");
    UartSendString("   | |\r\n");
    UartSendString("   |_|\r\n");
#endif		
	//建立其他4个系统任务
	//TASK_POWERDOWN_ID
	strcpy(TaskUserData[TASK_POWERDOWN_ID].TaskName, "PowerTask");	
    OSTaskCreateExt(TaskPowerDown,
                    (void *)0,
                    &TaskPowerDownStk [TASK_STK_SIZE - 1],
                    TASK_POWERDOWN_PRIO,
                    TASK_POWERDOWN_ID,
                    &TaskPowerDownStk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_POWERDOWN_ID],
                    0); 
    //TASK_KEYBOARD_ID                
    strcpy(TaskUserData[TASK_KEYBOARD_ID].TaskName, "KeyBDTask");                
    OSTaskCreateExt(TaskKeyBoard,
                    (void *)0,
                    &TaskKeyBoardStk [TASK_STK_SIZE - 1],
                    TASK_KEYBOARD_PRIO,
                    TASK_KEYBOARD_ID,
                    &TaskKeyBoardStk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_KEYBOARD_ID],
                    0);  
    //TASK_LED1_ID                
    strcpy(TaskUserData[TASK_LED1_ID].TaskName, "LED1 Task");                                 
	OSTaskCreateExt(TaskLED1,
                    (void *)0,
                    &TaskLED1Stk[TASK_STK_SIZE - 1],
                    TASK_LED1_PRIO,
                    TASK_LED1_ID,
                    &TaskLED1Stk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_LED1_ID],
                    0);
    //TASK_LED3_ID                  
    strcpy(TaskUserData[TASK_LED3_ID].TaskName, "LED3 Task");                 
    OSTaskCreateExt(TaskLED3,
                    (void *)0,
                    &TaskLED3Stk[TASK_STK_SIZE - 1],
                    TASK_LED3_PRIO,
                    TASK_LED3_ID,
                    &TaskLED3Stk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_LED3_ID],
                    0);                                                             
	for(;;)
	{ /*屏蔽此语句,可以在功能7中看见TaskStart的执行时间减少很多*/	
	  Disp_SystemInfo();					//每秒更新一次状态显示
	  OSCtxSwCtr = 0;               		//清除上下文切换计数器
	  OSTimeDly(OS_TICKS_PER_SEC);			//任务切换,交出cpu使用权
	}
}
/*********************************************************************************************************
** 函数名称: TaskLED1
** 功能描述: LED1闪烁任务,显示RTC秒时钟的运行状况
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  TaskLED1(void *pdata)
{   
    pdata=pdata;
	//TargetInit();
	LedInit();
	for(;;)
	{							//每秒点亮或者熄灭,表征系统秒时钟
	  LED1_ON();
	  OSTimeDlyHMSM(0,0,1,0); 	//任务切换,交出cpu使用权
	  LED1_OFF();
	  OSTimeDlyHMSM(0,0,1,0);  	//任务切换,交出cpu使用权
	}                                
}
/*********************************************************************************************************
** 函数名称: TaskKeyBoard
** 功能描述: 键盘扫描任务
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无

⌨️ 快捷键说明

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