Thread 中讨论的其他器件:LAUNCHXL-F2800137
工具与软件:
您好!
我的代码有问题。
基于 universal_motor_control_lab 的代码。
在代码开头的 main 中、一些数据 RAM 被清除、例如:
HAL_clearDataRAM((void *)loadStart_est_data, (uint16_t)loadSize_est_data);
loadStart_est_data 和 loadSize_est_data 由链接器通过 cmd 文件定义:
est_data : > RAMLS0F,
LOAD_START(loadStart_est_data),
LOAD_END(loadEnd_est_data),
LOAD_SIZE(loadSize_est_data)
在 hal.h 中、声明如下:
extern uint32_t loadStart_est_data; extern uint32_t loadEnd_est_data; extern uint32_t loadSize_est_data;
我尝试将其复制到另一个 RAM 位置、但它不起作用、下面清除了一个不是预期数据段(它从地址0x00000000中清除、因此它清除了引导 ROM 代码写入的一些有用信息)。
问题来自:
HAL_clearDataRAM((void *)loadStart_sta_data, (uint16_t)loadSize_sta_data);
loadStart_sta_data 和 loadSize_sta_data 在 hal.h 中声明相同
在命令文件中,它有点不同:
.sectionRAM_DATA_safety : {sta_tests.obj(.data),
stl_sp.obj(.data),
ref_crc.obj(.data),
sta_tests.obj(.bss),
sta_user.obj(.bss),
//sta_util.obj(.data,.bss),
sta_motor_application.obj(.data,.bss)} > BASE_RAMLS0D_SAFETY_DATA,
LOAD_START(loadStart_sta_data),
LOAD_END(loadEnd_sta_data),
LOAD_SIZE(loadSize_sta_data)
通过使用调试器、我可以看到 loadStart_sta_data 和 loadSize_sta_data 的值是正确的(使用断点、当光标位于数据名称上方时) 、但一旦代码在 HAL_clearDataRAM 中执行((void *) loadStart_sta_data、(uint16_t) loadSize_sta_data);
void HAL_clearDataRAM(void *pMemory, uint16_t lengthMemory)
{
uint16_t *pMemoryStart;
uint16_t loopCount, loopLength;
pMemoryStart = pMemory;
loopLength = lengthMemory;
for(loopCount = 0; loopCount < loopLength; loopCount++)
{
*(pMemoryStart + loopCount) = 0x0000;
}
} //end of HAL_clearDataRAM() function
启动地址切换为零、这会导致问题。
我找不到该问题、我可以寻求帮助吗?
此致。