ucosII多任务调度实例
2017-04-16 13:29
155 查看
这是一个ucosII多任务调度实例实现TaskADC、TaskRTC、TaskUART、TaskGPIO四个任务之间的调度,在写代码过程中要特别注意定时器可能引起任务初始化还未完成就被中断,导致程序无法正常运行问题。尾处有代码的proteus8的电路图。(使用的是keil4,注释的中文代码有些乱码)
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 64 //Define the Task0 stack length ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»³¤¶È
OS_STK TaskGRIOStk [TaskStkLengh]; //Define the Task0 stack ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»
OS_STK TaskADCStk[TaskStkLengh];
OS_STK TaskRTCStk [TaskStkLengh]; //Define the Task0 stack ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»
OS_STK TaskUARTStk[TaskStkLengh];
OS_EVENT *Str_Box;
void TaskGPIO(void *pdata);
void TaskADC(void *pdata);
void TaskRTC(void *pdata);
void TaskUART(void *pdata);
void __irq EInt0(void);
void __irq EInt1(void);
void __irq EInt2(void);
/*********************************************************************************************************
** Çý¶¯Ïà¹Ø
********************************************************************************************************/
//Òý½Å¶¨Òå
#define LEDCON 0x00000004 /*P0.2Òý½Å¿ØÖÆLED,µÍµçƽµãÁÁ*/
#define KEY 0x00000008 /*P0.3Òý½ÅÁ¬½Ó°´¼ü*/
//GPIO0 µÚ2,3½ÅΪGPIO,ÉèÖÃP0.27¡¢P0.28Á¬½Óµ½AIN0¡¢AIN1
#define IOINIT() { \
PINSEL0 &= 0Xffffff0f;\
PINSEL0 |= 0Xa0000000;\
PINSEL1 |= 0x01400001;\
IO0DIR |= LEDCON; \
IO0DIR &= ~KEY; \
}
//ÍⲿÖжϳõʼ»¯(VICVectAddr0ºÍVICVectCntl0²»ÄÜÓã¬ÒѾ±»¶¨Ê±Æ÷0(ÓÃÀ´ÊµÏÖϵͳ½ÚÅÄ)Õ¼Ó㬷ñÔò»áÒýÆðIRQÒì³£)
#define EINIT() { \
VICIntSelect=0;\
VICIntEnable|=0x0001c000;\
VICVectCntl3=0X0000002e;\
VICVectCntl1=0X0000002f;\
VICVectCntl2=0X00000030;\
VICVectAddr3=(int)EInt0;\
VICVectAddr1=(int)EInt1;\
VICVectAddr2=(int)EInt2;\
EXTINT=0x07;\
}
uint8 int0_flag=0;
uint8 int1_flag=0;
uint8 int2_flag=0;
/*********************************************************************************************************
** main
********************************************************************************************************/
int main (void)
{
// É豸³õʼ»¯
TargetInit();
// Initialize uCOS-II.
OSInit ();
// IO³õʼ»¯
IOINIT();
EINIT();
Str_Box = OSMboxCreate ((void*)0); //´´½¨ÓÊÏä
OSTaskCreate(TaskADC, (void *) 0, &TaskADCStk[TaskStkLengh-1], 7);
OSTaskCreate(TaskRTC, (void *) 0, &TaskRTCStk[TaskStkLengh-1], 8);
OSTaskCreate(TaskUART, (void *) 0, &TaskUARTStk[TaskStkLengh-1], 9);
OSTaskCreate(TaskGPIO, (void *) 0, &TaskGRIOStk[TaskStkLengh-1], 10);//ÓÅÏȼ¶Ó¦¸Ã×îµÍ £¬·ñÔò»á¿¨ÔÚ°´¼üɨÃè´¦
// Start multitasking.
OSStart ();
return 0;
}
/*********************************************************************************************************
** TaskGPIO ÈÎÎñ
********************************************************************************************************/
void TaskGPIO (void *pdata)
{
uint8 flag=0;
pdata = pdata;
while (1)
{
if((IO0PIN&KEY)==0)
{
flag=~flag;
if(flag)
IO0SET=LEDCON;
else
IO0CLR=LEDCON;
}
OSTimeDly(100);
}
}
/*********************************************************************************************************
** TaskUART ÈÎÎñ
********************************************************************************************************/
/****************************************************************************
* Ãû ³Æ£ºUART0SendByte()
* ¹¦ ÄÜ£ºÏò´®¿Ú·¢ËÍ×Ö½ÚÊý¾Ý£¬²¢µÈ´ý·¢ËÍÍê±Ï¡£
* Èë¿Ú²ÎÊý£ºdata Òª·¢Ë͵ÄÊý¾Ý
* ³ö¿Ú²ÎÊý£ºÎÞ
****************************************************************************/
void UART0SendByte(uint8 data)
{
U0THR = data; // ·¢ËÍÊý¾Ý
while( (U0LSR&0x40)==0 ); // µÈ´ýÊý¾Ý·¢ËÍÍê±Ï
}
/****************************************************************************
* Ãû ³Æ£ºUART0SendStr()
* ¹¦ ÄÜ£ºÏò´®¿Ú·¢ËÍÒ»×Ö·û´®
* Èë¿Ú²ÎÊý£ºsrt Òª·¢Ë͵Ä×Ö·û´®µÄÖ¸Õë
* ³ö¿Ú²ÎÊý£ºÎÞ
****************************************************************************/
void UART0SendStr(char *str)
{
while(1)
{
if( *str == '\0' ) break;
UART0SendByte(*str++); // ·¢ËÍÊý¾Ý
}
}
void TaskUART (void *pdata)
{
uint8 err;
char* str;
pdata = pdata;
while (1)
{
str = (char *)OSMboxPend(Str_Box,0,&err);//½ÓÊÕÓÊÏäÐÅÏ¢
UART0SendStr(str);
OSTimeDly(20);
}
}
/*********************************************************************************************************
** TaskADC ÈÎÎñ
********************************************************************************************************/
void TaskADC (void *pdata)
{
uint32 ADC_Data;
char str[20];
pdata = pdata;
/* ½øÐÐADCÄ£¿éÉèÖã¬ÆäÖÐx<<n±íʾµÚnλÉèÖÃΪx(Èôx³¬¹ýһ룬ÔòÏò¸ßλ˳ÑÓ) */
ADCR = (1 << 0) | // SEL = 1 £¬Ñ¡ÔñͨµÀ0
((Fpclk / 1000000 - 1) << 8) | // CLKDIV = Fpclk / 1000000 - 1 £¬¼´×ª»»Ê±ÖÓΪ1MHz
(0 << 16) | // BURST = 0 £¬Èí¼þ¿ØÖÆת»»²Ù×÷
(0 << 17) | // CLKS = 0 £¬Ê¹ÓÃ11clockת»»
(1 << 21) | // PDN = 1 £¬ Õý³£¹¤×÷ģʽ(·Çµôµçת»»Ä£Ê½)
(0 << 22) | // TEST1:0 = 00 £¬Õý³£¹¤×÷ģʽ(·Ç²âÊÔģʽ)
(1 << 24) | // START = 1 £¬Ö±½ÓÆô¶¯ADCת»»
(0 << 27); // EDGE = 0 (CAP/MATÒý½ÅϽµÑØ´¥·¢ADCת»»)
OSTimeDly(10);
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û£¬²¢Çå³ýDONE±ê־λ
while (1)
{
ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24); // ÉèÖÃͨµÀ1£¬²¢½øÐеÚÒ»´Îת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADCR = ADCR | (1 << 24);
ae74
// ÔÙ´ÎÆôÔËת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û
ADC_Data = (ADC_Data>>6) & 0x3FF; // ÌáÈ¡ADת»»Öµ
ADC_Data = ADC_Data * 3300/1024; // Êýֵת»»
sprintf(str, "VIN1=%dmV \r", ADC_Data);
OSMboxPost(Str_Box, (void *)&str);//·¢ËÍÓÊÏäÏûÏ¢
OSTimeDly(50);
ADCR = (ADCR&0x00FFFF00)|0x02|(1 << 24); // ÉèÖÃͨµÀ2£¬²¢½øÐеÚÒ»´Îת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADCR = ADCR | (1 << 24); // ÔÙ´ÎÆôÔËת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û
ADC_Data = (ADC_Data>>6) & 0x3FF; // ÌáÈ¡ADת»»Öµ
ADC_Data = ADC_Data * 3300/1024; // Êýֵת»»
sprintf(str, "VIN2=%dmV \r", ADC_Data);
OSMboxPost(Str_Box, (void *)&str);
OSTimeDly(50);
}
}
/*********************************************************************************************************
** TaskRTC ÈÎÎñ
********************************************************************************************************/
/*******************************************************************************
*Ãû³Æ: RTCIni()
*¹¦ÄÜ: ³õʼ»¯ÊµÊ±Ê±ÖÓ
*******************************************************************************/
void RTCIni(void)
{ PREINT=Fpclk/32768-1; //ÉèÖÃÔ¤·ÖƵÆ÷
PREFRAC=Fpclk-(Fpclk/32768)*32768;
YEAR=2017; //³õʼ»¯Äê
MONTH=4; //³õʼ»¯ÔÂ
DOM=9; //³õʼ»¯ÈÕ
HOUR=8;
MIN=30;
SEC=0;
CIIR=0x01; //ÉèÖÃÃëÖµµÄÔöÁ¿²úÉúÒ»´ÎÖжÏ
CCR=0x01; //Æô¶¯RTC
}
/*******************************************************************************
*Ãû³Æ: SendTimeRtc()
*¹¦ÄÜ: ¶ÁÈ¡RTCµÄʱ¼äÖµ£¬²¢½«¶Á³öµÄʱ·ÖÃëÖµÓÉ´®¿Ú·¢Ë͵½ÉÏλ»úÏÔʾ
*******************************************************************************/
void SendTimeRtc(void)
{ char send_buf[16]; //UART0Êý¾Ý½ÓÊÕ»º³åÇø
char const MESSAGE[]="RTC Time is:";
uint32 times;
uint8 bak;
times=CTIME0; //¶ÁÈ¡ÍêÕûʱÖӼĴæÆ÷0
bak=(times>>16)&0x1F; //È¡µÃʱµÄÖµ
send_buf[0]=bak/10+'0';
send_buf[1]=bak%10+'0';
send_buf[2]=':';
bak=(times>>8)&0x3F; //È¡µÃ·ÖµÄÖµ
send_buf[3]=bak/10+'0';
send_buf[4]=bak%10+'0';
send_buf[5]=':';
bak=times&0x3F; //È¡µÃÃëµÄÖµ
send_buf[6]=bak/10+'0';
send_buf[7]=bak%10+'0';
send_buf[8]='\r';
if(!int0_flag)
UART0SendStr((char*)MESSAGE);
OSMboxPost(Str_Box, (void *)&send_buf);//·¢ËÍÓÊÏäÏûÏ¢
OSTimeDly(20);
}
void TaskRTC (void *pdata)
{
pdata = pdata;
RTCIni();
while (1)
{
if(1==(ILR&0x01)) //µÈ´ýRTCÔöÁ¿Öжϱê־λ
{
ILR=0x01; //Çå³ýÖжϱê־λ
SendTimeRtc(); //¶ÁȡʱÖÓÖµ£¬²¢ÏòUART0·¢ËÍ
}
OSTimeDly(100);
}
}
/*********************************************************************************************************
** Öжϴ¦Àí³ÌÐò
********************************************************************************************************/
//Èç¹ûÈÎÎñ»¹Ã»³õʼ»¯Íê±Ï¾Í´¥·¢Öжϣ¬»á³öÏÖÎÊÌâ
void __irq EInt0(void)
{
OSIntEnter();
while(EXTINT &(1<<0))
EXTINT=1<<0;
int0_flag=~int0_flag;
if(int0_flag)
OSTaskSuspend (9);
else
OSTaskResume(9);
VICVectAddr=0;
OSIntExit();
}
void __irq EInt1(void)
{
OSIntEnter();
while(EXTINT &(1<<1))
EXTINT=1<<1;
int1_flag=~int1_flag;
if(int1_flag)
OSTaskSuspend (7);//¹ÒÆðTaskADC
else
OSTaskResume(7); //»Ö¸´TaskADC
VICVectAddr=0;
OSIntExit();
}
void __irq EInt2(void)
{
OSIntEnter();
while(EXTINT &(1<<2))
EXTINT=1<<2;
int2_flag=~int2_flag;
if(int2_flag)
OSTaskSuspend (8);//¹ÒÆðTaskRTC(×èÈû̬)
else
OSTaskResume(8);
VICVectAddr=0;
OSIntExit();
}
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 64 //Define the Task0 stack length ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»³¤¶È
OS_STK TaskGRIOStk [TaskStkLengh]; //Define the Task0 stack ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»
OS_STK TaskADCStk[TaskStkLengh];
OS_STK TaskRTCStk [TaskStkLengh]; //Define the Task0 stack ¶¨ÒåÓû§ÈÎÎñ0µÄ¶ÑÕ»
OS_STK TaskUARTStk[TaskStkLengh];
OS_EVENT *Str_Box;
void TaskGPIO(void *pdata);
void TaskADC(void *pdata);
void TaskRTC(void *pdata);
void TaskUART(void *pdata);
void __irq EInt0(void);
void __irq EInt1(void);
void __irq EInt2(void);
/*********************************************************************************************************
** Çý¶¯Ïà¹Ø
********************************************************************************************************/
//Òý½Å¶¨Òå
#define LEDCON 0x00000004 /*P0.2Òý½Å¿ØÖÆLED,µÍµçƽµãÁÁ*/
#define KEY 0x00000008 /*P0.3Òý½ÅÁ¬½Ó°´¼ü*/
//GPIO0 µÚ2,3½ÅΪGPIO,ÉèÖÃP0.27¡¢P0.28Á¬½Óµ½AIN0¡¢AIN1
#define IOINIT() { \
PINSEL0 &= 0Xffffff0f;\
PINSEL0 |= 0Xa0000000;\
PINSEL1 |= 0x01400001;\
IO0DIR |= LEDCON; \
IO0DIR &= ~KEY; \
}
//ÍⲿÖжϳõʼ»¯(VICVectAddr0ºÍVICVectCntl0²»ÄÜÓã¬ÒѾ±»¶¨Ê±Æ÷0(ÓÃÀ´ÊµÏÖϵͳ½ÚÅÄ)Õ¼Ó㬷ñÔò»áÒýÆðIRQÒì³£)
#define EINIT() { \
VICIntSelect=0;\
VICIntEnable|=0x0001c000;\
VICVectCntl3=0X0000002e;\
VICVectCntl1=0X0000002f;\
VICVectCntl2=0X00000030;\
VICVectAddr3=(int)EInt0;\
VICVectAddr1=(int)EInt1;\
VICVectAddr2=(int)EInt2;\
EXTINT=0x07;\
}
uint8 int0_flag=0;
uint8 int1_flag=0;
uint8 int2_flag=0;
/*********************************************************************************************************
** main
********************************************************************************************************/
int main (void)
{
// É豸³õʼ»¯
TargetInit();
// Initialize uCOS-II.
OSInit ();
// IO³õʼ»¯
IOINIT();
EINIT();
Str_Box = OSMboxCreate ((void*)0); //´´½¨ÓÊÏä
OSTaskCreate(TaskADC, (void *) 0, &TaskADCStk[TaskStkLengh-1], 7);
OSTaskCreate(TaskRTC, (void *) 0, &TaskRTCStk[TaskStkLengh-1], 8);
OSTaskCreate(TaskUART, (void *) 0, &TaskUARTStk[TaskStkLengh-1], 9);
OSTaskCreate(TaskGPIO, (void *) 0, &TaskGRIOStk[TaskStkLengh-1], 10);//ÓÅÏȼ¶Ó¦¸Ã×îµÍ £¬·ñÔò»á¿¨ÔÚ°´¼üɨÃè´¦
// Start multitasking.
OSStart ();
return 0;
}
/*********************************************************************************************************
** TaskGPIO ÈÎÎñ
********************************************************************************************************/
void TaskGPIO (void *pdata)
{
uint8 flag=0;
pdata = pdata;
while (1)
{
if((IO0PIN&KEY)==0)
{
flag=~flag;
if(flag)
IO0SET=LEDCON;
else
IO0CLR=LEDCON;
}
OSTimeDly(100);
}
}
/*********************************************************************************************************
** TaskUART ÈÎÎñ
********************************************************************************************************/
/****************************************************************************
* Ãû ³Æ£ºUART0SendByte()
* ¹¦ ÄÜ£ºÏò´®¿Ú·¢ËÍ×Ö½ÚÊý¾Ý£¬²¢µÈ´ý·¢ËÍÍê±Ï¡£
* Èë¿Ú²ÎÊý£ºdata Òª·¢Ë͵ÄÊý¾Ý
* ³ö¿Ú²ÎÊý£ºÎÞ
****************************************************************************/
void UART0SendByte(uint8 data)
{
U0THR = data; // ·¢ËÍÊý¾Ý
while( (U0LSR&0x40)==0 ); // µÈ´ýÊý¾Ý·¢ËÍÍê±Ï
}
/****************************************************************************
* Ãû ³Æ£ºUART0SendStr()
* ¹¦ ÄÜ£ºÏò´®¿Ú·¢ËÍÒ»×Ö·û´®
* Èë¿Ú²ÎÊý£ºsrt Òª·¢Ë͵Ä×Ö·û´®µÄÖ¸Õë
* ³ö¿Ú²ÎÊý£ºÎÞ
****************************************************************************/
void UART0SendStr(char *str)
{
while(1)
{
if( *str == '\0' ) break;
UART0SendByte(*str++); // ·¢ËÍÊý¾Ý
}
}
void TaskUART (void *pdata)
{
uint8 err;
char* str;
pdata = pdata;
while (1)
{
str = (char *)OSMboxPend(Str_Box,0,&err);//½ÓÊÕÓÊÏäÐÅÏ¢
UART0SendStr(str);
OSTimeDly(20);
}
}
/*********************************************************************************************************
** TaskADC ÈÎÎñ
********************************************************************************************************/
void TaskADC (void *pdata)
{
uint32 ADC_Data;
char str[20];
pdata = pdata;
/* ½øÐÐADCÄ£¿éÉèÖã¬ÆäÖÐx<<n±íʾµÚnλÉèÖÃΪx(Èôx³¬¹ýһ룬ÔòÏò¸ßλ˳ÑÓ) */
ADCR = (1 << 0) | // SEL = 1 £¬Ñ¡ÔñͨµÀ0
((Fpclk / 1000000 - 1) << 8) | // CLKDIV = Fpclk / 1000000 - 1 £¬¼´×ª»»Ê±ÖÓΪ1MHz
(0 << 16) | // BURST = 0 £¬Èí¼þ¿ØÖÆת»»²Ù×÷
(0 << 17) | // CLKS = 0 £¬Ê¹ÓÃ11clockת»»
(1 << 21) | // PDN = 1 £¬ Õý³£¹¤×÷ģʽ(·Çµôµçת»»Ä£Ê½)
(0 << 22) | // TEST1:0 = 00 £¬Õý³£¹¤×÷ģʽ(·Ç²âÊÔģʽ)
(1 << 24) | // START = 1 £¬Ö±½ÓÆô¶¯ADCת»»
(0 << 27); // EDGE = 0 (CAP/MATÒý½ÅϽµÑØ´¥·¢ADCת»»)
OSTimeDly(10);
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û£¬²¢Çå³ýDONE±ê־λ
while (1)
{
ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24); // ÉèÖÃͨµÀ1£¬²¢½øÐеÚÒ»´Îת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADCR = ADCR | (1 << 24);
ae74
// ÔÙ´ÎÆôÔËת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û
ADC_Data = (ADC_Data>>6) & 0x3FF; // ÌáÈ¡ADת»»Öµ
ADC_Data = ADC_Data * 3300/1024; // Êýֵת»»
sprintf(str, "VIN1=%dmV \r", ADC_Data);
OSMboxPost(Str_Box, (void *)&str);//·¢ËÍÓÊÏäÏûÏ¢
OSTimeDly(50);
ADCR = (ADCR&0x00FFFF00)|0x02|(1 << 24); // ÉèÖÃͨµÀ2£¬²¢½øÐеÚÒ»´Îת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADCR = ADCR | (1 << 24); // ÔÙ´ÎÆôÔËת»»
while( (ADDR&0x80000000)==0 ); // µÈ´ýת»»½áÊø
ADC_Data = ADDR; // ¶ÁÈ¡ADC½á¹û
ADC_Data = (ADC_Data>>6) & 0x3FF; // ÌáÈ¡ADת»»Öµ
ADC_Data = ADC_Data * 3300/1024; // Êýֵת»»
sprintf(str, "VIN2=%dmV \r", ADC_Data);
OSMboxPost(Str_Box, (void *)&str);
OSTimeDly(50);
}
}
/*********************************************************************************************************
** TaskRTC ÈÎÎñ
********************************************************************************************************/
/*******************************************************************************
*Ãû³Æ: RTCIni()
*¹¦ÄÜ: ³õʼ»¯ÊµÊ±Ê±ÖÓ
*******************************************************************************/
void RTCIni(void)
{ PREINT=Fpclk/32768-1; //ÉèÖÃÔ¤·ÖƵÆ÷
PREFRAC=Fpclk-(Fpclk/32768)*32768;
YEAR=2017; //³õʼ»¯Äê
MONTH=4; //³õʼ»¯ÔÂ
DOM=9; //³õʼ»¯ÈÕ
HOUR=8;
MIN=30;
SEC=0;
CIIR=0x01; //ÉèÖÃÃëÖµµÄÔöÁ¿²úÉúÒ»´ÎÖжÏ
CCR=0x01; //Æô¶¯RTC
}
/*******************************************************************************
*Ãû³Æ: SendTimeRtc()
*¹¦ÄÜ: ¶ÁÈ¡RTCµÄʱ¼äÖµ£¬²¢½«¶Á³öµÄʱ·ÖÃëÖµÓÉ´®¿Ú·¢Ë͵½ÉÏλ»úÏÔʾ
*******************************************************************************/
void SendTimeRtc(void)
{ char send_buf[16]; //UART0Êý¾Ý½ÓÊÕ»º³åÇø
char const MESSAGE[]="RTC Time is:";
uint32 times;
uint8 bak;
times=CTIME0; //¶ÁÈ¡ÍêÕûʱÖӼĴæÆ÷0
bak=(times>>16)&0x1F; //È¡µÃʱµÄÖµ
send_buf[0]=bak/10+'0';
send_buf[1]=bak%10+'0';
send_buf[2]=':';
bak=(times>>8)&0x3F; //È¡µÃ·ÖµÄÖµ
send_buf[3]=bak/10+'0';
send_buf[4]=bak%10+'0';
send_buf[5]=':';
bak=times&0x3F; //È¡µÃÃëµÄÖµ
send_buf[6]=bak/10+'0';
send_buf[7]=bak%10+'0';
send_buf[8]='\r';
if(!int0_flag)
UART0SendStr((char*)MESSAGE);
OSMboxPost(Str_Box, (void *)&send_buf);//·¢ËÍÓÊÏäÏûÏ¢
OSTimeDly(20);
}
void TaskRTC (void *pdata)
{
pdata = pdata;
RTCIni();
while (1)
{
if(1==(ILR&0x01)) //µÈ´ýRTCÔöÁ¿Öжϱê־λ
{
ILR=0x01; //Çå³ýÖжϱê־λ
SendTimeRtc(); //¶ÁȡʱÖÓÖµ£¬²¢ÏòUART0·¢ËÍ
}
OSTimeDly(100);
}
}
/*********************************************************************************************************
** Öжϴ¦Àí³ÌÐò
********************************************************************************************************/
//Èç¹ûÈÎÎñ»¹Ã»³õʼ»¯Íê±Ï¾Í´¥·¢Öжϣ¬»á³öÏÖÎÊÌâ
void __irq EInt0(void)
{
OSIntEnter();
while(EXTINT &(1<<0))
EXTINT=1<<0;
int0_flag=~int0_flag;
if(int0_flag)
OSTaskSuspend (9);
else
OSTaskResume(9);
VICVectAddr=0;
OSIntExit();
}
void __irq EInt1(void)
{
OSIntEnter();
while(EXTINT &(1<<1))
EXTINT=1<<1;
int1_flag=~int1_flag;
if(int1_flag)
OSTaskSuspend (7);//¹ÒÆðTaskADC
else
OSTaskResume(7); //»Ö¸´TaskADC
VICVectAddr=0;
OSIntExit();
}
void __irq EInt2(void)
{
OSIntEnter();
while(EXTINT &(1<<2))
EXTINT=1<<2;
int2_flag=~int2_flag;
if(int2_flag)
OSTaskSuspend (8);//¹ÒÆðTaskRTC(×èÈû̬)
else
OSTaskResume(8);
VICVectAddr=0;
OSIntExit();
}
相关文章推荐
- Quartz.NET 2.0实例创建Windows服务实现任务调度
- java 任务调度实例
- Spring的任务调度服务实例讲解
- UCOSii(二)——任务的就绪与调度
- UCOSII概述之-任务调度
- 定时任务调度之Sping的@Scheduled注解实例详解
- Spring的任务调度服务实例讲解
- Spring任务调度之Spring-Task--应用实例:实现邮件(带附件)定时发送功能
- 企业级任务调度框架Quartz 四 多个job实例注册到任务调度器上
- Java任务调度框架Quartz教程实例
- python任务调度实例分析
- Spring框架结合Quartz实现任务调度实例
- java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- Java任务调度框架Quartz教程实例
- UCOSII学习笔记:任务调度(摘自原子教程)
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- c#中任务调度实例复习
- oracle的UTL_mail与任务调度详细分析实例
- Java任务调度框架Quartz教程实例