我们使用的是 Micrium 的 uC/OS-III RTOS。我们正在尝试在 RTOS 上返回 malloc 的值。当我们在 RTOS 启动之前执行 99999 的 malloc(对于 RAM 来说太多)时,我们会得到一个空指针,这正是我们所期望的。
当我们在 RTOS 启动和任务中执行相同的 malloc 时,我们不会得到空指针,这是我们不期望的。不过,系统此时确实冻结了。
有人对此有解释吗?
提前致谢
编辑:
信息:我们使用的是瑞萨电子的 RX62N 微控制器和 GNURX 编译器
该程序实际上并没有冻结。程序“认为”它得到了一个有用的指针(不是 NULL 指针),并继续运行。在某个时刻,程序将其程序计数器更改为 00000000 并停止。所以它不会进入异常,因此我们无法捕获它。
但是,在 RTOS 启动之前调用 malloc 和在 RTOS 启动时调用malloc时会有所不同。不同之处在于malloc的真正深层汇编代码。
在某一点上执行以下指令
CMP R1,R7
BGTU.B 0FFF802C0H
ADD R14,R7
当我们试图分配太多 RAM 时,BGTU.B指令不应分支,然后程序继续执行ADD指令。这在启动 RTOS 之前执行malloc时非常有效,但在我们之后执行时失败。
These are the values I get in several cases
Outside RTOS (allocable number: 10)
R1: 00008348
R7: 00000014
Outside RTOS (not allocable number: 9999)
R1: 00008348
R7: 00002718
Inside RTOS (allocable number: 10)
R1: FFFFF9D0
R7: 00000014
Inside RTOS (not allocable number: 9999)
R1: FFFFF9D0
R7: 00002718
我希望整个情况都很清楚,我试图尽可能地解释它:P
提前致谢