工具/软件:Code Composer Studio
您好!
我遇到 for 循环问题、代码编译正常、但程序似乎忽略 for 语句。 如果我将"for (for)"更改为"while (while)"、代码将按预期运行。 导致此行为的原因可能是什么? 我缺少一些启用循环的设置?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好!
我遇到 for 循环问题、代码编译正常、但程序似乎忽略 for 语句。 如果我将"for (for)"更改为"while (while)"、代码将按预期运行。 导致此行为的原因可能是什么? 我缺少一些启用循环的设置?
if (ROM_SysCtlResetCauseGet ()& SYSCTL_CAUSE_WDOG0) { uint32_t pui32Data[1]; volatile uint16_t i; uint16_t j = 0; EEPROM_Init(); //均匀地使用 EEPROM (至少尝试一下) 对于(I = 0;I <= 6136;I += 4) { ROM_EEPROMRead (pui32Data、0x00 | I、sizeof (pui32Data)); if (pui32Data[0]= 0xFFFFFFFF) 中断; if (i ==6136) { ROM_EEPROMRead (pui32Data、0x17FC、sizeof (pui32Data)); if (pui32Data[0]= 0xFFFFFFFF) { pui32Data[0]= 0; ROM_EEPROMProgram (pui32Data、0x17FC、sizeof (pui32Data)); } j +=(I/4); pui32Data[0]+= j; I = 0; J = 0; EEPROMMassEras(); ROM_EEPROMProgram (pui32Data、0x17FC、sizeof (pui32Data)); 中断; } } pui32Data[0]= 0; ROM_EEPROMProgram (pui32Data、0x00 | I、sizeof (pui32Data)); ROM_EEPROMRead (pui32Data、0x17FC、sizeof (pui32Data)); if (pui32Data[0]!= 0xFFFFFFFF) { if (i ==0) I = 4; 其他 I +=4; I /= 4; j +=(i + pui32Data[0])-1; } 其他 { if (i ==0) I = 4; 其他 I +=4; I /= 4; j += i; } UARTprintf ("看门狗复位(WDOG_0)")。\n" "重置:%u\n\n"j); ROM_SysCtlResetCauseClear (SYSCTL_CAUSE_WDOG0); ROM_SysCtlPeripheralDisable (SYSCTL_Periph_EEPROM0); ROM_SysCtlPeripheralReset (SYSCTL_Periph_EEPROM0); }
有时候我会感觉很愚蠢,就像现在一样。 用一个词你可以解决所有问题(如果不是这个问题的话->";")。 从未考虑过优化是问题、而易失性可以解决这一问题。 感谢大家! 对于想 知道的人、优化级别设置为-opt_level=2 -opt_for_speed=5、代码是上面的代码。
最初我使用 goto,但他们说 goto 是邪恶的:p,所以我将代码更改为用于循环。
[引用 user="Helder Sales)]您刚才提到过,我意识到在这种情况下使用 goto 会使代码变小一些。 我通常使用、因为它易于实施。[/quot]
较短的源代码不一定意味着较短的目标代码。 现代编译器相当不错、因此不必再复杂。 清晰的结构化、自文档化代码不是编程指南的产物、而是负责的编码器的产物。
“goto”语句源于基本语言,最初允许“jump”到任何地方。 也许您可以挖掘一个旧的基本意大利面代码示例、了解它现在被冻结的原因。 但您也可以在 MISRA-C 中编写卷积和不可维护的代码。