【发布时间】:2020-01-23 09:24:09
【问题描述】:
我想测试我为嵌入式系统编写的异常处理函数,并想编写一个测试代码来注入对被禁止的内存的访问。
void Test_Mem_exception
{
__asm(
"LDR R0, =0xA0100000\n\t"
"MOV R1, 0x77777777\n\t"
"STR R1, [R0,#0]"
);
这是我要在 0xA010000 处写入访问内存位置的代码。不知何故,这对我来说似乎不是通用的测试代码。
是否有用 C 或 C++ 编写此类测试代码的标准方法。通用我的意思是一个独立于它运行的系统的内存映射的代码。
【问题讨论】:
-
硬件异常是特定于体系结构的,可移植的 C 代码将在任何平台上生成异常是不可行的。这也是不必要的,您只需为感兴趣的平台编写一个适当的测试。
-
...“对于每个感兴趣的平台”我的意思是。
-
一种可能性是在整个地址范围内简单地迭代
volatile指针并取消引用它。如果任何地址无效并且此类无效访问将产生异常,那么您最终会命中它。如果您以 1K 或 4K 甚至更大的步长进行迭代并加快迭代速度,它可能仍然可以工作(它完全可以工作)。如果您还错位了地址,在某些平台上它会立即生成异常 - 尽管可能与您的预期不同。