打印
[应用方案]

NUC123半主机功能实验

[复制链接]
2184|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Lkingz|  楼主 | 2015-7-22 20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前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和目标板相连),若没连接则通过串口输出;
沙发
598330983| | 2015-7-22 22:25 | 只看该作者
楼主的实验有助于大家的相关开发

使用特权

评论回复
板凳
734774645| | 2015-7-26 13:52 | 只看该作者
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就

使用特权

评论回复
地板
mintspring| | 2015-7-26 16:03 | 只看该作者
半主机实在没见过呀

使用特权

评论回复
5
mintspring| | 2015-7-29 23:39 | 只看该作者
半双工吗?不懂啊?也不解释

使用特权

评论回复
6
643757107| | 2015-7-30 11:05 | 只看该作者
是作为主机控制什么?

使用特权

评论回复
7
天灵灵地灵灵| | 2015-7-30 14:14 | 只看该作者
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺方便,唯一条件就是目标板要通过nu link和IDE连接着。楼主好方法。

使用特权

评论回复
8
Lkingz|  楼主 | 2015-12-30 11:35 | 只看该作者
643757107 发表于 2015-7-30 11:05
是作为主机控制什么?

其实为什么叫半主机,我也不是很明白,百科了下,也还是不明白为什么这样就叫半主机。
半主机定义如下:
半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。 例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。
这种机制很有用,因为开发时使用的硬件通常没有最终系统的所有输入和输出设备。 半主机可让主机来提供这些设备。
半主机是通过一组定义好的软件指令(如 SVC)来实现的,这些指令通过程序控制生成异常。 应用程序调用相应的半主机调用,然后调试代理处理该异常。 调试代理提供与主机之间的必需通信。

使用特权

评论回复
9
Lkingz|  楼主 | 2015-12-30 11:35 | 只看该作者
643757107 发表于 2015-7-30 11:05
是作为主机控制什么?

不是吧,其实就是没有串口,但又想使用串口接收和打印功能,

使用特权

评论回复
10
500days| | 2016-1-3 20:59 | 只看该作者
不太明白这里面讲的半主机是什么意思啊

使用特权

评论回复
11
Lkingz|  楼主 | 2016-1-5 09:44 | 只看该作者
500days 发表于 2016-1-3 20:59
不太明白这里面讲的半主机是什么意思啊

暂时可以只知道其功能,在开发调试中有时还是挺有用的

使用特权

评论回复
12
mintspring| | 2016-1-5 21:13 | 只看该作者
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺方便,唯一条件就是目标板要通过nu link和IDE连接着。

使用特权

评论回复
13
dongnanxibei| | 2016-1-5 22:41 | 只看该作者
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺方便,唯一条件就是目标板要通过nu link和IDE连接着。
这一句就算配置那个getchar的吗?

使用特权

评论回复
14
zhuotuzi| | 2016-1-5 23:00 | 只看该作者
使用UART的功能,需要在MDK里配置好,这样软件会自动给程序增加对应的库。

使用特权

评论回复
15
643757107| | 2016-1-8 17:49 | 只看该作者
半主机就是个称呼,就是通过编译器的功能启用了串口,直接调用了库函数,不必再去写了。

使用特权

评论回复
16
yiyigirl2014| | 2016-1-8 21:14 | 只看该作者
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺方便,唯一条件就是目标板要通过nu link和IDE连接着

使用特权

评论回复
17
Lkingz|  楼主 | 2016-4-19 17:44 | 只看该作者
dongnanxibei 发表于 2016-1-5 22:41
打开宏DEBUG_ENABLE_SEMIHOST = 1,MDK中打开view->serial windows UART#1就可以实现打印和发送数据了,挺 ...

是的

使用特权

评论回复
18
dongnanxibei| | 2016-4-25 15:45 | 只看该作者
好好学习这个串口,真有用,又来看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

27

帖子

1

粉丝