工具/软件: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 中编写卷积和不可维护的代码。