首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请问C语言的软件复位方法

不知道是哪位大侠指点的,使用非法指令复位,有些芯片有支持,你可以试一试
#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


void MCU_init(void); /* Device initialization function declaration */


volatile const char IllegaInstrct = 0x8D;

void main(void) {

/* Uncomment this function call after using Device Initialization
to use the generated code */
/* MCU_init(); */

EnableInterrupts; /* enable interrupts */

/* include your code here */



for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */

asm
{
LDHX IllegaInstrct
JMP ,X
}


} /* loop forever */
/* please make sure that you never leave this function */
}
天剑
这只适用于8位的HC08和S08。HC12和S12并没有非法指令复位。
海纳百川  有容乃大
楼主所说的方法不就是斑竹的答复吗?呵呵。
当清WATCHDOG是,必须写$55和$AA到ARMCOP寄存器。如果写其他的数,芯片马上就会复位。这也就可以用作软件复位了。
“当清WATCHDOG是,必须写$55和$AA到ARMCOP寄存器。如果写其他的数,芯片马上就会复位。这也就可以用作软件复位了。”
事实不是这么简单,你必须在看门狗中断中加入跳转到Start处的指令:asm jmp _Startup;
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
对,这是一个要注意的问题。S12的WATCHDOG会产生复位,但它的中断矢量与上电复位和外部复位的中断矢量是不一样的。另外也要注意,WATCHDOG产生的复位与上电复位对某些特殊寄存器的影响可能也有所不同。
海纳百川  有容乃大
20# strongchen
能不能问一下。我也是要用开门够强制从起,可是楼上的那个asm jmp _Startup一直提示有错误,怎样才能让程序从起,具体点行吗?我是个初学者,谢谢了
15# nishui_2000
能不能问一下。我也是要用开门够强制从起,可是楼上的那个asm jmp _Startup一直提示有错误,怎样才能让程序从起,具体点行吗?我是个初学者,谢谢了
可以这样试试:

#pragma CODE_SEG NON_BANKED   //  下面代码放在NON_BANKED区
void interrupt 2  COP_RST(void)
{
    asm jmp _Startup;
}
海纳百川  有容乃大
23# strongchen
我具体点说吧,我运行程序提示的错误是这样的:
Error: C12020: UNknown Operand Combination: Instr:JMP/Oprl:Rel18/Opr2:NoOP.
意思应该是无法识别JMP这个指令对吧。
如果改为LJMP,这个错误倒是没有,不过会提示其他的错误。我还有就是想问一下。这里的写的interrupt 2这个中断,是不是指的就是开门狗中断,对ARMCOP付除AA和55的其它指他马上就跳到这个中断对吧。
如果用asm jmp _startup。程序的前面应该有汇编Startup这个关键字对吧,还是这条指令就是让程序从新开始运行。
可能我的问的问题基础了点,希望版主说的清楚点,真的万分感谢
23# strongchen
请问一下,为什么我的开门狗根本就没有进入开门狗的中断,你知道是为什么吗
这不是因为无法识别JMP指令,而是无法识别 _Startup。可以加这样一个说明在程序头部:

extern void _Startup(void);
海纳百川  有容乃大
26# strongchen
我把它改过了,写成 JMP main 这样写可以进入编译通过,但是为什么没用进入中断呀(我在中断里设置了IED灯亮的,确定没有进入中断)不知道为什么,能简单提一下,可能有哪些原因吗?
26# strongchen
看哈这个错误是什么原因
Link Error:L1907:Fixup overflow in _Vector_2 ,to COP_RST type1,at offset 0x0;
版主你好,我找了论坛其他一些人的问题看了哈,我很有些困惑。你能不能看一下。在我的.PRM文件里最后几句话是
STACKTOP  0x3FFF                       

//VECTOR 0 _Startup
//VECTOR 0 Entry  
//INIT Entry      
//VECTOR ADDRESS 0xFFFA _Startup//COP_ISR
是这个样子的,注释我删了。你能帮我解释下这几句话有什么作用吗?
还是不知道为什么我把这几句话的任何一句不屏蔽的话系统就会弹出错误。
例如我把最后一句不屏蔽的话,系统就会弹出这样的错误:
Link Error1119:Vector allocated at absolute address 0xFFFAoverlaps with sections placed in segment .absSeg5.
能不能告诉一下这个问题该怎么解决,这个absSeg5指的是什么东西。
是不是意思是地址重复了,能不能帮忙看一下,万分感谢
对汇编熟就嵌入汇编代码啦。用C的goto是跳转到语句,不是内存指针的跳转
返回列表