半主机机制指南

概述

半主机机制使运行在 ARM、RISC-V 和 Xtensa 目标上的代码能够与运行调试器或仿真器的主机通信,并使用主机的输入/输出功能。

有关可用功能的更完整文档,请参阅 ARM Github documentation 。

RISC-V 的功能借鉴了 ARM 的定义,详见 RISC-V Github documentation 。

Xtensa 上的半主机机制实现支持 GDB File-I/O 扩展,详见 GDB File-I/O Remote Protocol 。

文件操作

半主机机制允许应用打开、读取和修改主机上的文件。当需要使用超出仿真平台 ROM 容量的数据集来验证代码行为时,此功能很有用。文件路径可以是绝对路径,也可以是相对于运行进程所在目录的相对路径。

const char *path = "./data.bin";
long file_len, bytes_read, fd;
uint8_t buffer[16];

/* Open the data file for reading */
fd = semihost_open(path, SEMIHOST_OPEN_RB);
if (fd < 0) {
   return -ENOENT;
}
/* Read all data from the file */
file_len = semihost_flen(fd);
while(file_len > 0) {
   bytes_read = semihost_read(fd, buffer, MIN(file_len, sizeof(buffer)));
   if (bytes_read < 0) {
      break;
   }
   /* Process read data */
   do_data_processing(buffer, bytes_read);
   /* Update remaining length */
   file_len -= bytes_read;
}
/* Close the file */
semihost_close(fd);

附加功能

通过 semihost_exec() 直接执行 semihost_instr 中定义的半主机指令之一,可以使用附加功能。有关所需参数和返回码的完整文档,请参阅 ARM Github documentation 。

API 参考

Semihosting APIs