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

编辑:

我当前正在使用

void reset()
{
#asm 
  reset
#endasm
}

但必须有更好的方式

有帮助吗?

解决方案

这里有常见问题解答

问:如何重置微型?

  

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

     

#asm ljmp 0x0000

     

#endasm指令

     

使用起来非常安全,即使在使用时也是如此   在中断或   程序。 PIC 16x系列微处理器   有8个堆栈级别。每一次   调用过程,一个堆栈级别   用于返回地址。它   是一个循环缓冲区,所以即使是   micro是7个程序级别的深度和   在复位时的中断中   叫,这是新的开始   堆栈缓冲区和微观意志   按照正常情况继续。

     

另一种方法是设置看门狗   芯片编程时的定时器,和   全部使用CLRWDT()指令   代码。当你想要微观时   复位,停止清除看门狗位   并且微观将在周围重置   18ms到2秒取决于   预分频器。

其他提示

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

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

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

除非编译器供应商的运行时库定义了库函数(如果这样的lib甚至存在于微控制器世界......但它应该存在),那么没有。 C本身肯定不会帮助你,做“重置”对于C来说,这远远不是一个特定于平台的问题。

我使用ccsinfo.com编译器,它有一个类似的API调用来重置PIC,但我认为编译器的解决方案会做正确的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top