[单片机] MCU串口发送C方案优化

news2024/12/26 21:06:02

应用场景:

  主频不高非操作系统的单片机,需要在while循环中发送 数据到上位机,当数据较长时,会让发送的过程会让其他操作有卡顿感。为了解决这个问题,需采用一种方法:在每次大循环中只发一个字节数据,直到发送完毕。


#include <stdio.h>
#include <unistd.h>
void msleep(int ms)
{
	usleep(1000*ms);
}


//=============================================
#define MAX_SEND_LEN 10

u8 g_sendBuffer1[MAX_SEND_LEN]={ 0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa };
u8 g_sendBuffer2[MAX_SEND_LEN]={ 0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba };


//用printf打印输出,模拟单片机发送单字符
void UART_Send_Byte(u8 ch)
{
	printf("%02X ",ch);
}

int loop_send_uart(u8 *data,int delaycnt )
{
	static int send_index = -1;
	static int send_delayCnt =0;

	send_index++;
	
	if( send_index == 0 )
	{
		send_delayCnt = delaycnt;
	}	
    else if( send_index >= MAX_SEND_LEN)
	{
		if(--send_delayCnt<=0)
		{
			send_index = -1;
			send_delayCnt = delaycnt;
			return 0xFF;//finish signal
		}	
		else
			return send_index;
	}	
	UART_Send_Byte( data[send_index] );
	return send_index;
}
 
int main(int argc, char **argv)
{
    printf("=======C_BuildTime=[%s]==============\r\n\r\n",__TIME__ );
	
	int cnt = 0;
	int ret_index = 0;
	while(1)
	{
		printf("A_count = %d ::", cnt++ );
		printf("send_DATA=[");
		ret_index = loop_send_uart(g_sendBuffer1,3);
		printf("],ret_index=%02x.\n",ret_index );
		msleep(500);
		if(ret_index==0xFF) //发送完第1组数据
			break;
	}
	
	while(1)
	{
		printf("B_count = %d ::", cnt++ );
		printf("send_DATA=[");
		ret_index = loop_send_uart(g_sendBuffer2,3);
		printf("],ret_index=%02x.\n",ret_index );
		msleep(500);
		if(ret_index==0xFF) //发送完第2组数据
			break;
	}	
    return 0;
}

运行结果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5+CSS3(一)-全面详解(学习总结---从入门到深化)

目录 ​编辑 第一个前端程序 学习效果反馈 前端工具的选择与安装 前端常见开发者工具 浏览器 VSCode中文语言包安装&#xff1a; 学习效果反馈 VSCode开发者工具快捷键 VSCode常用快捷键列表 学习效果反馈 HTML5简介与基础骨架 HTML5的DOCTYPE声明 HTML5基本骨架 html…

Linux(CentOS Stream 9)安装MySQL8.0

mysql8下载链接 链接&#xff1a;https://pan.baidu.com/s/1yBCDbDYUmQWjcM1SdS7Xng 提取码&#xff1a;t37m 上传到服务器上并解压 cd /usr/localtar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz解压包重命名为mysql mv mysql-8.0.21-linux-glibc2.12-x86_64 /usr/l…

Linux部署RKNN-toolkit过程以及异常点记录(详细记录)

文章目录Linux部署RKNN-toolkit过程以及异常点记录1.在Linux中安装Miniconda1.1 使用服务器下载Miniconda1.2 安装conda1.3 激活刚安装完成的软件1.4参考博文2.创建并激活Miniconda新环境&#xff08;rknn&#xff09;2.1 创建conda环境&#xff08;命名为rknn&#xff09;2.2 …

做亚马逊、沃尔玛测评自养号大额、退款一定要解决的几个问题?

大家好我是测评龙哥&#xff0c;今天我跟大家说下做亚马逊、沃尔玛测评自养号、退款、lu货、项目需要用到的防关联、防封号环境的一些底层技术原理。这里讲的内容我相信很少有人能掌握&#xff0c;都是一些比较难的IT术技。 如果你现在准备开始做测评是在了解阶段还是已经在做…

SRM-询报价管理系统搭建指南

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建SRM-询报价管理。1.2、应用场景企业根据询价需求通知参与报价的供应商&#xff0c;所有供应商会收到通知后进行报价&#xff0c;自动生成了比价数据&#xff0c;企业可参考比价数据对供应商进行选择。2、设置方法2.1、表单搭…

GF_CLR初始用 - 正式版

参照&#xff1a;DeerGF_Wolong框架使用教程 与tackor老哥的踩坑日记所编写&#xff0c;第二次尝试&#xff0c;总结第一次经验重新来。 点击链接加入群聊【Gf_Wolong热更集合】 一. 部署 HybridCLR(Wolong) 环境 首先安装Windows Build Support (IL2CPP)需要完整的克隆项目…

自动驾驶感知——激光雷达物体检测算法

文章目录1. 基于激光雷达的物体检测1.1 物体检测的输入与输出1.2 点云数据库1.3 激光雷达物体检测算法1.3.1 点视图1.3.1.1 PointNet1.3.1.2 PointNet1.3.1.3 Point-RCNN1.3.1.4 3D-SSD1.3.1.5 总结和对比1.3.2 俯视图1.3.2.1 VoxelNet1.3.2.2 SECOND1.3.2.3 PIXOR1.3.2.4 AFDe…

2023年Java学到什么程度可以找工作了?

不管是过去现在还是未来&#xff0c;任何以就业为目的的学习&#xff0c;参考的就业要求最直接的方式就是直接去搜索目标岗位企业的招聘要求。是不是很简单呢&#xff01;下面是根据Java不同技术层次列举招聘要求&#xff1a;初级Java开发工程师&#xff1a;中级Java开发工程师…

出现这些症状,说明你的免疫力在走下坡路!

这些年免疫力逐渐成为大家关注的重点。随着身边越来越多的人感染&#xff0c;免疫力的强弱影响着每个人身体的恢复情况&#xff0c;好的免疫力就是最有效的药物。免疫力讲究平衡二字&#xff0c;太强、太弱都不好。太强会让机体过于敏感&#xff0c;对非致病因素也发起攻击&…

网络故障监控某小程序延时分析案例

背景 某港口集疏港系统近期出现故障&#xff0c;在凌晨3-5点时段无法上传疫情通勤卡&#xff0c;对港口货物运输带来影响。 该港口已部署NetInside全流量回溯系统&#xff0c;针对本次故障&#xff0c;进行故障定位和原因分析。 分析简介 操作时间&#xff1a;2022年9月8日星…

【C++】C++入门 命名空间 及输入与输出

前言 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助。 C补充C语言语法的不足&#xff0c;以及对C语言设计不合理的地方进行优化&#xff0c;比如&#x…

联想昭阳K4e电脑系统错误导致屏幕闪烁怎么重装系统?

联想昭阳K4e电脑系统错误导致屏幕闪烁怎么重装系统&#xff1f;有用户安装的电脑系统有兼容性错误&#xff0c;导致电脑开机之后&#xff0c;屏幕会不断的进行闪烁&#xff0c;无法正常的进行电脑操作。那么这个情况我们如何去进行电脑系统的重装呢&#xff1f;今天教大家U盘重…

项目管理系统

项目要求 1&#xff09;服务器负责管理所有员工表单&#xff08;以数据库形式&#xff09;&#xff0c;其他客户端可通过网络连接服务器来查询员工表单。 2&#xff09;需要账号密码登陆&#xff0c;其中需要区分管理员账号还是普通用户账号。 3&#xff09;管理员账号可以查…

【数据结构】极致详解:树与二叉树(下)——链式存储实现

目录 &#x1f929;前言&#x1f929;&#xff1a; &#x1f92f;一、链式存储概述&#x1f92f;&#xff1a; &#x1f920;二、链式结构的遍历&#x1f920;&#xff1a; 1.前序、中序与后序遍历&#xff1a; 2.层序遍历&#xff1a; &#x1f970;三、链式存储结构各接…

2023年转行IT互联网:盘点高薪职业岗位!

要问今年转行求职最想进入的行业&#xff0c;那么互联网肯定算其中一个。智联招聘发布的《2022大学生就业力调研报告》显示&#xff0c;IT/通信/电子/互联网行业是应届生最期望就业的行业。中国青年报中青校媒面向全国大学生发起调查&#xff0c;有64.33%希望毕业后能进入互联网…

linux常识及常用命令

一、介绍 一般项目都是部署在linux服务器上的&#xff0c;linux内核起初是由芬兰人林纳斯托瓦兹在上学时出于爱好编写的。它是一套免费试用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX&#xff08;可移植&#xff09;和UNIX的多用户、多任务、多线程和多CPU的操作…

Task10-Excel看板

文章目录一 分析思路二 实现过程1 确定周数2 销售基础整理3 周销售数据变化趋势4 周销售渠道整理5 看板绘制一 分析思路 二 实现过程 1 确定周数 确定日期所在的周数用&#xff1a;【WEEKNUM函数】 WEEKNUM&#xff08;serial_num&#xff0c;return_type&#xff09;参数Ser…

简介CSS

目录 一、CSS概述 二 、CSS的语法规则 三、CSS的引入方式 1、内部样式表 2、行内样式表 四、代码风格 1、紧凑风格 2、展开风格 五、选择器 1、基础选择器 标签选择器 类选择器 id选择器 通配符选择器 2、复合选择器 后代选择器 子选择器 并集选择器…

网络设备和常见网络拓扑

目录 集线器 网桥 交换机 路由器 常见网络拓扑 总线型 环形 星型 树型 网状 集线器 集线器的英文称为“Hub”。“Hub”是“中心”的意思&#xff0c;它的主要功能是对接收到的信号进行再生整形放大&#xff0c;以扩大网络的传输距离&#xff0c;同时把所有节点集中在…

threejs 几何图形 相交、差集、并集 插件

目前搜集到的有以下几个 THREE-CSGMeshhttps://github.com/manthrax/THREE-CSGMeshcsg.jshttps://github.com/jscad/csg.jsOctreeCSGhttps://github.com/giladdarshan/OctreeCSG/threeBSP 这个现在已经不更新了【对新版本不支持了geometry新版中移除了】threebsp 【这个是前辈…