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.

[参考译文] TI v20.2.5.LTS 优化器跳过比较

Guru**** 2342040 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1294995/ti-v20-2-5-lts-optimizer-skips-comparison

当对 Tivaware 的 EEPROM 运行编程示例并优化编译器时、它会跳过一些重要代码。

例如、在这个代码示例行22-27在调试时被跳转、变量 ui32EEPROMInit 根本未被初始化。:

uint32_t ui32EEPROMInit;
uint32_t pui32Data[2];
uint32_t pui32Read[2];
//
// Enable the EEPROM module.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
//
// Wait for the EEPROM module to be ready.
//
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0))
{
}
//
// Wait for the EEPROM Initialization to complete
//
ui32EEPROMInit = EEPROMInit();
//
// Check if the EEPROM Initialization returned an error
// and inform the application
//
if(ui32EEPROMInit != EEPROM_INIT_OK)
{
while(1)
{
}
}
//
// Program some data into the EEPROM at address 0x400.
//
pui32Data[0] = 0x12345678;
pui32Data[1] = 0x56789abc;
EEPROMProgram(pui32Data, 0x400, sizeof(pui32Data));
//
// Read it back.
//
EEPROMRead(pui32Read, 0x400, sizeof(pui32Read));

这里发生了什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您认为22-27之间的代码在您打开优化时会被编译器优化掉、但没有优化时、22-27也会被优化掉。 是这样吗? 您是否可以查看反汇编过程并确认执行第17行后、处理器继续执行第31行、而不执行 第22-27行之间的代码。 您可以在 DISASSEMBLY 窗口中使用单步执行来单步执行代码。 通常、如果打开优化、您可能会 看到代码在单步执行 C 代码时跳转。 这是正常的、因为优化后的代码不再行与符号匹配。 但是、如果您说代码完全没有了、那就需要回答另一个问题。 您确认意见后、我可以将您的问题转发给我们的编译器专家。 另外、由于本周是一个重大的美国公共假日、请预计响应会出现延迟。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速回答。 在反汇编中、仅变量不会被初始化、但会直接进行比较。 这就是调试器在单步中跳过它的原因。