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

做网站南充为什么做网站必须要用域名

做网站南充,为什么做网站必须要用域名,涞水网站建设,你建立的网站使用了那些营销方法STM32 学习笔记:理解 my_printf 与 va_start 在嵌入式开发中,我们常常需要实现类似标准 C 中 printf 的调试输出功能。为了支持“任意数量参数”的传递,C 语言提供了对 可变参数(variable arguments) 的支持。其中&am…

STM32 学习笔记:理解 my_printfva_start

在嵌入式开发中,我们常常需要实现类似标准 C 中 printf 的调试输出功能。为了支持“任意数量参数”的传递,C 语言提供了对 可变参数(variable arguments) 的支持。其中,va_start 是这一机制中的核心宏之一。

以下我们将结合一个实际的自定义打印函数 my_printf,详细讲解其工作原理,并深入解析 va_start 在其中的作用。


一、函数介绍:my_printf

1. 函数声明

int my_printf(UART_HandleTypeDef *huart, const char *format, ...)
  • 参数说明

    • UART_HandleTypeDef *huart:指向 STM32 HAL 库中 UART 句柄结构体,用于指定使用的串口。
    • const char *format:格式化字符串,如 "Voltage: %.2f V"
    • ...:可变参数列表,表示可以传入任意多个附加参数。
  • 返回值

    • 返回格式化后字符串的长度(写入缓冲区的字符数)。

2. 局部变量声明

char buffer[512]; // 缓冲区,用于存储格式化后的字符串
va_list arg;      // 可变参数列表
int len;          // 字符串长度
  • buffer 是临时存储空间,防止直接操作堆栈;
  • argstdarg.h 提供的类型,用于访问可变参数;
  • len 用于记录最终写入缓冲区的字符数。

3. 初始化可变参数列表

va_start(arg, format);
  • 使用 va_start 宏初始化 arg,使其指向第一个可变参数;
  • format 是最后一个固定参数,用于定位后续参数的位置。

4. 格式化字符串

len = vsnprintf(buffer, sizeof(buffer), format, arg);
  • 使用 vsnprintf 将格式化字符串写入 buffer
  • 支持 %d, %s, %f 等占位符;
  • 防止缓冲区溢出,安全性高于 sprintf

5. 清理可变参数列表

va_end(arg);
  • 调用 va_end 结束对可变参数的访问;
  • 必须成对出现,否则可能导致未定义行为。

6. 通过 UART 发送数据

HAL_UART_Transmit(huart, (uint8_t *)buffer, (uint16_t)len, 0xFF);
  • 将格式化好的字符串通过串口发送到上位机(如串口助手);
  • 实现了“调试信息输出”的基础功能。

7. 返回值

return len;
  • 返回实际写入的字符数,可用于日志统计或错误处理。

二、关键宏 va_start 深度解析

1. va_start 的作用

va_start<stdarg.h> 头文件提供的宏,用于初始化可变参数列表。它告诉编译器从哪个位置开始读取可变参数。

void va_start(va_list ap, last_fixed_param);
  • apva_list 类型变量,用于遍历参数;
  • last_fixed_param:最后一个固定参数(即可变参数前的一个参数),用于定位起始位置。

2. 示例代码:手动实现一个可变参数函数

#include <stdio.h>
#include <stdarg.h>int my_sum(int count, ...) {va_list args;va_start(args, count); // 初始化 args,从 count 后的第一个参数开始int sum = 0;for (int i = 0; i < count; i++) {int num = va_arg(args, int); // 获取每个 int 参数sum += num;}va_end(args); // 清理资源return sum;
}int main() {printf("Sum: %d\n", my_sum(4, 10, 20, 30, 40)); // 输出:Sum: 100return 0;
}

✅ 本例展示了如何通过 va_start + va_arg 实现一个简单的求和函数。


三、va_startmy_printf 中的作用

1. 为什么需要 va_start

因为 my_printf 是一个可变参数函数(类似 printf),我们需要一种方式去获取 format 之后的所有参数。va_start 就是这个过程的关键步骤。

2. va_start 在代码中的流程:

va_start(arg, format); // 初始化 args,指向第一个可变参数
len = vsnprintf(buffer, sizeof(buffer), format, arg); // 把参数格式化进 buffer
va_end(arg); // 清理资源
  • arg 会被 vsnprintf 使用,自动解析所有参数;
  • 如果不调用 va_startvsnprintf 将无法正确识别参数。

四、完整流程总结

步骤描述
1. 接收参数包括 UART 句柄、格式化字符串和可变参数
2. 初始化缓冲区和可变参数声明 bufferarg,并调用 va_start
3. 格式化字符串使用 vsnprintf 安全地格式化为字符串
4. 清理可变参数调用 va_end 释放资源
5. 通过 UART 发送数据使用 HAL_UART_Transmit 发送到串口
6. 返回结果返回格式化后的字符数

文章转载自:

http://wD9pK8Qd.mhcys.cn
http://kEt7O8A4.mhcys.cn
http://NTAoSIuY.mhcys.cn
http://lpRLPQWy.mhcys.cn
http://Nj60oWUb.mhcys.cn
http://qQTNUuq7.mhcys.cn
http://3B2SmUIP.mhcys.cn
http://CilnBVMd.mhcys.cn
http://zM2YBuIW.mhcys.cn
http://xdKQz1Lh.mhcys.cn
http://MAFps9GS.mhcys.cn
http://3ipR6XB7.mhcys.cn
http://jpR2qZmy.mhcys.cn
http://zSt1ANQz.mhcys.cn
http://TEXxasbe.mhcys.cn
http://QdwCvEaV.mhcys.cn
http://46RSzQqG.mhcys.cn
http://g2G5s5IO.mhcys.cn
http://aDJkJT6A.mhcys.cn
http://JVB2JeI9.mhcys.cn
http://fPtPDsYN.mhcys.cn
http://9Oxc11h6.mhcys.cn
http://XMA3hwHb.mhcys.cn
http://6Szm5zGo.mhcys.cn
http://6EpimMzM.mhcys.cn
http://5lLVTgIi.mhcys.cn
http://OLFRZqit.mhcys.cn
http://Ng7VFNca.mhcys.cn
http://1xzsYSZP.mhcys.cn
http://m8g4RJlA.mhcys.cn
http://www.dtcms.com/wzjs/688447.html

相关文章:

  • 区块链 网站 怎么做软件开发公司优势
  • 游戏公司做网站网站域名查询官网
  • 镇江市建设工程网站军队采购网
  • 做女装网站应怎么定位自媒体营销平台
  • 网络销售平台推广seo 能提高网站速度吗
  • 网站开发杭州平面广告设计培训招生
  • 贵阳市建设管理信息网站微信兼职平台网站开发
  • 邢台物流网站建设网站多少页面合适
  • 扁平化设计风格的网站wordpress 安装百度统计
  • 自己网站怎么做百度推广福州专业网站营销
  • 丰都网站建设费用中国建设银行网站设计评价
  • 新乡网站建设求职简历怎样卸载下载的wordpress
  • 乐清女孩网站优化电话
  • 国外公司做中国网站中国移动网站备案管理系统
  • 网站推广究竟应该怎么做舟山网站建设
  • 购物网站设计的目的淄博市住房和城乡建设局官方网站
  • 陵水网站建设哪家专业网站asp设计作品
  • 如何在网站上做飘窗链接西安网站群建设
  • 网站开发三剑客百度官网推广平台
  • 网站设计摘要 优帮云友情链接实例
  • 经营网站备案信息wordpress主题少儿教育类
  • 有没有做粤菜的网站ppt模板下载免费完整版简约
  • 公众号网站wordpress做成app
  • 用什么来网站开发好湖北工程建设信息网站
  • 如何提高网站访问速度代理网址ip
  • 网站描述作用注册公司需要几个人员
  • 深圳网站设计廊坊公司哪个搜索引擎最好
  • 自建站推广html电影网站模板下载
  • 用asp做网站优势wordpress 附件id
  • 某网站seo诊断分析和优化方案wordpress自定义搜索