半主机模式和_MICROLIB 库 朴灿烈づ我的快乐病毒、 2023-06-01 06:15 20阅读 0赞 半主机是这么一种机制,它使得在ARM目标上跑的代码,如果主机电脑运行了调试器,那么该代码可以使用该主机电脑的输入输出设备。 这点非常重要,因为开发初期,可能开发者根本不知道该 ARM 器件上有什么输入输出设备,而半主基机制使得你不用知道ARM器件的外设,利用主机电脑的外设就可以实现输入输出调试。 所以要利用目标 ARM器件的输入输出设备,首先要关掉半主机机制。然后再将输入输出重定向到 ARM 器件上,如 printf 和 scanf,你需要重写 fputc和 fgetc 函数。下面就是将 scanf 和 printf 重定向到 uart 的代码。 int fputc(int ch, FILE \*f) \{ while (USART\_GetFlagStatus(USART1, USART\_FLAG\_TC) == RESET) \{ \} USART\_SendData(USART1, (uint8\_t) ch); return ch; \} int fgetc(FILE \*f) \{ int ch; while (USART\_GetFlagStatus(USART1, USART\_FLAG\_RXNE) == RESET) \{ \} ch = USART\_ReceiveData(USART1); while (USART\_GetFlagStatus(USART1, USART\_FLAG\_TC) == RESET) \{ \} USART\_SendData(USART1, (uint8\_t) ch); return ch; \} printf() 之类的函数,使用了半主机模式。使用标准库会导致程序无法运行 ,以下是解决方法 : 方法 1.使用微库 ,因为使用微库的话 ,不会使用半主机模式 . 如果使用的是 MDK,请在工程属性的 “Target “- 》”Code Generation “中勾选 ”Use MicroLIB “这样以后就可以 使用 printf ,sprintf 函数了 方法 2.仍然使用标准库 ,在主程序添加下面代码 : /\*为确保没有从 C 库链接使用半主机的函数,因为不使用半主机,标准 C 库 stdio.h 中有些使用半主机的 函数要重新写 ,您必须为这些函数提供自己的实现 \*/ \#pragma import(\_\_use\_no\_semihosting) // 确保没有从 C 库链接使用半主机的函数 \_sys\_exit(int x) //定义 \_sys\_exit() 以避免使用半主机模式 \{ x = x; \} struct \_\_FILE // 标准库需要的支持函数 \{ int handle; \}; /\* FILE is typedef ’ d in stdio.h. \*/ FILE \_\_stdout; 在独立应用程序中,您不太可能支持半主机操作。 因此,必须确保您的应用程序中没有链接 C 库半主机函数。 为确保没有从 C 库链接使用半主机的函数, 必须导入符号 \_\_use\_no\_semihosting 。可在您工程的任何 C 或汇编语言源文件中执行此操作,如下所示: 在 C 模块中,使用 \#pragma 指令: \#pragma import(\_\_use\_no\_semihosting) 在汇编语言模块中,使用 IMPORT 指令: IMPORT \_\_use\_no\_semihosting 如果仍然链接了使用半主机的函数,则链接器会报告错误。 ———————————————— 版权声明:本文为CSDN博主「Robben.Han」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hxlawf/article/details/89491088 转载于:https://www.cnblogs.com/jack-hzm/p/11464816.html
相关 Java设计模式:半透明装饰模式 通常的装饰模式是透明装饰模式。本文写一个半透明装饰模式。 / 一个通用的抽象批条模型。 @author zhangfly 左手的ㄟ右手/ 2023年11月17日 06:12/ 0 赞/ 226 阅读
相关 半主机模式和_MICROLIB 库 半主机是这么一种机制,它使得在ARM目标上跑的代码,如果主机电脑运行了调试器,那么该代码可以使用该主机电脑的输入输出设备。 这点非常重要,因为开发初期,可能开发者根本不知道 朴灿烈づ我的快乐病毒、/ 2023年06月01日 06:15/ 0 赞/ 21 阅读
相关 MicroLib微库和ARM标准C库有什么区别? 关注+星标公众号,不错过精彩内容 ![f6b881535dfbc63dd205136693f72b6a.gif][] 作者 | strongerHuang 微信公众号 | 叁歲伎倆/ 2022年10月15日 05:48/ 0 赞/ 30 阅读
相关 TCP半工作模式 TCP连接有两种场景分别是半打开(Half-Open)连接和半关闭(Half-Close)连接。TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相 你的名字/ 2022年06月13日 09:59/ 0 赞/ 196 阅读
相关 设计模式 Concurrency 之 Half_Sync_Half_Async 半同步半异步模式 动机 应用场景 实现方案 1.动机 同步模式编程简单 但是IO的利用率低 异步模式编程复杂 但是IO利用率高 此模式综合了同步异步的 向右看齐/ 2022年06月10日 03:14/ 0 赞/ 210 阅读
相关 Keil中使用MicroLib,以及malloc The C Standard Library (stdlib.h) contains a number of useful and common tools, includin 待我称王封你为后i/ 2022年05月31日 02:08/ 0 赞/ 450 阅读
相关 Keil中的USE MicroLib说明 出处:[https://www.cnblogs.com/zyqgold/p/6114637.html][https_www.cnblogs.com_zyqgold_p_6114 忘是亡心i/ 2022年05月29日 09:15/ 0 赞/ 225 阅读
相关 半同步/半异步的并发模式 半同步/半异步的并发模式 [https://blog.csdn.net/zoomdy/article/details/89945156][https_blog.csdn. 末蓝、/ 2022年02月04日 16:39/ 0 赞/ 292 阅读
相关 RabbitMQ:多租户模式(虚拟主机和隔离)。 每一个RabbitMQ服务器都能创建虚拟消息服务器,我们称之为虚拟主机(vhost)。每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑 左手的ㄟ右手/ 2022年01月15日 19:35/ 0 赞/ 814 阅读
还没有评论,来说两句吧...