?? main.c
字號:
#include "ucos-ii/includes.h" /* uC/OS interface */
#include "uhal/uhal.h"
#include "Target/44b.h"
//task stack size
#ifdef SEMIHOSTED
#define TASK_STACK_SIZE (64+SEMIHOSTED_STACK_NEEDS)
#else
#define TASK_STACK_SIZE 10*1024
#endif
extern void EXINT4_ISR(void);
OS_EVENT *ISRTaskMbox;
//Task definition
OS_STK TaskISR_Stack[TASK_STACK_SIZE]= {0, };
void TaskISR_Task(void *Id);
#define TaskISR_PRIO 17
OS_STK TaskA_Stack[TASK_STACK_SIZE]= {0, };
void TaskA_Task(void *Id);
#define TaskA_PRIO 18
OS_STK TaskB_Stack[TASK_STACK_SIZE]= {0, };
void TaskB_Task(void *Id);
#define TaskB_PRIO 19
OS_STK TaskC_Stack[TASK_STACK_SIZE]= {0, };
void TaskC_Task(void *Id);
#define TaskC_PRIO 20
char isrtxmsg;
void _Delay(void)
{
int j,k;
for(j=0;j<255;j++)
{
for(k=0;k<255;k++);
}
}
void TaskA_Task(void *Id)
{
int i;
while(1)
{
for(i=0;i<10;i++)
{
OS_ENTER_CRITICAL();
uHALr_printf(" Task1\n");
OS_EXIT_CRITICAL();
_Delay();
}
OSTimeDly(500);
}
}
void TaskB_Task(void *Id)
{
int i;
while(1)
{
for(i=0;i<10;i++)
{
OS_ENTER_CRITICAL();
uHALr_printf(" Task2\n");
OS_EXIT_CRITICAL();
_Delay();
}
OSTimeDly(500);
}
}
void TaskC_Task(void *Id)
{
int i;
while(1)
{
for(i=0;i<10;i++)
{
OS_ENTER_CRITICAL();
uHALr_printf(" Task3\n");
OS_EXIT_CRITICAL();
_Delay();
}
OSTimeDly(500);
}
}
void TaskISR_Task(void *Id)
{
unsigned char err;
char *rxmsg=0;
int i;
ARMTargetStart();
pISR_EINT4567=(int)EXINT4_ISR;//指向中斷處理程序
rPCONG|=0xff00;//設置EXINT7為外部中斷輸入腳
rPUPG&=0x0f;
rEXTINT&=0x0000ffff;
rEXTINT|=0x22220000;
ISRTaskMbox = OSMboxCreate((void *)0);//創建郵箱
rINTMSK&=~(BIT_EINT4567);//開啟中斷
OSTaskCreate(TaskA_Task, (void *)0, (OS_STK *)&TaskA_Stack[TASK_STACK_SIZE-1], TaskA_PRIO);//創建其它3個任務
OSTaskCreate(TaskB_Task, (void *)0, (OS_STK *)&TaskB_Stack[TASK_STACK_SIZE-1], TaskB_PRIO);
OSTaskCreate(TaskC_Task, (void *)0, (OS_STK *)&TaskC_Stack[TASK_STACK_SIZE-1], TaskC_PRIO);
while(1)
{
rxmsg=(char *)OSMboxPend(ISRTaskMbox, 0, &err);//接收郵箱消息
if(*rxmsg)
{
rINTMSK&=(~BIT_TIMER0);//禁止外部中斷,但注意不能夠禁止節拍中斷
rINTMSK|=BIT_EINT4567;
switch(*rxmsg)
{
case '4':
OS_ENTER_CRITICAL();
uHALr_printf("EXINT4 is pressed!\n");
OS_EXIT_CRITICAL();
break;
case '5':
OS_ENTER_CRITICAL();
uHALr_printf("EXINT5 is pressed!\n");
OS_EXIT_CRITICAL();
break;
case '6':
OS_ENTER_CRITICAL();
uHALr_printf("EXINT6 is pressed!\n");
OS_EXIT_CRITICAL();
break;
case '7':
OS_ENTER_CRITICAL();
uHALr_printf("EXINT7 is pressed!\n");
OS_EXIT_CRITICAL();
default:
break;
}
OS_ENTER_CRITICAL();
uHALr_printf("Wait for key released!\n");
OS_EXIT_CRITICAL();
for(i=0;i<60;i++) //延時消抖!這一步很重要
_Delay();
OS_ENTER_CRITICAL();
uHALr_printf("OK!\n");
OS_EXIT_CRITICAL();
rEXTINTPND=0xf; //clear EXTINTPND reg.
rI_ISPC|=BIT_EINT4567;
rINTMSK&=~(BIT_EINT4567);
}
/*else
{
rEXTINTPND=0xf; //clear EXTINTPND reg.
rI_ISPC|=BIT_EINT4567;
rINTMSK&=(~BIT_TIMER0);
rINTMSK&=~(BIT_EINT4567);
}*/
OSTimeDly(500);
}
}
void EXINT4isr(void)
{
isrtxmsg='7';
OSMboxPost(ISRTaskMbox, (void *)&isrtxmsg);
}
int Main()
{
ARMTargetInit();//initialize Target
// Init uCOS-II
OSInit();
//Create the Main Task
OSTaskCreate(TaskISR_Task, (void *)0, (OS_STK *)&TaskISR_Stack[TASK_STACK_SIZE-1], TaskISR_PRIO);
/* Start uCOS-II */
OSStart();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -