|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[求助]調(diào)試UC/OS 2遇到的奇怪問題 |
| 作者:fujiajun 欄目:嵌入式系統(tǒng) |
我用2.52的源代碼移植了一下ucos-ii,在Main()函數(shù)里創(chuàng)建了Main_task,點全速運行,任務創(chuàng)建等都可以,可以從Task1切換到Taks2,可以從Task2切換到Task3,也可以從Task3切換到Main_task,但是當從Main_task再次切換到空閑任務的時候就不行了,進入OSCtxSw就出不來了,系統(tǒng)進入中止模式,何故? 優(yōu)先級:Main_task > Task1 > Task2 > Task3 void Task1_Task(void *Id) { int i; while(1) { i++; OS_ENTER_CRITICAL(); uHALr_printf(" Task1\n"); OS_EXIT_CRITICAL(); OSTimeDly(1000); } } void Task2_Task(void *Id) { int i; while(1) { i++; OS_ENTER_CRITICAL(); uHALr_printf(" Task2\n"); OS_EXIT_CRITICAL(); OSTimeDly(2000); } } void Task3_Task(void *Id) { int i; while(1) { i++; OS_ENTER_CRITICAL(); uHALr_printf(" Task3\n"); OS_EXIT_CRITICAL(); OSTimeDly(3000); } } void Main_Task(void *Id) { ARMTargetStart(); OSTaskCreate(Task1_Task, (void *)0, (OS_STK *)&Task1_Stack[TASK_STACK_SIZE-1], Task1_PRIO); OSTaskCreate(Task2_Task, (void *)0, (OS_STK *)&Task2_Stack[TASK_STACK_SIZE-1], Task2_PRIO); OSTaskCreate(Task3_Task, (void *)0, (OS_STK *)&Task3_Stack[TASK_STACK_SIZE-1], Task3_PRIO); while (1) { OS_ENTER_CRITICAL(); uHALr_printf("It is in main_task,notice!!\n"); OS_EXIT_CRITICAL(); OSTimeDly(40); } } 現(xiàn)象如下: Starting target! It is in main_task,notice!! (在Main_task運行時所打印) OSCtxSw! (切換到任務1時打印OSCtxSw!) ->Task1 OSCtxSw! (切換到任務2時打印OSCtxSw!) ->Task2 OSCtxSw! (切換到任務3時打印OSCtxSw!) ->Task3 OSCtxSw! (切換到空閑任務時打印OSCtxSw!) ->idle task the task is running in idle task (在空閑任務中運行時所打印) the task is run (中斷到來,進入OSTickISR) OSIntCtxSw! (切換到main_task時打印,我已經(jīng)設置了調(diào)用OSIntCtxSw()時打印OSIntCtxSw!) ->main_task It is in main_task,notice!! OSCtxSw! (雖然進入了OSCtxSw,但是卻切換不到空閑任務,執(zhí)行OSCtxSw最后一條指令后系統(tǒng)進入中止模式。。 請多多關照,已經(jīng)調(diào)了好幾天了,不知道錯在何處! 請多多指教!謝謝。 * - 本貼最后修改時間:2006-2-27 8:47:53 修改者:fujiajun |
| 2樓: | >>參與討論 |
| 作者: cmswc 于 2006/3/3 19:06:00 發(fā)布:
告訴你吧!哥們。 也不知道你會不會再來,因為你的目標板沒有初始化,在第一個任務時,必須有TargetInit();來初始化目標板,啟動中斷,時鐘節(jié)拍脈沖, 你的CODE主要是OSTimeTick();沒有執(zhí)行,也就是你的時鐘節(jié)拍沒有初始化,時鐘節(jié)拍中斷沒有發(fā)生。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |