题
使用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,但我认为编译器的解决方案会做正确的事情。