XC8 编译器:程序返回到 main() 的开头

XC8 compiler: program returning to beginning of main()

我是 PIC 微控制器编程的新手,我在编写一段代码时遇到了一些困难。在main()函数中,它设置了一些寄存器,然后进入一个无限循环。在这个while循环中,调用了第二个函数,这会产生延迟(没有调用任何其他函数,包括main()然后returns。但是,似乎当第二个函数结束时,程序返回到 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 或等效寄存器应该有助于辨别原因,还提供部件号和部件电压。一些可能的是: - 看门狗定时器跳闸, - 掉电保护跳闸, - 堆栈 over/underflow, - 您的代码跳转到 space(指针错误?), - 您的代码正在执行软件重置, - 你除以 0, - 其他...