集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:400-111-8989  |   联系客服   |
当前位置:主页 > 培训课程 > 嵌入式 >

成都嵌入式培训:嵌入式开发之数据缓存

发布者: 成都达内     浏览次数:     发布时间:2017-04-19 13:40:40

嵌入式中的数据缓存,用于高速设备与低速设备数据传输中一个中间键,提高计算机各硬件的使用率。...

  嵌入式中的数据缓存,用于高速设备与低速设备数据传输中一个中间键,提高计算机各硬件的使用率。

  对于嵌入式开发中,由于内存不足,一般得RAM只有几十K或者几十M,对于页高速缓存这么duang的东西自然高攀不上。

  嵌入用到数据缓存的地方有很多,这次的背景是串口接受数据,创建新的任务进行数据的处理。当串口发送数据过快,而数据处理任务对数据处理不过来,无形中就变成高速设备与低速设备间的通讯,此时就需要引入数据缓存。

  串口每次接收8位数据,当中断再次来临时,串口寄存器会重新刷新数据,所以为了将该字节数据存起来,我们需要把该数据定义为全局变量,方便后续对该数据进行操作。

  思路一:单向链表存储数据

  1.创建一个全局字符数组,当接收到开始码,把后续接收到的字节放入数组当中直至收到结束码为止。

  2.当收到结束码,发送信号到链表任务,让链表任务进入运行队列。

  3.链表任务在初始化时创建链表头,然后死循环等待中断程序发送信号量,把数据挂入链表,然后创建数据处理的一系列任务,再把链表任务挂起等待下一次信号到达。(多任务系统中死循环不会阻塞其他任务)

  4.数据处理任务把数据处理完后需要把头指针的NEXT指向下一个数据,把当前处理的数据FREE掉。

  不知道大家有没有发现上述方法的BUG:

  1.链表数据中的数组每次大小一致,但我们收到的指令长度却不同,在多次创建后会导致内存空间浪费。

  2.C库的malloc采用堆算法进行内存,多次分配内存后会造成内存碎片化,后续的程序就难以申请大块数据了。

  3.由于在嵌入式系统中,中断的发生非常频繁,而malloc函数也不是一个可重入函数,在分配内存的过程中可能会出错。

  4.内存的有限,一旦中断出错,不断发送数据,容易造成内存溢出,程序挂掉。

  思路二:缓存池

  1.第一步与上述第一步相同。

  2.静态队列任务,在初始化是定义一个数组作为缓存池,两个全局指针,一个头指针,一个尾指针。头指针指向下一个要处理的数据,尾指针指向数据尾存放下一个到来的数据。

  3.因为每次接收的指令有结束码,所以在拷贝指令到数组的时候可以根据结束码纪录数据长度,保证缓存池没有空闲位置。

  4.缓存池循环使用,当尾指针指向缓存池最后且缓存池的头数据已经处理完时,把尾指针指向缓存池头部,依次循环。但尾指针与头指针之间不足以存放该次数据则反应消息给用户并丢弃该次数据。

  5.数据处理任务处理完一次数据后把头指针指向下一个数据。

  该思路不足处:

  1.固定了缓存池大小,当数据量过大时只能丢弃一部分数据。

  2.缓存池的大小需要把握好,过大浪费内存,过小存储不了数据。


  成都it培训哪家好,当然是成都达内培训,成都达内是一家专业的程序员培训机构,专注于成都嵌入式培训,成都web前端培训,成都.NET培训,成都大数据培训,成都会计实操培训,成都IT培训,成都编程培训等IT培训,专业的成都软件培训机构,专业师资授课,真实项目实战、零首付、低押金、名企就业。

(责任编辑:成都达内)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:400-111-8989

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:400-111-8989

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:400-111-8989

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3