之前stm32也看到过半主机的资料,一直不太理解,也没去实验过,今天看到NUC123 demo code中有半主机,学习实验了下,
所谓半主机,其实是为了在连串口也没有的情况下,可以利用调试器实现printf,scanf,getch等C标准函数,
即可以像如下这样没有进行任何初始化就可以使用printf,完全同在PC上开发C一样:
#include <stdio.h>
int32_t main()
{
int8_t item;
printf("\n Start SEMIHOST test: \n");
while(1)
{
item = getchar();
printf("%c\n", item);
}
}
具体使用:打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺方便,唯一条件就是目标板要通过nu link和IDE连接着。
今天测试来看,感觉打印速度比使用串口(115200)速度还要快,具体速度多少还不清楚,有测试过的朋友不防分享下结果。搜了本坛里mo51等也有半主机的帖子
实验工程:
NUC123SeriesBSP_CMSIS_V3.00.003\SampleCode\Semihost\KEIL\Semihost.uvproj
注:若同时开了此宏又正常初始化了打印串口,在retarget.c fputc底层接口中会先判断是否连接着ICE(PC IDE 通过 nu link me和目标板相连),若没连接则通过串口输出; |