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

printf实现

这是我看之前公司的旧代码摘录下来的, 感觉写的还算可以吧,  

void printfsend(UART_TypeDef UARTx, uint8_t *buf, int len)
{uint8_t printbuf[256];for (int i = 0; i < len; i++){printbuf[i] = buf[i];}#ifdef ENABLE_PERIAL_TESTif (uart_printf_switch_gloab){UART_SendBuf(UART1, printbuf, len);}else{UART_SendBuf(UART0, printbuf, len);}
#elseUART_SendBuf(UARTx, printbuf, len);
#endif
}

 

void MyPrintf(char *format, ...)
{uint32_t ulIdx, ulValue, ulPos, ulCount, ulBase, ulNeg;int8_t *pcStr, pcBuf[16], cFill;char HexFormat;va_list vaArgP;va_start(vaArgP, format);while (*format){// Find the first non-% character, or the end of the string.for (ulIdx = 0; (format[ulIdx] != '%') && (format[ulIdx] != '\0'); ulIdx++){}// Write this portion of the string.if (ulIdx > 0){
//				printfsend(UART0,format, ulIdx);printfsend(UART0, (uint8_t *)format, ulIdx);}format += ulIdx;if (*format == '%'){format++;// Set the digit count to zero, and the fill character to space// (i.e. to the defaults).ulCount = 0;cFill = ' ';again:switch (*format++){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':{if ((format[-1] == '0') && (ulCount == 0)){cFill = '0';}ulCount *= 10;ulCount += format[-1] - '0';goto again;}case 'c':{ulValue = va_arg(vaArgP, unsigned long);
//					printfsend(UART0,(char *)&ulValue, 1);printfsend(UART0, (uint8_t *)&ulValue, 1);break;}case 'd':{ulValue = va_arg(vaArgP, unsigned long);ulPos = 0;if ((long)ulValue < 0){ulValue = -(long)ulValue;ulNeg = 1;}else{ulNeg = 0;}ulBase = 10;goto convert;}case 's':{
//					pcStr = va_arg(vaArgP, char *);pcStr = (int8_t *)va_arg(vaArgP, char *);for (ulIdx = 0; pcStr[ulIdx] != '\0'; ulIdx++){}//					printfsend(UART0,pcStr, ulIdx);printfsend(UART0, (uint8_t *)pcStr, ulIdx);if (ulCount > ulIdx){ulCount -= ulIdx;while (ulCount--){
//							printfsend(UART0, " ", 1);printfsend(UART0, (uint8_t *)" ", 1);}}break;}case 'u':{ulValue = va_arg(vaArgP, unsigned long);ulPos = 0;ulBase = 10;ulNeg = 0;goto convert;}case 'X':{ulValue = va_arg(vaArgP, unsigned long);ulPos = 0;ulBase = 16;ulNeg = 0;HexFormat = 'X';goto convert;}case 'x':case 'p':{ulValue = va_arg(vaArgP, unsigned long);ulPos = 0;ulBase = 16;ulNeg = 0;HexFormat = 'x';convert:for (ulIdx = 1;(((ulIdx * ulBase) <= ulValue) &&(((ulIdx * ulBase) / ulBase) == ulIdx));ulIdx *= ulBase, ulCount--){}if (ulNeg){ulCount--;}if (ulNeg && (cFill == '0')){pcBuf[ulPos++] = '-';ulNeg = 0;}if ((ulCount > 1) && (ulCount < 16)){for (ulCount--; ulCount; ulCount--){pcBuf[ulPos++] = cFill;}}if (ulNeg){pcBuf[ulPos++] = '-';}for (; ulIdx; ulIdx /= ulBase){if (HexFormat == 'x')pcBuf[ulPos++] = g_pcHex1[(ulValue / ulIdx) % ulBase];//xelsepcBuf[ulPos++] = g_pcHex2[(ulValue / ulIdx) % ulBase];//X}//					printfsend(UART0, pcBuf, ulPos);printfsend(UART0, (uint8_t *)pcBuf, ulPos);break;}case '%':{
//					printfsend(UART0, format - 1, 1);printfsend(UART0, (uint8_t *)format - 1, 1);break;}default:{
//					printfsend(UART0, "ERROR", 5);printfsend(UART0, (uint8_t *)"ERROR", 5);break;}}//switch}//if}//whileva_end(vaArgP);
}

相关文章:

printf实现

这是我看之前公司的旧代码摘录下来的, 感觉写的还算可以吧, void printfsend(UART_TypeDef UARTx, uint8_t *buf, int len) {uint8_t printbuf[256];for (int i 0; i < len; i){printbuf[i] buf[i];}#ifdef ENABLE_PERIAL_TESTif (uart_printf_switch_gloab){UART_Send…...

Elasticsearch 中的 term、terms 和 match 查询

目录 term 查询 terms 查询 match 查询 注意事项 结论 Elasticsearch 提供了多种查询类型&#xff0c;用于不同的搜索需求。term、terms 和 match 是其中最常用的一些查询类型。下面分别介绍每种查询类型的用法和特点。 term 查询 term 查询用于精确值匹配。它通常用于关…...

美易官方:开盘:美股高开科技股领涨 标普指数创盘中新高

**开盘&#xff1a;美股高开科技股领涨 标普指数创盘中新高** 在周三的交易中&#xff0c;美国股市高开&#xff0c;科技股领涨市场&#xff0c;标普500指数创下盘中新高。投资者对经济复苏的乐观情绪以及对科技公司业绩的看好&#xff0c;共同推动了市场的上涨。 盘初&#xf…...

STM32F407移植OpenHarmony笔记2

接上篇&#xff0c;搭建完开发环境后&#xff0c;我们还要继续工作。 官方合作的开发板刚好有STM32F407&#xff0c;我准备试一下开发板的demo&#xff0c;虽然我用的不是他们的开发板。 先下载以下3份代码&#xff1a; https://gitee.com/openharmony/device_board_talkweb…...

数据仓库-相关概念

简介 数据仓库是一个用于集成、存储和管理大量数据的系统。它用于支持企业决策制定过程中的数据分析和报告需求。数据仓库从多个来源收集和整合数据&#xff0c;并将其组织成易于查询和分析的结构。 数据仓库的主要目标是提供高性能的数据访问和分析能力&#xff0c;以便…...

线程的面试八股

​ Callable接口 Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型. 重写 Callable 的 call 方法, 完成累加的过程. 直接通过返回值返…...

Jmeter 配置元件

Jmeter 配置元件 CSV 数据集配置HTTP Cookie 管理器HTTP Header 信息头管理器增加多个用户案列 使用Jmeter发送请求的时候&#xff0c;需要配置元件&#xff0c;配置请求Header、Cookie、数据集合等。可以模拟多个在线用户登录&#xff0c;修改请求头数据。 CSV 数据集配置 C…...

Java- @FunctionalInterface声明一个接口为函数式接口

基本介绍 FunctionalInterface 是 Java 8 中引入的注解&#xff0c;用于声明一个接口是函数式接口。函数式接口是指仅包含一个抽象方法的接口&#xff0c;可以用于支持 Lambda 表达式和方法引用。FunctionalInterface 注解确保该接口只包含一个抽象方法&#xff0c;从而确保其…...

Java使用Netty实现端口转发Http代理Sock5代理服务器

Java使用Netty实现端口转发&Http代理&Sock5代理服务器.md 一、简介1.功能2.参数配置3.程序下载4.程序启动5.源码 一、简介 这里总结整理了之前使用Java写的端口转发、Http代理、Sock5代理程序&#xff0c;放在同一个工程中&#xff0c;方便使用。 开发语言&#xff1a…...

Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)

目录 1、 图数据库Neo4j简介1.1 什么是图数据库1.2 能解决什么痛点1.3 对比关系型数据库1.4 什么是Neo4j1.5 Neo4j的构建元素 2. 环境搭建2.1 安装Neo4j Community Server2.2 docker 安装Neo4j Community Server2.3 Neo4j Desktop安装 3. Neo4j - CQL使用3.1 Neo4j - CQL简介3.…...

C++ inline 关键字有什么做用?

C/C 之中 inline 是一个很有意思的关键字&#xff0c;奇奇怪怪的用法见过不少&#xff0c;今天抽点时间出来聊聊这个东西。 inline 可以用在那些方面&#xff1f;修饰 inline 内链关键字到底有什么作用&#xff1f; OK&#xff1a;started 1、inline 可以用在类成员函数的声明…...

eNSP学习——理解ARP及Proxy ARP

目录 名词解释 实验内容 实验目的 实验步骤 实验拓扑 配置过程 基础配置 配置静态ARP 名词解释 ARP (Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。ARP表项可以分为动态和静态两种类型。   动态ARP是利用ARP广播报文&#xff0c;动态执行并自动进…...

Unity中UGUI在Mask剪裁粒子特效的实现

在Unity使用Mask是剪裁不了粒子特效的&#xff0c;之前有想过RenderTexture来实现&#xff0c;不过使用RenderTexture不适合用于很多个特效&#xff0c;因为RenderTexture依赖Camera的照射&#xff0c;如果在背包中每种道具都有不同的特效&#xff0c;那使用RenderTexture则需要…...

精通 VS 调试技巧,学习与工作效率翻倍!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; ​ 所属专栏&#xff1a;C语言学习 ​ 贝蒂的主页&#xff1a;Betty‘s blog 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预…...

yarn 安装包时报“certificate has expired”

在通过yarn包管理器安装 yarn install 时候 报错&#xff1a; info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLSSocket.onConnectSecure (node:_tls_wrap:1539:34) at TLSSocket.emit (node:events:513:28) at…...

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS

# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…...

消息队列RabbitMQ.01.安装部署与基本使用

目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…...

1.24号c++

C绪论 c是c语言的扩充&#xff0c;C包含了C的所有属性&#xff0c;换一句话说&#xff0c;C语言在C中都合法。 C语言编程思想&#xff1a;面向过程 c编程思想&#xff1a;面向对象 可以说在C中一切皆对象。 c的三大属性&#xff1a;封装&#xff0c;继承&#xff0c;多态。…...

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】

最近在整理 PDF 的时候&#xff0c;有一些需求普通的 PDF 编辑器没办法满足&#xff0c;比如 PDF 批量合并、编辑等。 于是&#xff0c;我就去 GitHub 上看一看有没有现成的轮子&#xff0c;发现了这个 PDF 神器「PDF 补丁丁」&#xff0c;让人惊讶的是这个 PDF 神器有 12 年的…...

React16源码: React中的PortalComponent创建, 调和, 更新的源码实现

PortalComponent 1 &#xff09;概述 React Portal之所以叫Portal&#xff0c;因为做的就是和“传送门”一样的事情render到一个组件里面去&#xff0c;实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 &#xff09;源码 定位到 packages/react-…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...