最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

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

寫的第一個實時多任務的程序,請教!

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

下面是我的main程序的所有代碼,總共4個任務,分別指行同一個端口的狀態(tài),驅動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函數定義
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函數定義
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函數定義
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;            //引腳設為GPIO功能
     //IO1DIR =0XFFFFFFFF;            //引腳設為輸出模式
     IO1SET =0Xff00ffff;              //引腳全部設為滅狀態(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);
     }
}


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

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

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

謝謝!


3樓: >>參與討論
mikezhong
搞ARM的好像不多!
這個壇子,搞ARM的好像不多!

參與討論
昵稱:
討論內容:
 
 
相關帖子
在使用ADS軟件軟仿真時,怎樣能夠使Printf輸出到本電腦的超級
關于ads,axd
到哪里買S3C2510開發(fā)板,買三星原廠的怎樣?
關于ARM7的低端成像功能
關于44b0 UART一問
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號