当前位置: 首页 > news >正文

天河区门户网站官网浙江舟山城乡建设网站

天河区门户网站官网,浙江舟山城乡建设网站,三亚百度推广公司,商标图案大全图片嵌入式_GD32使用宏开关进行Debug串口打印调试 串口Debug是一种将数据通过串口发送的方法。通过使用printf函数#xff0c;我们可以将需要发送的数据格式化为字符串#xff0c;并通过串口发送出去。在C语言中#xff0c;通常使用串口发送数据的函数为printf函数#xff0c;…嵌入式_GD32使用宏开关进行Debug串口打印调试 串口Debug是一种将数据通过串口发送的方法。通过使用printf函数我们可以将需要发送的数据格式化为字符串并通过串口发送出去。在C语言中通常使用串口发送数据的函数为printf函数但是需要将标准输出重定向到串口。 文章目录 嵌入式_GD32使用宏开关进行Debug串口打印调试前言一、什么是printf/fputc重定向二、配置步骤1.串口配置2.宏开关 三、注意事项1.关闭半主机模式2.输出十六进制数据 总结 前言 本文详细的介绍了如何重定向printf输出到串口输出的多种方法包括调用MDK微库MicroLib的方法调用标准库的方法以及适用于 GNUC 系列编译器的方法。 注本项目基于GD32F103CBT6硬件平台 使用标准库GD32F10x_Firmware_Library_V2.2.4 一、什么是printf/fputc重定向 printf 函数可以输出各种类型的数据使用格式控制输出各种长度的字符甚至输出各种各样的图案。因此在程序出错的时候懒得调试直接简单粗暴的加个 printf 找bug有时候也不失为一种有效的方法。 printf 作为变参函数参数由右向左以此进入函数 定义在 stdio.h 头文件中如下 int printf(const char *format, ...);printf 函数根据 format 字符串给出的格式打印输出到 stdout标准输出中当然printf 函数是不会一个字符一个字符去输出它会调用更底层的 I/O 函数fputc去逐个字符打印。 fputc 也定义于头文件 stdio.h中如下 int fputc(int ch, FILE *stream);我们要做的实际是对fputc进行定向将它重定义到为串口输出这样使用printf时就相当于直接通过串口输出了。 二、配置步骤 1.串口配置 1.首先需要对输出串口进行配置使用有效的串口外设是第一步保证硬件连接没有问题 2.串口外设软件驱动配置包括GPIO、串口时钟串口波特率时钟等 3.MDK需要勾选使用MicroLIB库 4.fputc函数重定向的串口没发送一个字符都会调用此函数。 int fputc(int ch, FILE *f) {/* Loop until transmit data register is empty */while(usart_flag_get(USART0,USART_FLAG_TBE) RESET){}/* Place your implementation of fputc here */usart_data_transmit(USART0,(uint8_t)ch );//SEGGER_RTT_PutChar(0, ch);return ch; }串口打印需要耗费不少时间为了增加效率可直接使用寄存器操作 至此可以直接使用Printf“hello world\n”串口会直接输出 2.宏开关 使用宏开关的好处就是在不需要串口打印或者软件调试完成需要交付的时可以直接通过定义SYSTEM_SUPPORT_DEBUG宏作为开关来确定串口打印与否直接使用Debug输输出Debug(“hello world!\n”) #ifdef SYSTEM_SUPPORT_DEBUG#define Debug printf #else#define Debug(...) do{ }while(0) #endif三、注意事项 1.关闭半主机模式 printf 函数使用了半主机模式所以直接使用标准库会导致程序无法运行因此必须提前告知编译器不使用半主机模式 这条语句可以关闭半主机模式只需要在任意一个C文件中加入即可。 /* 告知连接器不从C库链接使用半主机的函数 */ #pragma import(__use_no_semihosting)/* 定义 _sys_exit() 以避免使用半主机模式 */ void _sys_exit(int x) {x x; }#if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x x; } /* */ int fputc(int ch, FILE *f) {/* Loop until transmit data register is empty */while(usart_flag_get(USART0,USART_FLAG_TBE) RESET){}/* Place your implementation of fputc here */usart_data_transmit(USART0,(uint8_t)ch );//SEGGER_RTT_PutChar(0, ch);return ch; }#endif在嵌入式的编程中你是避免不了使用printf、fopen、fclose等函数的但是因为嵌入式的程序中并没有对这些函数的底层实现使得设备运行时会进入软件中断BAEB这时就需要__use_no_semihosting_swi这 个声明使程序遇到这些文件操作函数时不停在此中断处。MDK上开启半主机模式-需要SWO线换言之需要使用JTAG接线而我们程序模式开启的半主机模式所以我们需要禁止半主机模式。当目标板脱离仿真器jlink/ulink单独运行时不能使用半主机模式。否则进入软件中断BAEB处无法再执行下去。 2.输出十六进制数据 当需要打印输出多个十六进制数据和字符数字据时串口调试助手窗口的数据会非常难分辨要么全是字符要么全是十六进制所以多个十六进制数据需要单独打印输出。 代码如下示例 void Print_Hex(uint8_t len,uint8_t *HexArray) {uint8_t i0;Debug( \r\n);for(i 0;i len;i){Debug(%02x ,HexArray[i]);}Debug( \r\n); }总结 这就是嵌入式中使用Debug串口调试的方法有些语句是直接引用其他博主在此谢过欢迎指正
http://www.dnsts.com.cn/news/98164.html

相关文章:

  • 网站 设计要求wordpress分类页获取分类名称
  • 做网站推广广告公众号运营收费标准
  • 网站建设公司话术移动网站建设口碑好
  • 禁止浏览器访问一个网站怎么做微信做模板下载网站有哪些
  • 中国建设监理业协会网站珠海美容网站建设
  • 东莞做网站公司有哪些实惠的网站建设产品
  • 网站开发用电脑配置株洲建设企业网站
  • 网站建设哪个语言好全球购物官方网站有哪些
  • 移动端网站如何开发北京百度公司地址在哪里
  • 企业网站建设哪家好网页设计专业
  • 做企业网站用哪个cms《动画造型设计》
  • 淘宝上做网站行吗一个网站多大空间
  • 海安县建设局网站亿速云官网
  • 网站备案后可以修改吗重庆网站推广外包企业
  • 网站推广免费 优帮云好网站的建设标准
  • 网站备案幕布照片ps吴江规划建设局网站
  • 成都网站建设定制开发服务智能城市 电子商务网站建设
  • 物流网站给做软件淄博网站排名
  • 广西住房城乡建设厅网站首页线上卖护肤品营销方法
  • 太仓市建设局网站卖货平台有什么软件呢
  • 网站开发的思维导图德江网站建设
  • 高端网站建设怎么报名如果自己弄网站
  • 百度站长社区怎样做电商卖货
  • 网站建设技巧企业解决方案怎么写
  • 知乎seo优化拼多多标题优化软件
  • wordpress评论自定义昆明seo网站管理
  • 自己做的网站如何加视频网站可以做视频链接
  • 东营网站建设预算价格wordpress熊掌号百度自动提交
  • flash教程网站首页网站建设中图标
  • 设计师网站设计漳州专业网站建设公司