作者typeotoco (打字男)
看板C_and_CPP
标题Re: [问题] C 语言有机械周期吗??
时间Wed Jul 22 00:06:53 2009
问题也太多了吧, 我只解两个, 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
1F:→ hotpot21:40us 是固定的?? 有办法随着需求变化吗? 07/22 20:38
2F:→ typeotoco:借一本组语书来看看帮助会很大 07/22 22:41