在keil中编程时常会遇到__use_no_semihosting_swi的警告,这时你就是进入了半主机模式。
在嵌入式的编程中你是避免不了使用printf、fopen、fclose等函数的但是因为嵌入式的程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:

#pragma import(__use_no_semihosting_swi)
#pragma import(_main_redirection)  const char __stdin_name[150];
const char __stdout_name[150];
const char __stderr_name[150];
typedef int FILEHANDLE;  //重写标准库函数,这时printf、fopen、fclose等文件操作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件操作函数
void _sys_exit(int status)
{  while(1);
}
FILEHANDLE _sys_open(const char *name, int openmode)
{  return 0;
}  int _sys_close(FILEHANDLE fh)
{  return 0;
}  int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{  return 0;
}  int _sys_read(FILEHANDLE fh, unsigned char*buf, unsigned len, int mode)
{  return 0;
}  int _sys_istty(FILEHANDLE fh)
{  return 0;
}  int _sys_seek(FILEHANDLE fh, long pos)
{  return 0;
}  int _sys_ensure(FILEHANDLE fh)
{  return 0;
}  long _sys_flen(FILEHANDLE fh)
{  return 0;
}  int _sys_tmpnam(char *name, int fileno, unsigned maxlength)
{  return 0;
}  void _ttywrch(int ch)
{
}<pre name="code" class="cpp">time_t time(time_t *t)
{  return 0;
}
int remove(const char *filename)
{  return 0;
}  char *_sys_command_string(char *cmd, int len)
{  return 0;
}  clock_t clock(void)
{  return 0;
}  

若出现如下编译错误:Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced,此时你只需重写_ttywrch 函数即可
可参照上上一个文章
MDK上开启半主机模式-需要SWO线(换言之,需要使用JTAG接线)

当目标板脱离仿真器(jlink/ulink)单独运行时,不能使用半主机模式

pragma import(__use_no_semihosting_swi)

这条语句可以关闭半主机模式,只需要在任意一个C文件中加入即可。

还有在使用keil编程的过程中还会遇到..\OBJ\USART.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
说的大概的意思就是关掉了半主机模式,但是函数__ttywrch被要求了,这时要把函数重写一遍,当然出现其他的函数被要求的时候,可以参考上面的函数进行编写,只要放到任意一个.c源文件之中即可。
**关于 microlib
microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。
**

STM32半主机模式相关推荐

  1. Stm32:半主机模式

    一.什么是半主机模式? 简单的说,就是我们嵌入式程序中,类似printf的接口是会与我们PC进行通讯,以方便我们借助我们调试板的仿真器在PC上用开发工具进行调试. 二.为什么要禁用半主机模式? 在嵌入 ...

  2. STM32 printf半主机模式

    转自http://www.stmcu.org/module/forum/thread-598294-1-1.html 看了原子哥的usart部分printf函数重定向的问题,自己动手试了试,单片机可以 ...

  3. STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发

    modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...

  4. STM32输入捕获模式设置并用DMA接收数据

    参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...

  5. mysql 半同步关闭_MySQL的半同步模式配置

    1.什么是半同步? 在有一台主服务器.多台从服务器的情况下,主服务器只会等待一台从服务器同步数据. 2.为什么要使用半同步? 在使用同步模式时,数据的写速度太慢. 在使用异步模式时,可能会造成从服务器 ...

  6. 半同步半异步模式 -------一个架构模式,清晰的结构,高效并发的I/O

    译者: cuichaox@gmail.com 英文原文: http://www.cs.wustl.edu/~schmidt/PDF/HS-HA.pdf http://www.cs.wustl.edu/ ...

  7. 使用STM32在SPI模式下读写SD卡

    使用STM32在SPI模式下读写SD卡 代码分享 一.实验原理图 二.SD卡 三.实验操作 1.在stm32cubemx建立工程 2.根据上面的原理图连接硬件 3.keil编译和烧录 四.实验结果 总 ...

  8. 中级篇——虚拟机网络设置:桥接模式、NAT模式、仅主机模式3种网络模式讲解

    简介 虚拟机中常见的三种网络模式:桥接模式.NAT模式.仅主机模式,各有什么特点?如何设置和选用,本篇文章带你详细了解 新名词 宿主机:虚拟机存放寄托的主机,比如在win10主机中安装了Linux的虚 ...

  9. STM32定时器溢出模式计时设置

    STM32定时器溢出模式设置 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F10 ...

最新文章

  1. Java Class SecurityManager
  2. 【python教程入门学习】利用Python绘制关系网络图
  3. 学术论文常用英文句型
  4. ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来
  5. SUID + SGID + STICKY
  6. C++ 函数模板与分离编译模式
  7. vtk c++ 图像分割_医学图像分割-Attention Unet
  8. 车载系统华山论剑:Ali OS、Android、QNX孰优孰劣
  9. 在mtk6223的软t卡上实现对sdhc卡的读写
  10. 阳了之后,北京人纷纷化身段子手 !
  11. C++后端开发学习路线及推荐学习时间
  12. harbor离线包下载(百度网盘)
  13. 可能改变世界的13个“终结”(上)
  14. 国潮来袭 农产品变身国潮三大方式
  15. 新网(万网)账户间域名的转移
  16. Hibernate注解实现一对一关联
  17. 【ZCMU1600】卡斯丁狗要吃糖葫芦
  18. 前端的你平时都在哪找免费的可商业用的图片素材?
  19. 希尔伯特曲线的绘制c语言,[转载]希尔伯特曲线及其matlab画法
  20. 2021年,企业做好电商的六大关键点

热门文章

  1. OSPF路由协议解释及特性介绍
  2. zoj - 1039 Number Game
  3. nyoj68三点顺序
  4. bootstrap全局css样式
  5. CS224n笔记二:word2vec
  6. MySQL如何查询两个日期之间的记录
  7. JAVA POI 应用系列(2)--读取Excel
  8. SQL Server 2008 允许远程链接 解决方法
  9. jQuery $.post $.ajax用法
  10. 拦截导弹 最长上升/下降子序列