搜索
bottom↓
回复: 44

请教:在C程序上怎么实现单片机重启,AVR的??

[复制链接]

出0入0汤圆

发表于 2010-1-12 10:58:47 | 显示全部楼层 |阅读模式
在C程序上怎么实现单片机重启,AVR的??

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-1-12 11:01:36 | 显示全部楼层
清SREG 直接调用main()就可以 我试过

出0入0汤圆

 楼主| 发表于 2010-1-12 11:24:51 | 显示全部楼层
SREG=0;
   main();
这样不行哦

出0入0汤圆

发表于 2010-1-12 11:32:35 | 显示全部楼层
(*(void(*)())0)();

PC从0开始运行.自动就到了MAIN了,,

出0入0汤圆

发表于 2010-1-12 11:34:02 | 显示全部楼层
看门狗

出0入0汤圆

发表于 2010-1-12 11:37:35 | 显示全部楼层
四楼正解,饿狗

出0入0汤圆

 楼主| 发表于 2010-1-12 11:51:06 | 显示全部楼层
饿狗
是这样吗?

void  delay(unsigned int Var_delay)
{
   while(Var_delay)
     {      
            Var_delay--;
          }
}

调用
delay(65000);

出0入0汤圆

发表于 2010-1-12 11:53:51 | 显示全部楼层
如果不想复杂,打开看门狗,然后
while(1);
不就得了吗?

如果要复杂的。那么如你所写,但是你延时65000够时间看门狗复位吗?

还有,万一你这个函数调用后,没复位,返回了,你再怎么处理?

出0入0汤圆

发表于 2010-1-12 12:10:32 | 显示全部楼层
{cli();(*((void (*)(void))(0)))();}
这样是没问题的.用了很多了.

出0入0汤圆

发表于 2010-1-12 13:17:51 | 显示全部楼层
又学了一招

出0入0汤圆

发表于 2010-1-12 13:42:02 | 显示全部楼层
看门狗+while(1)就可以了

出0入0汤圆

发表于 2010-1-12 13:51:04 | 显示全部楼层
回复【楼主位】guangan854214
-----------------------------------------------------------------------
可以把狗狗速度调到最快,然后while(1);

-----------------------------------------------------------------
打开看门狗之后,atmega16,复位函数

#define ResetCPU() {WDTCR&=~0x07;while(1);}

出0入0汤圆

 楼主| 发表于 2010-1-12 15:00:47 | 显示全部楼层
WDR();
    WDTCR|=(1<<WDCE)|(1<<WDE);
        WDTCR=0x08;
    while(1);

这样写,单片机到这就死在那里了,没出来,怎么回事

出0入0汤圆

发表于 2010-1-12 15:31:20 | 显示全部楼层
重启是reset吧,那是相当了重新上电的模式,ram内存及其它单片机内外设全部初始化。那用看门狗就没错。
如果只是从地址零(也可能不是0)处运行那就用
cli();(*(void(*)())所需地址)(); 应该没问题。

出0入0汤圆

发表于 2010-1-12 15:31:30 | 显示全部楼层
void (*reset)(void) = 0x0000;

直接调用reset();

出0入0汤圆

发表于 2010-1-12 15:36:53 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2010-1-12 15:54:36 | 显示全部楼层
学习~

出0入0汤圆

 楼主| 发表于 2010-1-12 15:56:08 | 显示全部楼层
回复【16楼】ngei
void (*reset)(void) = 0x0000;
直接调用reset();
-----------------------------------------------------------------------
这个可以了,谢谢指教!!!

出0入0汤圆

发表于 2010-1-12 16:01:53 | 显示全部楼层
要想速度快 asm("jmp 0x0000");

出0入0汤圆

发表于 2010-1-12 16:09:37 | 显示全部楼层
用看门狗保险些

出0入0汤圆

发表于 2010-1-12 16:42:25 | 显示全部楼层
我的理解也是用看门狗

出0入0汤圆

发表于 2010-11-18 21:54:41 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2010-11-18 22:11:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-18 22:14:25 | 显示全部楼层
我也是用狗,如果喂狗放在中断了就先关中断,再来一个延时

出0入0汤圆

发表于 2010-11-19 00:20:07 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-11-19 00:23:29 | 显示全部楼层
不错 学习了

出0入0汤圆

发表于 2010-11-19 08:18:16 | 显示全部楼层
不太懂,留下来慢慢看

出0入0汤圆

发表于 2010-11-19 08:21:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-19 09:11:25 | 显示全部楼层
看门狗吧

出0入0汤圆

发表于 2010-11-19 09:12:49 | 显示全部楼层
看门狗方式我理解;
void (*reset)(void) = 0x0000;这个函数的作用是什么
哪位大侠解释一下

出0入0汤圆

发表于 2010-11-19 09:18:40 | 显示全部楼层
回复【31楼】cool33777612  
-----------------------------------------------------------------------
定义一个名字为reset的函数指针,返回类型void,无参数,并将这个函数指针的入口地址设置到0x0000。就是单片机rom的首地址

出0入0汤圆

发表于 2010-11-19 09:21:36 | 显示全部楼层
PC指针

出0入0汤圆

发表于 2010-11-19 09:25:27 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2010-11-20 23:53:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-21 23:27:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-21 23:51:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-9-12 14:28:58 | 显示全部楼层
草,大神真多,学到了。

出0入0汤圆

发表于 2014-9-14 16:14:52 | 显示全部楼层
我觉得也是用看门狗但是不要喂狗

出0入0汤圆

发表于 2014-9-15 12:40:03 | 显示全部楼层
感觉定义reset函数的最好用,受教了

出0入0汤圆

发表于 2014-9-15 14:17:47 | 显示全部楼层
看门狗   饿狗

出0入0汤圆

发表于 2014-9-15 18:05:41 | 显示全部楼层
外部时钟唤醒怎么样

出0入0汤圆

发表于 2014-9-15 19:32:19 | 显示全部楼层
看门狗是条捷径

出40入42汤圆

发表于 2014-9-15 19:55:23 | 显示全部楼层
学习了~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 10:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表