从C重置Pic18

Cha*_*iga 3 embedded microchip pic

使用C代码重置Pic18的最佳方法是使用HiTech Pic18 C编译器

编辑:

我当前正在使用

void reset()
{
#asm 
  reset
#endasm
}
Run Code Online (Sandbox Code Playgroud)

但必须有一个更好的方法

MrZ*_*bra 7

编译器通常内置了自己的reset()函数,但它只是完成了函数的功能,实际名称可能因编译器而异.

你已经以最好的方式做到了.


小智 5

你的回答是我所知道的最好的方式.关键是你在函数调用中有汇编指令,它们都是自己的.编译器不会优化其中包含内联汇编的函数,因此如果将重置指令内联到一个非常大的函数,编译器将不会优化该函数中的任何代码.您可以通过将Reset置于其自己的函数中来避免这种情况.这个函数中的代码不会被优化,但是谁在乎,因为它是一个如此小的功能.


Eli*_*sky 2

这里有一个常见问题解答。

问:如何重置微控制器?

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

#asm ljmp 0x0000

#endasm

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

另一种方法是在芯片编程时设置看门狗定时器,并在整个代码中使用 CLRWDT() 指令。当您希望微控制器复位时,请停止清除看门狗位,微控制器将在大约 18 毫秒到 2 秒后复位,具体取决于预分频器。

  • 跳转到 0x0000 不会重置任何硬件外设。我会使用看门狗或重置汇编指令。 (9认同)