Re: [問題] C 語言有機械週期嗎??

看板C_and_CPP作者 (打字男)時間15年前 (2009/07/22 00:06), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串4/4 (看更多)
問題也太多了吧, 我只解兩個, delay 和 prag 可以這樣用 速度會不會加快你可以看組語的指令變化來計算 void delay40us (void) { //40us { #pragma asm MOV R7,#DELAYLEVEL1 B7:MOV R6,#DELAYLEVEL2 DJNZ R6,$ DJNZ R7,B7 #pragma endasm } { #pragma asm MOV R7,#DELAYLEVEL1 B8:MOV R6,#DELAYLEVEL2 DJNZ R6,$ DJNZ R7,B8 #pragma endasm } } ※ 引述《mathwin (準備再出發)》之銘言: : ※ 引述《hotpot21 (小新)》之銘言: : : (以下 C語言 使用在 8051) : : compiler後, : : 看到Program Size: data=41.5 xdata=0 code=8869 這一行 : 就我的認知,回答下列問題 : 如果有錯誤的地方,歡迎批評指導! : 這裡的data, xdata, code應該是指記憶體的位置。 : 宣告為data使用內部記憶體,速度會比較快 : 宣告為xdata使用外部記憶體,速度會稍微比較慢 : 而這裡的code應該是指complier之後code size的大小。 : : 1.是不是上面的數字減少 就表示程式執行的速度就會加快一些?? : : 2.將 int 改成 char , 上面code值有減少 ,也有算是加快一點點點點點??? : 因此,如果宣告為data執行速度會比較快。 : 但應該並不是指code size變小,就會變快? : int改為char應該只是為了減少所佔的flash大小..... : 實際上應用常常都會有flash不夠的困擾。 : : 3.副程式可使用在陣列嗎? 怎麼宣告? 宣告為哪種型態? 例: CODE[]={ light(),... }; : 宣告和main() function一樣啊! : 至於哪種型態,應該是看你的用途吧。 : : 3.要怎麼知道哪些指令是關係到 data ,哪些關係到 xdata ,哪些關係code? : : 最終目的:加快程式執行速度 : 通常常用的就會宣告為data,而且為global variable。減少parameter的傳送,加快速度 : : 4.有哪些方法?? : : 5.知道加可以"組語", 但不會用= = 試過還是會出現錯誤 怎樣做才算完全正確? : : (以下是我僅知道的作法) : : #pragma src //在int main 前 加上 : : int main() : : { : : . : : . : : . : : # pragma asm //使用組語開頭加 : : . : : . : : . : : # pragma endasm //使用組語結束後加 : : } : 印象中好像也是如此,會是你keilC 設定的問題嗎? : : 6.組語的Delay 副程式 設定為10ms : : 但隨著動作變化需要的value (value*10ms) 怎麼加 C 裡面? : : 難道要 : : R5, #10 // 10為value : : call Delay : : 這段直接加C程式裡面? : 其實是否可以直接用 for-loop 內部使用 _nop_(); : 就可以了?! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.102.172

07/22 20:38, , 1F
40us 是固定的?? 有辦法隨著需求變化嗎?
07/22 20:38, 1F

07/22 22:41, , 2F
借一本組語書來看看幫助會很大
07/22 22:41, 2F
文章代碼(AID): #1APUUUbI (C_and_CPP)
文章代碼(AID): #1APUUUbI (C_and_CPP)