4

对于 ARM 架构,我们使用指令进行系统调用。SVC我的参考是以下ARM 的什么是半主机?. 特别是,选择任何版本,选择 Arm Compiler Toolchain Developing Software ...,然后选择 Semihosting,以查看可用的系统调用号。

想要定义一个保留in 寄存器的getChar()例程。根据文档,调用时必须为 0,退出后包含读取的字符。因此有人认为,charr0r1r0

mov r1,#0
mov r0,#7
svc 123456

应该是必不可少的成分。但是,程序不等待输入。我也可以肯定地说,寄存器r0在退出后总是包含值 0。有什么想法吗?我怀疑问题在于理解控制台在文档中的含义。

4

1 回答 1

3

来自 qemu 1.4.0 源:(文件target-arm/arm-semi.c,第 303-305 行)

case TARGET_SYS_READC:
   /* XXX: Read from debug console. Not implemented.  */
    return 0;

如果您真的想使用 qemu 的半主机模式并从“控制台”读取,我建议您使用 SYS_READ 的缓冲区大小为 1。

于 2013-04-15T10:48:08.640 回答