主题中讨论的其他器件:C2000WARE
工程师好、
在 F28004x 上使用闪存 API ROM 库时、我目前面临一些问题。
我写了一个函数在微控制器上执行固件更新/闪存写入:
静态空 btlMsgHandler (uint16 * rx_msg、uint16 * tx_msg)
RX_msg 指向应写入闪存的 UINT16值的数组。 此数组在覆盖函数开始时在本地声明。
当程序运行并且调用 over卧 位函数时、该数组被压入堆栈指针位置处的堆栈、例如0x435。
在 fcn 内部、我调用运行良好的编程函数、但在执行后验证失败。
验证需要指向32位字的指针。 我通过将 Rx_msg 转换为 UINT32 *来生成此指针。
当阵列存储在奇数地址(实际上是0x435)上时、读取之前奇数地址和偶数地址中的值-然后验证将失败。
是否可以确保栈仅填充32位对齐、或者您是否有其他建议来解决此问题?
这是我的数组声明:
这是函数原型:
这是(拆分)函数:
这是超文本功能的结构:
在本例中、数组存储在0x435的堆栈上。
存储器内容:
0x434 - 0000
0x435 - 0001
0x436 - 0203
0x437 - 0405
…
将 DATA_Buffer_32设置为0x435时、比较数据值0x00010000验证失败、这意味着它从0x434和0x435读取。
是否可以确保第一个数据字放置在堆栈上的偶数(32位对齐)地址上?
此致、Chris