📄 keybmpos.c
字号:
//************************************************************************************
// File Name: KeyBmpOs
// Function:
// writer: hu jun lai
// Date: 2005-02-23
//************************************************************************************
#include "includes.h"
//************************************************************************************
// CONSTANTS
//************************************************************************************
#define TASK_STK_SIZE 512
//************************************************************************************
// FUNCTION PROTOTYPES
//************************************************************************************
void TaskStart(void *pdata);
void DemoTask(void *pdata);
extern void KeyScanTask (void *pdata);
extern const GUI_BITMAP bmc1;
//************************************************************************************
// VARIABLES
//************************************************************************************
OS_STK TaskStartStk [TASK_STK_SIZE];
OS_STK KeyScanTaskStk [TASK_STK_SIZE];
OS_STK KeyTestTaskStk [TASK_STK_SIZE];
OS_STK DemoTaskStk [TASK_STK_SIZE];
OS_EVENT *UartSemPtr;
extern OS_EVENT *KeySemPtr;
OS_EVENT *MsgOfKeySemPtr; // 用于任务间的消息传递
//************************************************************************************
// DemoTask
//************************************************************************************
void DemoTask(void *pdata)
{
U8 err;
void *msg;
pdata = pdata;
WM_SelectWindow(0);
GUI_Clear();
GUI_DrawBitmap(&bmc1,0,0);
while(1){
msg = OSMboxPend(MsgOfKeySemPtr, 0, &err);
OSSemPend(UartSemPtr, 0, &err);
Uart_Printf("msg = %d\n", msg);
OSSemPost(UartSemPtr);
switch(msg)
{
case 1: GUI_DispStringAt("The 1st Key Pressed",0,0);
break;
case 2: GUI_DispStringAt("The 2nd Key Pressed",0,0);
break;
case 3: GUI_DispStringAt("The 3rd Key Pressed",0,0);
break;
case 4: GUI_DispStringAt("The 4th Key Pressed",0,0);
break;
default:GUI_DispStringAt("No Key Pressed!!",0,0);
break;
}
}
}
//************************************************************************************
// TaskStart
// Description : Startup Task
// Arguments :
// Returns :
//************************************************************************************
void TaskStart(void *pdata)
{
U8 err;
pdata = pdata; // avoid compiler warnning ......
SysTmrInit(); // Init INT mode and tmr0
SysTmrEnable(); // Enable the tmr0
OSStatInit(); // Initialize uC/OS-II's statistics
while(1){
OSCtxSwCtr = 0; // Clear context counter
OSSemPend(UartSemPtr, 0, &err);
Uart_Printf("++++++++++++++++++++++++++++++++++++++ ");
Uart_Printf("OSCPUUsage = %d%% \n",OSCPUUsage);
OSSemPost(UartSemPtr);
OSTimeDlyHMSM(0,0,1,0); // Delay 1s
}
}
/*
**************************************************************************************
* KeyTestTask()
* Function: 按一下键,显示一幅图片,点亮相应的二极管
* Returns: None
**************************************************************************************
*/
void KeyTestTask(void *pdata)
{
U8 code;
pdata = pdata;
rPDATE |= 0xf0; // 4 LEDs off
while(1){
code = KeyGetKey(0);
switch(code)
{
case 0: rPDATE &= 0x1ef; // D16/PE4
OSMboxPost(MsgOfKeySemPtr, (void *)1);
break;
case 1: rPDATE &= 0x1df; // D15/PE5
OSMboxPost(MsgOfKeySemPtr, (void *)2);
break;
case 2: rPDATE &= 0x1bf; // D14/PE6
OSMboxPost(MsgOfKeySemPtr, (void *)3);
break;
case 3: rPDATE &= 0x17f; // D13/PE7
OSMboxPost(MsgOfKeySemPtr, (void *)4);
break;
default:rPDATE |= 0xf0; // LED OFF
break;
}
OSTimeDly(20); // delay 1 clock tick
rPDATE |= 0xf0; // 4 LEDs OFF
OSTimeDly(2); // delay 1 clock tick
}
}
//************************************************************************************
// Main
//************************************************************************************
void Main(void)
{
char TaskID0 = '0'; // TaskStart
char TaskID3 = '1'; // KeyTestTask
char TaskID1 = '2'; // DemoTask
SysInit(); // Initialize system board
GUI_Init(); // Initial GUI
OSInit(); // Initialize operation system
OSTimeSet(0); // set SysTick 0
KeyInit();
UartSemPtr = OSSemCreate(1);
MsgOfKeySemPtr = OSMboxCreate((void *)0);
OSTaskCreate(TaskStart, (void *)&TaskID0, &TaskStartStk [TASK_STK_SIZE -1],0);
OSTaskCreate(KeyTestTask,(void *)&TaskID3, &KeyTestTaskStk[TASK_STK_SIZE -1],41);
OSTaskCreate(DemoTask, (void *)&TaskID1, &DemoTaskStk [TASK_STK_SIZE -1],42);
OSStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -