色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃
電子工程網(wǎng)
標(biāo)題:
請(qǐng)教高手一個(gè)UC/os-II隔信號(hào)量的問(wèn)題
[打印本頁(yè)]
作者:
bb_l_2012
時(shí)間:
2011-3-21 20:53
標(biāo)題:
請(qǐng)教高手一個(gè)UC/os-II隔信號(hào)量的問(wèn)題
下面是周立功的一個(gè)例子: #include "main.h"
#define TaskAdcSend_ID 17 /* 任務(wù)的ID */
#define TaskAdcSend_PRIO TaskAdcSend_ID /* 任務(wù)的優(yōu)先級(jí) */
#define TaskAdcSend_STACK_SIZE 512 /* 定義用戶堆棧長(zhǎng)度 */
#define TaskBeep_ID 18 /* 任務(wù)的ID */
#define TaskBeep_PRIO TaskBeep_ID /* 任務(wù)的優(yōu)先級(jí) */
#define TaskBeep_STACK_SIZE 512 /* 定義用戶堆棧長(zhǎng)度 */
OS_STK TaskAdcSend_STACK[TaskAdcSend_STACK_SIZE];
OS_STK TaskBeep_STACK[TaskBeep_STACK_SIZE];OS_EVENT *Sem1;void TaskAdcSend(void *pdata);
void TaskBeep(void *pdata);#define KEY1 1 << 12 /* P0.12為中斷輸入腳 */
#define test
/*********************************************************************************************************
** Function name: TimeDly
** Descriptions: 軟件延時(shí)
** Input: dly
** Output: 無(wú)
*********************************************************************************************************/
void TimeDly(uint32 dly)
{
uint32 i,j;
for(i = 0; i < dly; i++)
for(j = 0; j < 10000; j++);
}/********************************************************************************************************
** Function name: ExtInt_Exception
** Descriptions: GPIO管腳P0.12出發(fā)的外部中斷的中斷服務(wù)程序
** Input: 無(wú)
** Output: 無(wú)
*********************************************************************************************************/
void ExtInt_Exception(void)
{
TimeDly(30); /* 軟件延時(shí),消除抖動(dòng) */
OSSemPost(Sem1); //發(fā)出信號(hào)量,key腳下降沿才生中斷發(fā)出信號(hào)量
IO0IntClr |= KEY1; /* 清零P0.12中斷 */
VICVectAddr = 0; /* 向量中斷結(jié)束 */}
/*********************************************************************************************************
** Function name : main
** Descriptions : 主函數(shù)
** Input : 無(wú)
** Output : 無(wú)
** Created Date : 2006-04-11
********************************************************************************************************/
int main (void)
{
OSInit();
OSTaskCreateExt(TaskAdcSend,
(void *)0,
&TaskAdcSend_STACK[TaskAdcSend_STACK_SIZE-1],
TaskAdcSend_PRIO,
TaskAdcSend_ID,
&TaskAdcSend_STACK[0],
TaskAdcSend_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(TaskBeep,
(void *)0,
&TaskBeep_STACK[TaskBeep_STACK_SIZE-1],
TaskBeep_PRIO,
TaskBeep_ID,
&TaskBeep_STACK[0],
TaskBeep_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSStart();
}
/*******************************************************************************************************
** Function name: Task_AdcSend
** Descriptions: 無(wú)
** Input: 無(wú)
** Output: 無(wú)
********************************************************************************************************/
void TaskAdcSend (void *pdata)
{
uint8 err;
uint32 ADC_Data;
char str[20];
pdata = pdata; TargetInit();
PINSEL0 &= ~(0X03<<24);
IO0IntEnF |= KEY1; /* 設(shè)置P0.12為下降沿中斷 */
IO0IntClr = 0xffffffff; /* 首先清零中斷標(biāo)志位 */ SetVICIRQ(17,1,(uint32)ExtInt_Exception); /* 分配外部中斷3的優(yōu)先級(jí)為1, */
/* GPIO觸發(fā)的外部中斷和外部中 */
/* 斷3同用一個(gè)中斷號(hào) */
Sem1 = OSSemCreate(0);
PCONP |=1 <<12; /* 打開ADC的功率控制位 */
PINSEL1 = (PINSEL1&0xffff3fff)|(0x01<<14); /* 設(shè)置P0.23為AIN0[0]功能 */
/*
* 進(jìn)行ADC模塊設(shè)置
*/
AD0CR = (1<<0) | /* SEL = 0X01,選擇通道0 */
((Fpclk / 1000000 - 1) << 8)| /* CLKDIV=Fpclk/1000000-1, */
/* 轉(zhuǎn)換時(shí)鐘為1MHz */
(0 << 16)| /* BURST=0,軟件控制轉(zhuǎn)換操作 */
(0 << 17)| /* CLKS=0, 使用11clock轉(zhuǎn)換 */
(1 << 21)| /* PDN=1,正常工作模式 */
(1 << 24); /* START=1,直接啟動(dòng)ADC轉(zhuǎn)換 */
OSTimeDly(OS_TICKS_PER_SEC/100);
ADC_Data = ADDR0; /* 讀取ADC結(jié)果,并清除DONE標(biāo)志位*/
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC/10);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC/10);
while(1)
{
OSSemPend(Sem1,0,&err);
AD0CR |= 1 << 24; /* 進(jìn)行第一次轉(zhuǎn)換 */
while ((AD0STAT & (1<<0)) == 0); /* 等待AIN0轉(zhuǎn)換結(jié)束 */
ADC_Data = ADDR0; /* 讀取ADC結(jié)果 */
AD0CR |= 1 << 24; /* 再次啟動(dòng)轉(zhuǎn)換 */
while ((AD0STAT & (1<<0)) == 0); /* 等待AIN0轉(zhuǎn)換結(jié)束 */
ADC_Data = ADDR0; /* 讀取ADC結(jié)果 */
ADC_Data = (ADC_Data >> 6) & 0x3ff;
ADC_Data = ADC_Data * 2500; /* 參考電壓由精密恒壓源提供的2.5V*/
ADC_Data = ADC_Data / 1024;
sprintf(str, "AD轉(zhuǎn)換的電壓為:");
UART0_SendStr(str);
sprintf(str, "%4d mV \r\n", ADC_Data);
UART0_SendStr(str);
}
}
/**********************************************************************************************************
** Function name: TaskBeep
** Descriptions: 無(wú)
** Input: 無(wú)
** Output: 無(wú)
**********************************************************************************************************/void TaskBeep (void *pdata)
{
pdata = pdata;
while(1)
{
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC/2);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC/2);
}
} 感覺這個(gè)程序是用信號(hào)量控制AD轉(zhuǎn)換的:KEY按下時(shí)就發(fā)出信號(hào)量,開始AD轉(zhuǎn)換,可是OSSemPend()等待超時(shí)時(shí)還是要運(yùn)行Task_AdcSend,同樣進(jìn)行了AD轉(zhuǎn)換,只是Task_AdcSend的*err=OS_TIMEOUT。這樣不是就沒有起到有key控制AD轉(zhuǎn)換的效果
歡迎光臨 電子工程網(wǎng) (http://m.54549.cn/)
Powered by Discuz! X3.4