STM32半主机模式
在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半主机模式相关推荐
- Stm32:半主机模式
一.什么是半主机模式? 简单的说,就是我们嵌入式程序中,类似printf的接口是会与我们PC进行通讯,以方便我们借助我们调试板的仿真器在PC上用开发工具进行调试. 二.为什么要禁用半主机模式? 在嵌入 ...
- STM32 printf半主机模式
转自http://www.stmcu.org/module/forum/thread-598294-1-1.html 看了原子哥的usart部分printf函数重定向的问题,自己动手试了试,单片机可以 ...
- STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发
modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...
- STM32输入捕获模式设置并用DMA接收数据
参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...
- mysql 半同步关闭_MySQL的半同步模式配置
1.什么是半同步? 在有一台主服务器.多台从服务器的情况下,主服务器只会等待一台从服务器同步数据. 2.为什么要使用半同步? 在使用同步模式时,数据的写速度太慢. 在使用异步模式时,可能会造成从服务器 ...
- 半同步半异步模式 -------一个架构模式,清晰的结构,高效并发的I/O
译者: cuichaox@gmail.com 英文原文: http://www.cs.wustl.edu/~schmidt/PDF/HS-HA.pdf http://www.cs.wustl.edu/ ...
- 使用STM32在SPI模式下读写SD卡
使用STM32在SPI模式下读写SD卡 代码分享 一.实验原理图 二.SD卡 三.实验操作 1.在stm32cubemx建立工程 2.根据上面的原理图连接硬件 3.keil编译和烧录 四.实验结果 总 ...
- 中级篇——虚拟机网络设置:桥接模式、NAT模式、仅主机模式3种网络模式讲解
简介 虚拟机中常见的三种网络模式:桥接模式.NAT模式.仅主机模式,各有什么特点?如何设置和选用,本篇文章带你详细了解 新名词 宿主机:虚拟机存放寄托的主机,比如在win10主机中安装了Linux的虚 ...
- STM32定时器溢出模式计时设置
STM32定时器溢出模式设置 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F10 ...
最新文章
- Java Class SecurityManager
- 【python教程入门学习】利用Python绘制关系网络图
- 学术论文常用英文句型
- ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来
- SUID + SGID + STICKY
- C++ 函数模板与分离编译模式
- vtk c++ 图像分割_医学图像分割-Attention Unet
- 车载系统华山论剑:Ali OS、Android、QNX孰优孰劣
- 在mtk6223的软t卡上实现对sdhc卡的读写
- 阳了之后,北京人纷纷化身段子手 !
- C++后端开发学习路线及推荐学习时间
- harbor离线包下载(百度网盘)
- 可能改变世界的13个“终结”(上)
- 国潮来袭 农产品变身国潮三大方式
- 新网(万网)账户间域名的转移
- Hibernate注解实现一对一关联
- 【ZCMU1600】卡斯丁狗要吃糖葫芦
- 前端的你平时都在哪找免费的可商业用的图片素材?
- 希尔伯特曲线的绘制c语言,[转载]希尔伯特曲线及其matlab画法
- 2021年,企业做好电商的六大关键点