[問題] C++求救!不知道問題在哪裡!!

看板C_and_CPP (C/C++)作者 (阿菁)時間16年前 (2009/07/18 21:40), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
目前正在進行專題, 遇到一個很奇怪的問題, 我描述一下情況: 目前從學長那繼承一個由伺服馬達控制的機器人, 原有的控制方式是組語, 後來改用C控制, 但發生副程式無法動作的情況, 下面是控制方式 範例(組語): 略... mov r2,#50 ;給值50 loop0: mov p2,00000001;丟值進P2.0 控制motor1 call delay15 ;延遲1.5ms(角度一) mov p2,00000010;丟值進P2.1 控制motor2 同時將P2.0值=0 call delay20 ;延遲2.0ms(角度二) call delay200 ;延遲20ms (滿足週期 驅動馬達動作) djnz r2,loop0 略... 註:伺服馬達的控制是給予一小段特定時間脈波(1.5ms 2.0ms... 並於滿足週期後向著目標角度進行一動(視馬達而定... 給予足夠迴圈就可以移至正確角度位置(r2=50... 簡單介紹後進入正題, 目前寫出來的C是 略.... void hd1( int );宣告各部位副程式 頭 void lh2( int ); 手 略... main() { int i; for(i=0;i<50;i++) { hd1( 45 );要求移向的角度 } for(i=0;i<50;i++) { lh2( 45 ); } } void hd1( int angle ) { p1=00000001; angledelay( angle ); } void lh2( int angle ) { p1=00000010; angledelay( angle ); } void angledelay( int angle ) 略... 問題開始!! 在原先測試的時候發現robot像中風一樣一直抖...抖...抖... 轉而用這個簡易程式測試 結果發現各種交叉測試 1.交換馬達 2.交換程式位置(考慮定義先後 3.改變輸出port點 都無法使lh2這個副程式正常動作 但hd1完全正常!!! 但hd1完全正常!!! 但hd1完全正常!!! DEBUG到目前為止並無發現任何硬體上的錯誤以及軟體上直接的錯誤 是有什麼隱規則被忽略掉了嗎? 這兩個副程式只差在一個叫hd1 一個叫lh2 但結果是天差地別 請問各位高手有什麼辦法嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.120.102 wayn12342000:轉錄至看板 ASM 07/18 21:44

07/18 22:54, , 1F
把C編譯出來的執行檔disassemble回組語,看看有什麼不同.
07/18 22:54, 1F

07/18 22:56, , 2F
看起來delay的時間不同,但你用的loop卻一樣.
07/18 22:56, 2F

07/18 23:04, , 3F
好的 我會試試看
07/18 23:04, 3F

07/19 10:28, , 4F
同2樓...應該是delay時間有問題
07/19 10:28, 4F

07/19 17:35, , 5F
ASM版有清楚的狀況解釋
07/19 17:35, 5F
文章代碼(AID): #1AOT2-EB (C_and_CPP)
文章代碼(AID): #1AOT2-EB (C_and_CPP)