Re: [問題] C 語言有機械週期嗎??
問題也太多了吧, 我只解兩個, 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
07/22 20:38, 1F
→
07/22 22:41, , 2F
07/22 22:41, 2F
討論串 (同標題文章)