当前位置:网站首页>STM32 printf问题总结 semihosting microLIB理解
STM32 printf问题总结 semihosting microLIB理解
2022-07-29 05:23:00 【BobBobBao】
STM32使用printf问题总结
背景:使用STM32F4开发板串口时,想用c语言自带的printf函数把字符串输出到串口调试助手。
- 首先需要重定义fputc()、fgetc()函数
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口DEBUG_USART */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
int ch;
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
勾选options for Target–>Target–>Use MicroLIB,使用MicroLIB库。
-microLIB 是标准C库的一个备选库,用于极少内存的嵌入式硬件中。
-microLIB不支持标准库
-主要完成以下工作:
-创建一个可执行C程序的环境:创建一个堆栈、创建一个堆(如果需要)、初始化程序用到的库
-调用main()开始执行半主机(semi-hosting):它是一种机制,使得运行在ARM目标机上的代码能够通信,并使用运行了调试器的主机上的Input/Output工具
-开发初期,开发者可能根本不知道该ARM器件上有什么输入输出设备,而半主机机制使得开发者不用知道ARM器件的外设,利用主机电脑的外设就可以实现输入输出调试。
-如果要使用ARM器件上的输入、输出设备,首先要关闭semihosting。然后再将输入输出重定向到ARM器件上。
-microLIB 编译时通过Low-Level Functions与硬件连接,采用删减版high-level functions,没用system I/O functions。如果不使用microLIB库,而使用标准库(默认使用semihosting),调用printf()之类的函数,会导致死机。解决方法:
-在程序中添加编译设置,不使用semihosting
//C语言中
#pragma import(__use_no_semihosting_swi)
//汇编语言中
IMPORT __use_no_semihosting_swi
参考:
边栏推荐
- CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器
- ML4自学笔记
- QT学习笔记-QtSQL
- Hal library learning notes - 8 use of serial communication
- NFC双向通讯13.56MHZ非接触式阅读器芯片--Si512替代PN512
- Si12T和Si14T低功耗电容触摸芯片
- 迁移学习—Geodesic Flow Kernel for Unsupervised Domain Adaptation
- HAL库学习笔记-14 ADC和DAC
- 1、 What is the difference between transfer learning and fine tuning?
- How to perform POC in depth with full flash distribution?
猜你喜欢
1、 What is the difference between transfer learning and fine tuning?
避坑:关于两个HC-05主从一体蓝牙模块互连,连不上问题
4、 Application of one hot and loss function
Hal library learning notes-13 application of I2C and SPI
ML11-SKlearn实现支持向量机
充电桩应用方案
基于msp430f2491的proteus仿真
六、基于深度学习关键点的指针式表计识别
Transformer review + understanding
HAL库学习笔记-14 ADC和DAC
随机推荐
How to perform POC in depth with full flash distribution?
TLE5012b+STM32F103C8T6(bluepill)读取角度数据
DP1332E 多协议高度集成非接触式读写芯片
智能温度控制系统
arduino uno错误分析avrdude: stk500_recv(): programmer is not responding
基于DAC0832的直流电机控制系统
Dust and noise monitoring system
Jianzhi core taocloud full flash SDS helps build high-performance cloud services
迁移学习笔记——Adapting Component Analysis
SimpleFOC调参2-速度、位置控制
DP4301—SUB-1G高集成度无线收发芯片
3、 How to read video?
How to use the pre training language model
FT232替代GP232RL USB-RS232转换器芯片国产化应用
华为云14天鸿蒙设备开发-Day3内核开发
3、 How to customize data sets?
【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议
基于STM32:情侣互动玩偶(设计方案+源码+3D图纸+AD电路)
Low rank transfer subspace learning
1、 Usage of common loss function