我正在使用 Codewarrior 8.3(IDE 版本 5.9)对 56f8367 DSC 进行编程。
我正在使用受人尊敬的第三方软件,所以我想他们知道自己在做什么并且不想过多地弄乱他们的代码,但是他们正在玩弄传递 void * 参数,这是我不完全熟悉的东西和。
所以我有这个功能:
static void T_CALLBACK _transmit(
void *pContext,
TX_DATA *pTxDescriptor)
{
CONTEXT *pLinkContext = (CONTEXT *)pContext;
...
}
这是通过函数指针调用的。当我在这个函数调用之前停止处理器时,我可以看到 pContext 指向的地址是 0x1000,但是在这里转换之后,pLinkContext 指向的地址是 0x0800。这显然会导致问题,因为我们从内存的不同部分开始写入和读取。
字节寻址/对齐发生了一些奇怪的事情,它被“移位”超过 1 位。我知道出了什么问题,我只是不明白为什么,或者更重要的是,如何解决问题。
我应该寻找什么?
(编辑以添加每个评论请求的调用) - 不过,我不确定考虑到所有内容都隐藏在结构中并通过函数指针调用,这将有多大帮助。我可以说“pTprtContext->tmw.pChannel->pLinkContext”与 CONTEXT 的类型不同,pLinkContext 确实与 CONTEXT 的开头匹配,所以我认为他们只是试图将其插入其中。
static void T_LOCAL _transmitNextFrame(
D_CONTEXT *pTprtContext)
{
...
/* Transmit frame */
pTprtContext->t.pChannel->pLink->pLinkTransmit(
pTprtContext->t.pChannel->pLinkContext, &pTprtContext->linkTxDescriptor);
}