音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

μC/OS-II下的任務(wù)初始化?

作者:上善若水 欄目:嵌入式系統(tǒng)
μC/OS-II下的任務(wù)初始化?

在μC/OS-II中很多任務(wù)的初始化(包括一些只在這個任務(wù)中用到的變量)必須放到整個程序的開頭,如果放在這個任務(wù)里就會報錯,甚至是為了這個任務(wù)中將要調(diào)用的μC/OS-II的函數(shù)聲明個err也要挪到整個程序的頭上才不報錯!
   這個任務(wù)就只能寫成:
   void Taskx (void *pdata)
{
   在這里什么都不讓定義。。。。。。。。。。
   pdata = pdata;
  
   for(;;)
   {
   }
}
的形式
但是有的任務(wù)卻可以這么處理。請問這到底是為什么?

2樓: >>參與討論
上善若水
看00的博客
但其它的任務(wù)里都沒什么,唯獨(dú)這個有問題,這是為什么啊。真是奇怪。我收藏起00的博客地址了。

3樓: >>參與討論
computer00
編譯的錯誤信息是什么?
 

* - 本貼最后修改時間:2006-2-28 20:15:57 修改者:computer00

4樓: >>參與討論
上善若水
謝謝00,編譯的錯誤:
主要是說定義的變量應(yīng)該是個extern之類的,我都定義到程序的頭上就好了,我一看屏幕就惡心了,恕我不能把這些再改回去,下次一定及時貼出錯誤。

5樓: >>參與討論
上善若水
出錯的代碼

OS_FLAGS v明明是task2 里的局部變量,但是當(dāng)我在task2里聲明的時候就會報錯,定義在程序頭的時候就正常,程序附于下面,后面的是它編譯時的錯誤:
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"

#define TASK_STK_SIZE   64          // 定義用戶任務(wù)的堆棧長度
#define L 0x01
//OS_FLAGS v;   在這里定義不會報錯。

OS_STK        TaskStartStk[TASK_STK_SIZE];                                   //(2)
OS_STK        TaskStk[TASK_STK_SIZE];                                        //(3)
OS_FLAG_GRP   *A;
uint8   err;


void  Task1(void *pdata);
void  Task2(void *pdata);
void  BeeMoo(void);
void  BeeNoMoo(void);
uint32 GetKey(void);

#define     KEY1    1 << 16     // P0.16-KEY1
#define     BEEP    1 << 7      // P0.7-BEEP

/*
*********************************************************************************************************
** 函數(shù)名稱 :main()
** 函數(shù)功能 :uC/OS-II主函數(shù),啟動多任務(wù)環(huán)境。
*********************************************************************************************************
*/
int main (void)
{
   uint8   err;
    OSInit();    
     A=OSFlagCreate(0x00, &err);                                                         
    OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10);         
    OSStart();                                                               
    return 0;                                                                
}

/*
*********************************************************************************************************
**                      任務(wù)1-Task1()
**                   鍵盤掃描(具有去抖動功能)
*********************************************************************************************************
*/
void  Task1(void *pdata)
{
    pdata = pdata;                               /* 避免編譯警告 */
   
    TargetInit();                               /* 目標(biāo)板初始化 */
    for (;;)                                                                     
    {
        OSTimeDly(OS_TICKS_PER_SEC / 50);     /* 延時20毫秒 */                    
        if (GetKey() != KEY1)                    /* GetKey用于獲取鍵盤當(dāng)前狀態(tài) */
        {
            continue;                         /* 不是KEY1不理會 */
        }
        OSTimeDly(OS_TICKS_PER_SEC / 50);    /* 延時20毫秒,用于去抖 */           
        if (GetKey() != KEY1)                    /* 還是KEY1才正確  */
        {
            continue;
        }
       
       err = OSFlagPost(A,L,OS_FLAG_SET, &err);
       
        while (GetKey() != 0)                    /* 等待松開按鍵 */
        {
            OSTimeDly(OS_TICKS_PER_SEC / 50);   /* 延時20毫秒 */                  
        }
        err = OSFlagPost(A,L,OS_FLAG_SET, &err);
    }
}

/*
*********************************************************************************************************
**                      任務(wù)2-Task2()
**                   蜂鳴器鳴叫
**************************************************************************
6樓: >>參與討論
computer00
OS_FLAGS 是個什么樣的東西?
void  Task2(void *pdata)
{   
    OS_FLAGS v;       //把它弄到這里來試試?

    PINSEL0 = 0;                // 設(shè)置管腳連接
    IO0DIR = BEEP;              // 蜂鳴器控制口輸出


你把    OS_FLAGS  的定義弄上來看看………………

* - 本貼最后修改時間:2006-2-28 20:15:58 修改者:computer00

7樓: >>參與討論
上善若水
00好神。
00你說的沒錯,我剛試了試,沒問題了,能不能給我講一下設(shè)在下面和設(shè)在下面的道理。真是糊涂了。

8樓: >>參與討論
hotpower
哈哈,21IC水王連這個也搞不定???---暈到~~~
 
9樓: >>參與討論
ferry
編譯器提示
變量聲明要放在開頭。放在后面編譯器把OS_FLAGS當(dāng)作表達(dá)式了,而這是一個已定義的類型名,沖突。編譯器又說表達(dá)式語句后面應(yīng)加;后面的v也成了一個未定義類型的變量,于是要求加extern int之類的聲明。

10樓: >>參與討論
computer00
這是C語言的規(guī)定,沒辦法改的。
標(biāo)準(zhǔn)的C只能放在函數(shù)剛進(jìn)去的地方聲明,而對于C++,則可以在中間的地方聲明,但也必須要緊接著大括號‘{’之后。

* - 本貼最后修改時間:2006-2-28 20:16:06 修改者:computer00

11樓: >>參與討論
上善若水
Million thanks to 00
對!我真是葷頭了,不在任務(wù)里還能很清醒,一到任務(wù)里居然就分不清聲明和定義的區(qū)別了!要成為“水王”路還好長啊。

12樓: >>參與討論
陳雙君
上面說得有道理的。
上面說得有道理的。
樓上的說得不錯,可以這樣認(rèn)為的。

13樓: >>參與討論
computer00
其實(shí)我也經(jīng)常不分定義和聲明的
像我上面那個帖子,我本意是想說定義的。

標(biāo)準(zhǔn)的C只能放在函數(shù)剛進(jìn)去的地方定義,而對于C++,則可以在中間的地方定義,但也必須要緊接著大括號‘{’之后。



14樓: >>參與討論
ferry
新標(biāo)準(zhǔn)沒限制了
最新的c語言標(biāo)準(zhǔn)(c99)已經(jīng)沒有必須把聲明放在入口處的限制了,有c編譯器仍然沿用舊的標(biāo)準(zhǔn)。C++遵循了新標(biāo)準(zhǔn)。

15樓: >>參與討論
fushaobing
關(guān)注:)
 
16樓: >>參與討論
cmswc
這是C語言的問題!
在C語言中,“是先定義,后使用”!


17樓: >>參與討論
am780717
μC/OS-II下的任務(wù)初始化?
好像跟編譯器也有關(guān)系

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
想學(xué)pSOS,請大蝦推薦學(xué)習(xí)資料!謝謝!
論壇里搜了一下,好像ecos相關(guān)的帖子很少阿
哪位做過醫(yī)用非標(biāo)CCD的解碼嗎?
問一下關(guān)于Cypress公司芯片的開發(fā)
做嵌入式軟件,能干到多大年齡?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號