解决:Cortex-M4上,usart自己主动发送数据计划。

    1. usart快速突破。数据还没有被处理。usart中断会把盖掉的数据不被处理。

数据丢失。

	2.此过程需要main处理4一个usart口的数据,这样出错的概率会更大。

提出例如以下解决方式:
第一:规定每条完毕的数据长度。步会超过256字节。
第二:我们规定数据的结束表标志为数据的后三位为,FFFFFF
第三:定义一个全局的数据,他是一个三维数组该数据用来存放4个usart口发上来的数据。 uint8_t usart_data[4][5][256];
以下解析为什么要定义一个三维数组: 第一个下标4:它分别用来接受不同的usart口的数据。
第二个下标5:它表示每一个usart最多能缓存的数据条数是5.
第三个下标256:它用来表示最多一条数据能存256个字节。 以下是程序假设实现。 定义例如以下变量:
一:接受usart数据缓冲器的定义。它是一个全局的三维数据
uint8_t usart_data[4][5][256] = {0}; 二:记录每一个usart口。当前接收到的数据条数。
uint8_t data_count[4] = {0}; 三:记录当前接受到的数据数。
uint8_t data_len[4] = {0}; 四:用来记录出错的次数。
uint8_t error_count = 0; void UART_DATA_handle(uint8_t route)
{ if(data_count[route]<5)
{ if((usart_data[route][data_count[route]][data_len[route]-3]==0xFF)
&&(usart_data[route][data_count[route]][data_len[route]-2]==0xFF)
&&(usart_data[route][data_count[route]][data_len[route]-1]==0xFF))
{ if(usart_data[route][data_count[route]][0]==data_len[route])
{
data_count[route]++;
data_len[route] = 0;
if(data_count[route]>5)
{ data_count[route]=0;
}
else
{
error_count++;
}
}
}
}
} void USART1_IRQHANDLER(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); usart_data[0][data_cout[0]][data_len[0]++] = USART_Rece_Data(USART1);
if(data_len[0]>2)
{ usart_data_route(0);
}
}
return;
} void USART2_IRQHANDLER(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
usart_data[1][data_cout[1]][data_len[1]++] = USART_Rece_Data(USART2);
if(data_len[1]>2)
{
usart_data_route(1);
}
}
return;
} void USART3_IRQHANDLER(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
usart_data[2][data_cout[2]][data_len[2]++] = USART_Rece_Data(USART3);
if(data_len[2]>2)
{
usart_data_route(2);
}
}
return;
} void USART4_IRQHANDLER(void)
{
if(USART_GetITStatus(USART4, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART4, USART_IT_RXNE);
usart_data[3][data_cout[3]][data_len[3]++] = USART_Rece_Data(USART4);
if(data_len[3]>2)
{
usart_data_route(3);
}
}
return;
} /****main*******/ uint8_t tmp[512] = {0}; static __INLINE void process_usartdata(uint8_t *tmpdata, uint8_t *usartdata, char *usart_format, int flag){
int tmp =0,count=0,i=0;
memset(tmpdata,0x00,512);
printf(usart_format,flag);
for(i=0;i<usartdata[0]+1;i++){
tmp = sprintf(&tmpdata[count],"%02X", *(usartdata+i));
count += tmp;
}
memset(usartdata,0x00,256);
printf(tmpdata);
} int main(void)
{
.........
uint8_t i = 0;
while(1)
{
for(i=0;i<4;i++)
{ while(data_count[i]>0)
{
process_usartdata(tmp,usart_data[i][data_count[i]],"usart:%d",i);
data_count[i]--;
}
if(data_count[i]>5)
{
data_count[i] = 0;
}
}
}
........
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

F4107Usart数据处理程序的更多相关文章

  1. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  2. 大数据-kafka

    1Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 作用:1发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因 2以容错 ...

  3. Spark项目之电商用户行为分析大数据平台之(六)用户访问session分析模块介绍

    一.对用户访问session进行分析 1.可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄.职业.城市): 2.对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出 ...

  4. Python 学习 第17篇:从SQL Server数据库读写数据

    在Python语言中,从SQL Server数据库读写数据,通常情况下,都是使用sqlalchemy 包和 pymssql 包的组合,这是因为大多数数据处理程序都需要用到DataFrame对象,它内置 ...

  5. Java程序员必备的10个大数据框架!

    作者:java妞妞 blog.csdn.net/javaniuniu/article/details/71250316 当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语 ...

  6. 徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

    在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台.市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计 ...

  7. [摘录]第三部分 IBM文化(1)

    第二十章 论公司文化如果是在20世纪90年代初期,当一个人看见或者听到“IBM”时,他会联想到什么呢?或许是“大计算机”.“个人电脑”或者“ThinkPads”.但是,他们同时也必然会想到“大公司”. ...

  8. TSQL Merge On子句和When not matched 语义理解

    Merge 的On子句指定Match condition,When子句指定过滤条件,如果Source Table和Targe Table匹配的上,很好理解:如果匹配不上,必须深入理解不匹配的条件,否则 ...

  9. 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享

    架构师小组交流会是由国内知名公司架构师参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是 CI/CD.Dev ...

随机推荐

  1. Atitit.软件GUIbutton和仪表板(01)--警报系统--

    Atitit.软件GUIbutton和仪表板(01)--警报系统-- 1. 温度报警防区(鲁大师,360taskman) 1 2. os-区-----cpu_mem_io资源占用监測 1 3. Vm区 ...

  2. 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法

    近来在负责公司短信网关的维护及建设,随着公司业务发展对短信依赖越来越严重了,短信每天发送量也比曾经每天40多w发送量暴增到每天达到200w发送量.由于是採用Java做发送底层,压力递增情况下不可避免的 ...

  3. hdu 2454 Degree Sequence of Graph G (推断简单图)

    ///已知各点的度,推断是否为一个简单图 #include<stdio.h> #include<algorithm> #include<string.h> usin ...

  4. Windows Auzre 微软的云计算产品的后台操作界面

    Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...

  5. 在Sql中使用Try Catch

    原文:在Sql中使用Try Catch 今天在写sql中出现了!我想在sql使用trycatch吧! 哎..但是语法又记不住了! 那就清楚我们的google大师吧! 嘿,网上关于在sql中使用Try ...

  6. Vim经常使用技巧总结1

    我的主力博客:半亩方塘 1. 反复上次的操作在普通模式下用 . 命令 2. 取消上次的操作在普通模式下用 u 命令 3. 整行删除在普通模式下用 dd 命令,此命令在删除行后 不进入插入模式 4. 整 ...

  7. LeetCode219:Contains Duplicate II

    Given an array of integers and an integer k, find out whether there there are two distinct indices i ...

  8. redis基础的字符串类型

    redis —— 第二篇 基础的字符串类型 我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞 ...

  9. NSIS 自定义页面制作关闭功能

    因工作需要要自定义NSIS的安装页面,其中用到一个功能. 修改的是这个项目:https://github.com/nicecai/nsissource http://hamletsoft.com/ 在 ...

  10. 【 D3.js 入门系列 --- 10.2 】 你可以拖动地图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处.谢谢. 本节是结合9.2节 和10节 的内容制作的一个可力学导向的中国地图,用 ...