C嵌入式开发代码疑惑,求解

未知昵称 2017-12-05 04:46:51

typedef struct
{
U32 u32ApplicationVersion_Major;
U32 u32ApplicationVersion_Minor;
fpJumpHandler fpApplicationJumpHandler;
U32 u32BootApplicationStartAddress;
U32 u32BootApplicationAllocationSize;
U32 u32UserApplicationStartAddress;
U32 u32UserApplicationAllocationSize;
}TS_ApplicationData;


static Bool B_IsUserApplicationValid(void)
{
TS_ApplicationData* pCurrentApplicationData;
TS_ApplicationData* pUserApplicationData;
U32 u32DigestLocation;
Bool bUserApplicationValid = false;

/** Get Application header data*/
pCurrentApplicationData = P_GetApplicationData();

pUserApplicationData = (TS_ApplicationData*)(pCurrentApplicationData->u32UserApplicationStartAddress +
pCurrentApplicationData->u32UserApplicationAllocationSize - sizeof(TS_ApplicationFooter));

/** Check if Flash information in Application and Boot loader Matches */
if((pUserApplicationData->u32UserApplicationStartAddress == pCurrentApplicationData->u32UserApplicationStartAddress) &&
(pUserApplicationData->u32UserApplicationAllocationSize == pCurrentApplicationData->u32UserApplicationAllocationSize) &&
(pUserApplicationData->u32BootApplicationStartAddress == pCurrentApplicationData->u32BootApplicationStartAddress) &&
(pUserApplicationData->u32BootApplicationAllocationSize == pCurrentApplicationData->u32BootApplicationAllocationSize))
{
u32DigestLocation = pUserApplicationData->u32UserApplicationStartAddress +
pUserApplicationData->u32UserApplicationAllocationSize - sizeof(TS_SHA_Digest);

InitICM_Module();
CalculateICM(pUserApplicationData->u32UserApplicationStartAddress,
(pUserApplicationData->u32UserApplicationAllocationSize - sizeof(TS_SHA_Digest)), (U32*)u32SHA_1_Digest);

/** Check Integrity of User Application*/
if(!memcmp((const _PTR)u32DigestLocation, u32SHA_1_Digest, sizeof(u32SHA_1_Digest)))
{
/** Indicate User Application is valid*/
bUserApplicationValid = true;
}
else
{
/** Do Nothing */
}
}
else
{
/** Do Nothing */
}

return(bUserApplicationValid);
}



pCurrentApplicationData 怎么获取不到值?pUserApplicationData的值为什么是这个值?
...全文
412 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2017-12-06
  • 打赏
  • 举报
回复
不知道, 你要自己动脑筋想了

    pUserApplicationData = (TS_ApplicationData*)(pCurrentApplicationData->u32UserApplicationStartAddress +
        pCurrentApplicationData->u32UserApplicationAllocationSize - sizeof(TS_ApplicationFooter));
UserApplicationData现在指向0x47ff00,如果预期是和pCurrentApplicationData指向同一个地方的话,那就是你上面写的有问题 如果UserApplicationData指向0x47ff00,指向的是pCurrentApplicationData的一个副本的话,Watch里的值表明你这个副本没初始化或者没有copy pCurrentApplicationData
未知昵称 2017-12-06
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
引用
pCurrentApplicationData 怎么获取不到值?
可能是优化没了, 另外如果你的P_GetApplicationData()返回的指针是指向P_GetApplicationData()内部的一个局部变量的话会出问题的
引用
pUserApplicationData的值为什么是这个值?
预期pUserApplicationData值和pCurrentApplicationData一样? 逆向计算的话你的 sizeof(TS_ApplicationFooter)=0x100
你说的是对的,这是boot程序,后来我在app程序加上footer数据, if((pUserApplicationData->u32UserApplicationStartAddress == pCurrentApplicationData->u32UserApplicationStartAddress) && (pUserApplicationData->u32UserApplicationAllocationSize == pCurrentApplicationData->u32UserApplicationAllocationSize) && (pUserApplicationData->u32BootApplicationStartAddress == pCurrentApplicationData->u32BootApplicationStartAddress) && (pUserApplicationData->u32BootApplicationAllocationSize == pCurrentApplicationData->u32BootApplicationAllocationSize)) 这个值不知道判断出来是不是相等的,按照程序设计来说是要相等的。
dceacho 2017-12-05
  • 打赏
  • 举报
回复
引用
pCurrentApplicationData 怎么获取不到值?
可能是优化没了, 另外如果你的P_GetApplicationData()返回的指针是指向P_GetApplicationData()内部的一个局部变量的话会出问题的
引用
pUserApplicationData的值为什么是这个值?
预期pUserApplicationData值和pCurrentApplicationData一样? 逆向计算的话你的 sizeof(TS_ApplicationFooter)=0x100

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧