|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教周工,關(guān)于程序進(jìn)入"取指令中斷"和"取數(shù)據(jù)中斷"的問(wèn)題 |
| 作者:weiyutong 欄目:ARM技術(shù) |
基于uC/OS-II和LPC2114的模板程序的多任務(wù)開(kāi)發(fā)。整個(gè)應(yīng)用程序分為UART數(shù)據(jù)接收任務(wù)(任務(wù)3)、UART數(shù)據(jù)發(fā)送任務(wù)(任務(wù)2),再加上一個(gè)其它任務(wù)(任務(wù)1)。UART使用中斷方式收發(fā)數(shù)據(jù),在任務(wù)3中讀取時(shí)鐘芯片的時(shí)間數(shù)據(jù),使用I2C中方式實(shí)現(xiàn)操作,任務(wù)的節(jié)拍使用定時(shí)器0的定時(shí)中斷。 第一種運(yùn)行模式: 運(yùn)行UART接收和發(fā)送任務(wù),任務(wù)3不運(yùn)行,UART的波特率為115200,長(zhǎng)時(shí)間收發(fā)數(shù)據(jù),應(yīng)用程序正常。但同時(shí)運(yùn)行任務(wù)3(此時(shí)不開(kāi)放I2C中斷)時(shí),程序就經(jīng)常跑到“取指令中斷”、“取數(shù)據(jù)中斷”,一般能正常運(yùn)行半個(gè)小時(shí),出現(xiàn)此類現(xiàn)象沒(méi)有規(guī)律。 第二種運(yùn)行模式: 運(yùn)行UART接收、發(fā)送任務(wù)和任務(wù)3(此時(shí)不開(kāi)放I2C中斷),UART的波特率改為19200,長(zhǎng)時(shí)間收發(fā)數(shù)據(jù),應(yīng)用程序正常。但在任務(wù)3中開(kāi)放I2C中斷并操作I2C時(shí),程序就經(jīng)常跑到“取指令中斷”、“取數(shù)據(jù)中斷”,一般能正常運(yùn)行2個(gè)小時(shí)左右,出現(xiàn)此類現(xiàn)象沒(méi)有規(guī)律。 第三種運(yùn)行模式: 不發(fā)送UART中斷,即UART沒(méi)有數(shù)據(jù)收發(fā),程序運(yùn)行正常。但收發(fā)任務(wù)是必需的。 檢查方法: 1.加大任務(wù)堆棧,不能解決問(wèn)題; 2.加大中斷嵌套時(shí)使用到的堆棧,即IRQ_STACK_LEGTH,不能解決問(wèn)題; 3.修改中斷優(yōu)先級(jí),不能解決問(wèn)題; 請(qǐng)問(wèn)周工和廣大同仁有有什么高招,我在這個(gè)問(wèn)題上花了近一個(gè)月的時(shí)間,問(wèn)題的關(guān)鍵一直未找到,真是苦海無(wú)邊,何時(shí)是岸?拜托了!給一點(diǎn)提示也好。 還有一個(gè)現(xiàn)象,不知廣大同仁是否遇到? 通過(guò)PC的串口發(fā)送程序自動(dòng)發(fā)送數(shù)據(jù)(即UART口不斷有數(shù)據(jù)),再啟動(dòng)ADS1.2在線調(diào)試程序,程序無(wú)法正常運(yùn)行,停止調(diào)試,程序總停在“取指令中斷”處,這個(gè)現(xiàn)象估計(jì)與上面的情況的根源是一樣,但百思不知其解。 |
| 2樓: | >>參與討論 |
| 作者: pheffy 于 2006/1/11 6:36:00 發(fā)布:
我的程序也是經(jīng)常出現(xiàn)這樣的問(wèn)題。關(guān)注中.... |
|
| 3樓: | >>參與討論 |
| 作者: 深思 于 2006/1/11 8:49:00 發(fā)布:
異常后拷貝LR到 PC,找到異常點(diǎn) 分析反匯編,通過(guò)反匯編的前后幾行來(lái)分析。 多半是移植的問(wèn)題。 |
|
| 4樓: | >>參與討論 |
| 作者: 深思 于 2006/1/11 8:49:00 發(fā)布:
另外,也要注意堆棧,建立任務(wù)時(shí)將每個(gè)任務(wù)的堆棧值記下來(lái) |
|
| 5樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/1/11 9:00:00 發(fā)布:
把‘任務(wù)’概念亂用的結(jié)果就是這樣 任務(wù)1應(yīng)該是監(jiān)測(cè)UART發(fā)送和接收隊(duì)列。 UART的中斷發(fā)送和接收、I2C的讀寫操作不是任務(wù),是驅(qū)動(dòng)。 |
|
| 6樓: | >>參與討論 |
| 作者: weiyutong 于 2006/1/11 11:13:00 發(fā)布:
LR是一個(gè)寄存器的地址即U1IER的地址,無(wú)法跟蹤. 當(dāng)出現(xiàn)取指令中斷的當(dāng)前LR內(nèi)容一般是0x4001000C,即U1IER寄存器的地址.跟蹤這個(gè)地址沒(méi)有用處. |
|
| 7樓: | >>參與討論 |
| 作者: weiyutong 于 2006/1/11 11:15:00 發(fā)布:
謝謝農(nóng)民講習(xí)所提出的批評(píng),你把的問(wèn)題描述清楚了. 我是按周立功的開(kāi)發(fā)模板文件進(jìn)行設(shè)計(jì)的,任務(wù)和驅(qū)動(dòng)沒(méi)有搞混,只是我沒(méi)有描述清楚.希望得到一些提示. |
|
| 8樓: | >>參與討論 |
| 作者: zlgarm 于 2006/1/11 11:19:00 發(fā)布:
一般為堆棧溢出、數(shù)組越界、“野指針”引起。某些時(shí)候 中斷產(chǎn)生后reload代碼調(diào)試也會(huì)產(chǎn)生。 如果不使用我們最新的移植代碼,也會(huì)產(chǎn)生。 多個(gè)任務(wù)用同一個(gè)堆棧也會(huì)產(chǎn)生。 ram不夠也會(huì)產(chǎn)生。 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |