c - XC8 编译器:程序返回到 main() 的开头
问题描述
我是 PIC 微控制器编程的新手,我在编写一段代码时遇到了一些困难。在main()
函数中,它设置了一些寄存器,然后进入一个无限的while循环。在这个 while 循环中,调用了第二个函数,这会产生延迟(没有调用任何其他函数,包括main()
then 返回。但是,似乎当第二个函数结束时,程序会回到顶部main()
,而不是继续while 循环。
编辑1:我做了更多的测试,但没有这个功能我仍然遇到问题,所以几乎可以肯定微控制器每隔一秒左右就会重置一次,原因不明。应该有一个寄存器告诉你重置的原因,所以我会看看。
编辑 2:这是一个非常基本的代码版本,其中 RC0 LED 每 2 秒短暂闪烁一次(它应该保持关闭)。
void main()
{
TRISC = 0x00;
PORTCbits.RC0 = 1;
OSCCON = 0b00000010;
TRISA = 0x00;
PORTA = 0x00;
while(1)
{
PORTCbits.RC0=0;
}
}
编辑 3:原来是看门狗定时器导致了复位,现在通过在循环中放置一个 CLRWDT() 来修复。
解决方案
可能有很多事情,检查 RCON 或等效寄存器应该有助于识别原因,还提供部件号和部件电压。一些可能的情况是: - 看门狗定时器跳闸, - 保护跳闸时掉电, - 堆栈上溢/下溢, - 您的代码跳入空间(错误指针?), - 您的代码正在执行软件重置, - 您的除以 0,- 其他...
推荐阅读
- azure - Azure App Service:具有三个容器的多容器应用程序(如何处理)
- java - 获取 java.net.SocketTimeoutException:在 AWS CodeBuild 期间连接超时
- python - 没有呈现响应的 Django 视图
- wordpress - 发送电子邮件时的 Wordpress 联系表格 7 falat 错误
- c++ - C++ 浮点数输出不正确
- scala - 增加工作人员数量时,对于一些小型数据集,Apache Spark 无法达到更好的速度
- c - 在结构中使用字符串或指向字符串的指针
- c# - 当我尝试更改要查看的文件夹时出现“System.NullReferenceException”
- ubuntu - Fail to exporting stata graph and table
- javascript - 计算有多少数组在数组中的第 n 位有值