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

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

這是我學習UCOSII和LPC2132后的寫的第一個程序,請教!

作者:mikezhong 欄目:ARM技術(shù)
這是我學習UCOSII和LPC2132后的寫的第一個程序,請教!
各位好,這是我學習UCOSII和LPC2132后的寫的第一個程序,憧憬著能夠成功,可是現(xiàn)實確打擊的我體無完膚,沉痛中思索,我到底到哪里出來問題?可是自已總是無法找到原因,請各路好漢伸出你們的雙手,幫我看看!

下面是我的main程序的所有代碼,總共4個任務,分別指行同一個端口的狀態(tài),驅(qū)動LED,用LED點亮或滅來判斷各位任務是否跑起來,沒有使用任何的消息,和事件,當我在Main_Task中,創(chuàng)建一個任務Task1_Task時,程序可以跑起來,但是在Main_Task中再創(chuàng)建一個任務Task2_Task時,PCB 上LED沒有任何反應。由此可知UCOS根本沒有運行任務,包括MAIN——TASK,請問各位,為何會出現(xiàn)這種情況。


#include "config.h"
#include "stdlib.h"

#define    TaskStkLengh    1024        //Define the Task0 stack length 定義用戶任務0的堆棧長度


OS_STK Main_Stack[TaskStkLengh];    //主任務堆棧
#define Main_PRIO   10

//任務1
OS_STK Task1_Stack[TaskStkLengh];   //任務1堆棧
#define Task1_PRIO   12             //任務1優(yōu)先級


//任務2
OS_STK Task2_Stack[TaskStkLengh];   //任務2堆棧
#define Task2_PRIO   14             //任務2優(yōu)先級

//任務3
OS_STK Task3_Stack[TaskStkLengh];   //任務3堆棧
#define Task3_PRIO   16             //任務3優(yōu)先級

#define      LED1    (1 << 18)           // P1.18控制LED1
#define   LED2  (1 << 19)           // P1.18控制LED2
#define   LED3  (1 << 20)           // P1.18控制LED3

//任務1函數(shù)定義
void Task1_Task(void *pdata)
{    
     uint32 i;
     pdata=pdata;
     while (1)
     {
         i++;
         OS_ENTER_CRITICAL();
         //寫我自已的代碼
         //IO1CLR = LED1;           //點亮LED1
         IO1CLR = 0XFF00FFFF;
         OSTimeDly(OS_TICKS_PER_SEC / 2);
         //IO1SET = LED1;
         OSTimeDly(OS_TICKS_PER_SEC / 2);
         OS_EXIT_CRITICAL();
         OSTimeDly(1000);           //延時掛起
     }
}

//任務2函數(shù)定義
void Task2_Task(void *pdata)
{
     uint32 i;
     pdata=pdata;
     while (1)
     {
         i++;
         OS_ENTER_CRITICAL();
         //寫我自已的代碼
         //IO1CLR = LED2;           //點亮LED2
         IO1SET = 0XFF00FFFF;
         OSTimeDly(OS_TICKS_PER_SEC / 2);
         //IO1SET = LED2;
         //OSTimeDly(OS_TICKS_PER_SEC / 2);
         OS_EXIT_CRITICAL();
         OSTimeDly(2000);           //延時掛起
     }
}


//任務3函數(shù)定義
void Task3_Task(void *pdata)
{
     uint32 i;
     pdata=pdata;
     while (1)
     {
         i++;
         OS_ENTER_CRITICAL();
         IO1CLR = LED3;                //點亮LED3
         OSTimeDly(OS_TICKS_PER_SEC / 2);
         IO1SET = LED3;
         OSTimeDly(OS_TICKS_PER_SEC / 2);
         OS_EXIT_CRITICAL();
         OSTimeDly(3000);              //延時掛起
     }
}

//主任務的定義
void Main_Task(void *pdata)
{
     pdata=pdata;
     //TargetInit ();
     //PINSEL1=0X00000000;            //引腳設(shè)為GPIO功能
     //IO1DIR =0XFFFFFFFF;            //引腳設(shè)為輸出模式
     IO1SET =0Xff00ffff;              //引腳全部設(shè)為滅狀態(tài)
     OSTimeDly(OS_TICKS_PER_SEC/2);
     OSTaskCreate(Task1_Task,(void *)0,&Task1_Stack[TaskStkLengh-1],Task1_PRIO);
     
     //OSTaskCreate(Task2_Task,(void *)0,&Task2_Stack[TaskStkLengh-1],Task2_PRIO);//當創(chuàng)建此任務時,發(fā)現(xiàn)電路根本沒反應,去掉Task2_task后,又Task1_Task又能運行。為何????
     
     //OSTaskCreate(Task3_Task,(void *)0,&Task3_Stack[TaskStkLengh-1],Task3_PRIO);
     
     while(1)
     {
         OSTimeDly(1000);
     }
}


//主函數(shù)開始
int main()
{
     //這里寫對目標初始化函數(shù)
     OSInit();
     TargetInit ();
     PINSEL1=0X00000000;              //引腳設(shè)為GPIO功能
     IO1DIR =0XFFFFFFFF;              //引腳設(shè)為輸出模式
     IO1CLR =0Xffffffff;              //引腳全部設(shè)為滅狀態(tài)
     OSTaskCreate(Main_Task,(void *)0,&Main_Stack[TaskStkLengh-1],Main_PRIO);
     OSStart();          //此函數(shù)永遠不會返回
     return 0;
}

2樓: >>參與討論
mikezhong
懇請大俠指點。
懇請大俠指點。

3樓: >>參與討論
mikezhong
我已經(jīng)找到了解決的方法
各位好,我已經(jīng)找到了解決的方法,但是問題的真正原因還有待解釋。

1)我在0SStart();開了節(jié)拍中斷。----書上有講,不可以在此中斷。
2)將任務堆棧減小為512后,3個任務全部運行。----為什么1024不行???

謝謝!

4樓: >>參與討論
深思
1024時的RAM可能不夠,節(jié)拍定時器最好是第一個任務里面初始化
 
5樓: >>參與討論
gyf2000
請問樓主
你所說的在OSStart()前開了節(jié)拍中斷,是不是就是在OSStart()之前調(diào)用了TargetInit ();函數(shù),將此函數(shù)放到void Main_Task(void *pdata)中調(diào)用,就解決了你出現(xiàn)的問題。還有一個疑問請教:TargetInit ()函數(shù)中的srand((uint32) TargetInit);為什么要用來產(chǎn)生隨機數(shù),有何作用?謝謝!


6樓: >>參與討論
mikezhong
我還得看看書
TO:gyf2000

     呵呵,你問我這樣的問題,我還得看看書,本人初學者也。

7樓: >>參與討論
goodguy
re:
arm7 core 的堆棧是滿遞減的,可能是你任務堆棧的起始地址設(shè)的太低,跟變量去有重疊,所以跑不起來!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
靠人不如靠己,24C256的ARM程序終于搞定了:
如何才算熟悉ARM的體系結(jié)構(gòu)?
關(guān)于LPC2100開發(fā)套件事宜
請教volatile  uint8  I2C_sla;
不好意思,在SmartARM中我找不到MT45W4MW16
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


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