📄 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 + -