📄 软件复位.txt
字号:
C51编程:c语言有什么方法能实现汇编的ljmp 0000h? [平] [37次] 01-8-23 下午 02:41:55
用goto main;肯定不行。
void main(void) {
start;
;
;
;
goto start;
}
上面这样行吗?
拉前点,请帮助 [平] [4次] 01-8-23 下午 03:05:48
这样 [qjh] [71次] 01-8-23 下午 03:13:57
void(*SoftReset)();
……
SoftReset=0;
……
SoftReset)();
再详细点,我确实是想软件复位 [平] [8次] 01-8-23 下午 03:26:56
嵌入汇编 [邦故] [47次] 01-8-23 下午 03:38:58
#pragma asm
ljmp 0FFF0h;
#pragma endasm
如此如此。 [qjh] [78次] 01-8-23 下午 04:03:00
//这样声明
void(*SoftReset)();
//这样调用
SoftReset=0;
SoftReset();
有一个内部函数可以实现“LJMP”功能。 [Netrue℡] [30次] 01-8-23 下午 04:28:27
我发现嵌入汇编后编译很麻烦 [c51guest] [7次] 01-8-23 下午 04:34:51
ok了,谢谢qjh [平] [3次] 01-8-23 下午 04:36:38
一点经验,请进: [☆无招☆] [71次] 01-8-23 下午 05:02:11
在C51编程过程中,如果调用一个不存在的外部函数,就引起复位。如下程序,
编译正常,但执行到 test()处即复位了。我观察了其汇编代码,发现该处的
代码为 LCALL C:0000.
所以,一方面可利用这种情况实现软件复位;
另一方面要注意如果出现莫名其妙的复位,可能有一个原因是调用了不存在
的外部函数,或者包括外部函数体的文件包括到主文件中一起编译。
extern void test(void); //实际并不存在。
void main()
{
unsigned char i;
test(); //复位
i++; //无法执行到的指令
}
这算不算是KEIL的一个BUG,不知其它的C51编译有无这现象? [☆无招☆] [2次] 01-8-23 下午 05:06:58
也许不算BUG,是KEILC对指针的保护机制? [平] [2次] 01-8-23 下午 05:16:09
有什么麻烦?说来听听。嵌入汇编效率好高,特别是循环。 [exdata] [29次] 01-8-23 下午 05:16:57
有什么麻烦?说来听听。嵌入汇编效率好高,特别是循环。
以下对比一下:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#define PORT XBYTE[0x1234]
sbit P1_2=P1^2;
void toport(unsigned char *pp); //汇编写的
main()
{
unsigned char i,j;
unsigned char buf[20],*p;
p=buf;
i=23;
i=34;
for(i=0;i<20;i++) //427us @12MHz franklin C3.2
{ PORT=buf[i]; //302us @12MHz Keil C6.12
P1_2=0;
_nop_();
_nop_();
_nop_();
P1_2=1;
}
_nop_();
toport(buf); //190us @12MHz == for()
_nop_();
}
……
……
RSEG ?PR?TOPORT?SPRASM
_TOPORT:MOV R5,#20
MOV DPTR,#1234
L: MOV A,@R1
MOVX @DPTR,A
CLR P1.2
NOP
NOP ;
INC R1
SETB P1.2
DJNZ R5,L
RET
END
谢谢分享! [exdata] [1次] 01-8-23 下午 05:19:00
你说的是混合汇编,嵌入汇编的确有点麻烦,因为它不能编译进目标文件,只能通过 SRC生成临时文件。 [☆无招☆] [13次] 01-8-23 下午 05:25:44
不好意思,也许我说的不对,望指教
其实如果用汇编的思路,用C51也可以做到跟汇编差不多的效果。 [☆无招☆] [6次] 01-8-23 下午 05:33:46
"SRC" !Trounlesome! [exdata] [6次] 01-8-23 下午 05:36:37
嵌入汇编后编译不麻烦 [邦故] [56次] 01-8-23 下午 05:43:14
设置该文件生成SRC.Generate Assembler SRC file
再设置汇编该文件SRC.Assemble SRC file
不必将该文件的SRC文件名TEXT.SRC也加入项目,设置允许汇编。
如此而已!
但如果不嵌入汇编的话,一个“编译按钮”搞定。 [☆无招☆] [23次] 01-8-23 下午 06:07:16
其实嵌入汇编主要是以后程序的维护比较麻烦。算了,我也不知该怎么说。
如何设置???? [c51guest] [7次] 01-8-23 下午 08:35:23
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -