首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中重置PIC18?

如何在C中重置PIC18?
EN

Stack Overflow用户
提问于 2008-10-17 23:44:54
回答 6查看 8.7K关注 0票数 3

在HiTech PIC18 C编译器中使用C代码重置Pic18的最佳方法是什么?

编辑:

我现在正在使用

代码语言:javascript
复制
void reset()
{
#asm 
  reset
#endasm
}

但肯定有更好的办法

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-17 18:51:25

有一个FAQ here

问:如何重置微处理器?

的一种方法是将所有变量重置为其默认值,如PIC手册中所列。然后,使用汇编语言跳到micro中的位置0x0000。

#asm ljmp 0x0000

#endasm

即使在中断或过程中调用,这也是非常安全的。PIC 16x系列micros具有8个堆栈级别。每次调用一个过程时,返回地址都会占用一个堆栈级别。它是一个循环缓冲区,因此,即使micro是7个程序级别深,并且在调用重置时处于中断状态,这也是堆栈缓冲区的新开始,并且micro将按正常方式继续。

另一种方法是在芯片编程时设置watchdog定时器,并在代码中始终使用CLRWDT()指令。当您想要重置微镜时,请停止清除看门狗位,微镜将在大约18ms至2秒后重置,具体取决于预分频器。

票数 2
EN

Stack Overflow用户

发布于 2008-10-20 15:43:32

编译器通常内置有自己的reset()函数,但它所做的正是您的函数所做的事情,并且实际名称可能因编译器而异。

你已经在以最好的方式去做了。

票数 8
EN

Stack Overflow用户

发布于 2009-07-29 18:45:10

你的回答是我所知道的最好的方式。关键是在函数调用中有汇编指令,这一切都是由它自己完成的。编译器不会优化其中包含内联程序集的函数,因此,如果将reset指令内联到一个非常大的函数中,编译器将不会优化该函数中的任何代码。您可以通过将Reset放入它自己的函数中来避免这种情况。这个函数中的代码不会被优化,但谁会关心呢,因为它是一个如此小的函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/212706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档