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

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

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

各位,目前刚使用codewarrior的c compiler,之前汇编实现软件复位很简单一个jmp就可以了。但是目前用c后,如何复位比较恰当呢?

可以在C中内嵌汇编实现
将地址转为函数指针
然后执行

 边凿磨边用
 
 经验同分享
S12的指令有软件复位的么?能不能介绍一下用法?
我现在用的是采用死循环,然后强制看门狗复位的办法实现的软复位
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
goto不可以么?
实在不行 用asm
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
当清WATCHDOG是,必须写$55和$AA到ARMCOP寄存器。如果写其他的数,芯片马上就会复位。这也就可以用作软件复位了。
海纳百川  有容乃大
用过HC08的MCU,软件复位有几种1)汇编复位指令SWI。2)执行错误代码  。3)跳入错误地址  4)看门狗。
楼上说的汇编复位指令swi能不能具体介绍下,不太了解这个
正在进行NE64的研究学习,欢迎和我讨论~ saga0807@hotmail.com
执行swi语句,就是一个软件中断,你可以在软件中断向量中写入和reset向量中一样的地址,那么就类似于复位,程序重新开始执行
seuafu2005:你说的采用SWI的方法,在“软件中断向量中写入和reset向量中一样的地址”,具体应该怎么写?能不能明确解释一下?谢谢
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
SWI只是软件中断,并不能产生真正的复位,不会使MCU初始化。
海纳百川  有容乃大
那对S12单片机来说,除了看门狗外还有什么办法可以实现软件复位?
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
既然当初楼主使用的是jmp进行跳转复位的,那现在一样也可以用C嵌套汇编的方式来实现相同的功能,这样就不会增加任何额外的功能需求。

软件复位恐怕没有什么更好的办法了。另外也可以用软件控制硬件,如RESET脚的方法产生复位。
海纳百川  有容乃大
我找到很好的软件复位办法了,而且调试通过,这个办法对于S12,S08都适用。
采用看门狗的方法:
interrupt 2 void COP(void){
PORTB = 0x01;
asm jmp _Startup;
}
//=============================================================================
#pragma CODE_SEG DEFAULT
//======================== Force to Reset =====================================
void ForceReset(void){
COPCTL = 0x07; // Turn on watchdog
ARMCOP = 0x00; // Write Incorrect value => Force Reset
}
我实验过了没问题的,很好用。
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
返回列表