STM32裸机编程指南-8
系列目录
- STM32裸机编程指南-1,存储和寄存器相关知识
- STM32裸机编程指南-2,更易读的外设寄存器编程
- STM32裸机编程指南-3,启动代码和向量表
- STM32裸机编程指南-4,Makefile构建自动化
- STM32裸机编程指南-5,闪烁LED
- STM32裸机编程指南-6,用SysTick中断实现闪烁
- STM32裸机编程指南-7,添加串口调试输出
- STM32裸机编程指南-8,重定向
printf()到串口 - STM32裸机编程指南-9,用Segger Ozone进行调试
- STM32裸机编程指南-10,供应商CMSIS头文件
- STM32裸机编程指南-11,配置时钟
- STM32裸机编程指南-12,带设备仪表盘的网络服务器
重定向printf()到串口
在这一节,我们将 uart_write_buf() 调用替换为 printf(),它使我们能够进行格式化输出,这样可以更好的输出诊断信息,实现了“打印样式的调试”。
我们使用的GNU ARM工具链除了包含GCC编译器和一些工具外,还包含了一个被称为newlib的C库,由红帽为嵌入式系统开发。
如果我们的固件调用了一个标准C库函数,比如 strcmp(),newlib就会被GCC链接器加到我们的固件中。
newlib实现了一些标准C函数,特别是文件输入输出操作,并且被实现的很随潮流:这些函数最终调用一组被称为 “syscalls” 的底层输入输出函数。
例如:
fopen()最终调用_open()fread()最终调用_read()fwrite(),fprintf(),printf()最终调用_write()malloc最终调用_sbrk(),等等