【发布时间】:2016-08-10 09:56:33
【问题描述】:
我在我的项目中将引导加载程序用作 hex 和 s19 文件,因此我不允许修改其内容。在此引导加载程序中,有一部分以以下方式实现,以验证我的应用程序是否为有效应用程序:
#define CHECK_PATTERN_ADDRESS ((int32)0x00020000)
#define VALID_PATTERN ((int16)0xE900)
#define VALID_PATTERN_MASK ((int16)0xFF00)
int16 pattern_data = *(int16 *)CHECK_PATTERN_ADDRESS;
if ((pattern_data & VALID_PATTERN_MASK) == VALID_PATTERN)
{
//Valid application
}
else
{
//Not Valid application
}
从上面的代码中,为了让引导加载程序认为我的应用程序有效,需要将有效模式放在提到的地址“0x00020000”中。
下载应用程序时,此模式直接加载到此地址。
这是通过使用包含此模式的程序集文件并通过链接器文件指定将其加载到内存中的地址来完成的。
因此,目前在我的应用程序下载过程中,有效模式已成功加载到提到的地址“0x00020000”中。
主要约束是:
引导加载程序应在此特定地址“0x00020000”中找到有效模式
问题是:
我需要在另一个地址“假设 0x00040000”中添加我的有效模式,而 DLL 将继续从请求的地址“0x00020000”中取消引用数据..
不过,我可以通过汇编文件将任何数据添加到原始地址“0x00020000”,或者直接将任何特定的十六进制数据添加到该地址。
问题是:
我可以在这个地址“0x00020000”中加载什么,这样当引导加载程序在其代码中“如上所述”使用它时,它将采用在另一个地址“0x00040000”中加载的值
【问题讨论】:
-
DLL?那是 Win32 的东西,不是嵌入式的,当然也与引导加载程序无关。特别是,DLL 运行在进程的地址空间中。而那些有虚拟地址空间。
-
是的,你写的是,我的意思是它被用作十六进制和 s19 文件..我没有任何修改它的代码的能力..我会在原始帖子中修改。 . 谢谢..
-
IOW,DLL 包含一个 S19/hex 文件,用于将某些东西刻录到 EPROM 或类似的东西中,或用于仿真器?
-
刻录到 EPROM .. 用于真实目标“MPC”
-
进入 EPROM 的内容,应该将地址
0x00020000的字节设置为0xE9(0x00020001的另一个字节可以设置为任何东西,在 big-endian 平台上.. 在 little-字节序是0x00020000被忽略的另一种方式,0x00020001必须有0xE9)。我不明白你在问什么,你在0x00040000中输入的任何内容都将在0x00040000中,除非某些指令加载该值并将其放入0x00020000(在主机平台上)。但是您可能不会要求这样做,您可能希望在将源数据刻录到 EPROM 之前对其进行修补?
标签: c++ c assembly embedded bootloader