- 主题:请教一个C51编程的问题!
如下,我打算用函数指针调用内存代码:
U8 lcall_mem[10];
void (far *lcall_code)();
void test()
{
lcall_mem[0]= 0x22; // C51的RET指令机器代码
lcall_code = (void (far *)())lcall_mem;
lcall_code();
}
按理说以上这段话就相当于调用了一个空函数,然后正常返回,然而我的代码实际编译运行的时候却直接崩溃,
甚至根本没有调用这个test函数也是如此,这是什么原因?
--
FROM 111.9.5.*
唉,不过还是谢谢!
我的本意,就是在内存里存放可执行代码,以便随时下载修改,放在代码区就没意义了。
【 在 pinocchio 的大作中提到: 】
: 没学过C51,问了一下ChatGPT,回答如下。
: 你的代码看起来像是尝试在C51环境下通过函数指针调用内存中的机器码指令。这个代码崩溃的原因可能有以下几个方面:
: 1. **内存区域问题**:
: ...................
--
FROM 111.9.5.*
按你的办法试过了,确实不行。
我就是不调用这个函数,只要编译到代码里,程序还是会崩,看来是编译器不支持。
不过还是很感谢你帮我查资料!
【 在 pinocchio 的大作中提到: 】
: 根据你的要求又追问了一下,回答如下。
: 为了在C51环境下实现动态执行内存中的代码,我们需要绕过一些C51体系结构和编译器的限制。直接在数据存储区执行代码可能是不被支持的。但是,可以通过以下方法尝试实现你的目标:
: 1. **使用RAM执行代码(非标准方法)**:
: ...................
--
修改:moonwalker FROM 111.9.5.*
FROM 111.9.5.*