发新帖本帖赏金 1.00元(功能说明)我要提问
返回列表
打印

嵌入式实时系统的理解

[复制链接]
楼主: 1026869700
手机看帖
扫描二维码
随时随地手机跟帖
41
1026869700|  楼主 | 2016-10-14 17:53 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 1026869700 于 2016-10-14 18:02 编辑

      之前假期结束了,忙到工作中去了;今天将之前提的数据分配大概讲一下。
      在操作系统中,数据都是要严格管理的。特别是对RAM的占用。我们在写普通程序的时候,数据也就分为全局数据和局部数据。看实时系统的数据管理时,了解到了系统里面的数据格式有点不一样,具体不一样到哪儿了?
    关于任务(线程)间数据的访问,这个问题首次干倒我是在写C#的时候;当时就把需要通讯的数据定义到一个全局的类里面去了。然后大家去公共访问这个类,这个就实现了线程间通讯,当然我感觉到这样做有问题(实际测试下来是没问题的),但是没有办法,也就只能那样去解决问题了。
       在嵌入式系统里面,任务间通讯也是很重要的。之前说过,任务之间是相互独立的,一个任务完全感知不到另外一个任务的存在,那么如何通讯呢?基本原理是通过指针访问。在freeRTOS里面,数据类型相对少一点,uCOS里面的数据类型多一点。在freeRTOS里面,最主要的数据类型是队列,说到队列,可能很对人有点懵。其实它就是链表。为什么这么说呢?先说个重要的概念。当你编译freeRTOS时,你会发现RAM基本都被占光了。那么任务里面要定义变量怎么办?定义全局变量怎么办?其实不必担心,这个就是系统管理变量的一个机制。它预先定义个一个很大的数组,将一个区域的RAM空间先占住,然后将这个数组的首地址和尾地址提取出来,那么这个区域就是整个系统的用户使用的RAM空间缓冲池,所有的任务需要空间时,通过系统提供的函数,去申请空间,系统会根据使用情况,从那个缓冲池里面抠出一块。由于这个是一个公共的缓冲池,各个任务都可以去访问它。
       当你需要使用变量时,不管是多少个,通过队列生成函数,去从那个空间里面去申请,系统会根据当前的使用情况,为这个队列分配一个空间;说它是链表,是因为这个缓冲池的管理是通过链表管理的,假如为你分配了一个空间,那么系统记住的是你的这个空间的首地址和尾地址。当别的任务需要申请时,先检查缓冲池是否够,如果不够的话,队列生成函数就会返回申请失败。  
       队列是嵌入式系统里面,初学者最先接触的,也是应用最多的类型。当然还有那些什么二值信号量、互斥信号量,uCOS里面还有消息邮箱。二值信号量,顾名思义,只有两个值,也就是0和1。一般用于状态开关,互斥信号量也是可以根据名字理解,像一个灯的亮和灭,就是一对互斥信号。   
      主要的说了,其他的个人有个人理解,到了这一步,相信后面也就没有什么难度了。
      说一个很好玩的一个东西。就是程序生产者和消费者之间的一些动作。生产者产生数据,消费者使用数据。我在写C#的串口的时候,发现这么一个问题,如:当用下位机串口按照协议往上位机传数据,而C#里面的串口是软件中断,每次进去接收的长度不同,接收到的数据零零碎碎,完全没有规律。如何将数据流串还原出来呢。后来发现里面有个list的数据类型,它有什么特点呢?假设我定义100个长度,我C#的串口中断往这个列表的尾添加数据,消费者(使用数据的地方)每次从头提取数据使用,使用完毕后,将使用过的删除掉。这样就形成了一个不规律数据到规律数据串的一个转换。
       就说到这儿吧。框架和主要的基本知识点已经讲完了,剩下的填砖加瓦和装修的事情,各位自己按着这个框架自己学习,每个人都有自己的理解和想法,我不喜欢强迫和要求别人按照一个特定的思路去理解,细节的各位自己学习。再见!

使用特权

评论回复
42
1026869700|  楼主 | 2016-10-15 08:39 | 只看该作者
xuejian_xiaonan 发表于 2016-10-14 12:16
看明白了,都有了解

姐姐?

使用特权

评论回复
43
xuejian_xiaonan| | 2016-10-15 09:36 | 只看该作者

恩,,最后一篇也看完了,可能学的时候才能真正明白。

使用特权

评论回复
44
1026869700|  楼主 | 2016-10-15 10:49 | 只看该作者
dianhang 发表于 2016-10-12 23:06
正想学习嵌入式实时系统 会一些stm32简单的编程 不知道从何入手 希望楼主 指点一二  ...

指点谈不上,大家一起学习,相互交流。

使用特权

评论回复
45
驽马拉笨车| | 2016-10-15 18:17 | 只看该作者
yyy71cj 发表于 2016-10-7 15:40
对于数字技术,已经没什么能难住人的了,高手寂寞如斯,奈何英雄无用呼? ...

好大的口气

使用特权

评论回复
46
dianhang| | 2016-10-16 10:27 | 只看该作者
恭喜恭喜 喜得贵子

想申请一块 Stellaris LM4F120 LaunchPad Evaluation Kit来学习 之前使用过MSP430,想提升一下 学习32位的单片机

使用特权

评论回复
47
逍遥李| | 2016-10-16 11:44 | 只看该作者
好贴好贴!

使用特权

评论回复
48
1026869700|  楼主 | 2016-10-16 15:04 | 只看该作者
大秦正声 发表于 2016-10-12 17:45
不错,蓝牙芯片也是这样用的。

是的,蓝牙芯片里面有一个它自己专用的系统,其实很多这种小系统的结构原理很相似。

使用特权

评论回复
49
newplayer123| | 2016-10-17 14:33 | 只看该作者
支持分享

使用特权

评论回复
50
lianfutiana| | 2016-10-18 08:50 | 只看该作者
学习学习了,,,

使用特权

评论回复
51
长的帅怪我落| | 2016-10-18 09:14 | 只看该作者
1026869700 发表于 2016-10-16 15:04
是的,蓝牙芯片里面有一个它自己专用的系统,其实很多这种小系统的结构原理很相似。 ...

我是最近才开始学ucossiii,然后也是用的stm32,新手有点问题莫怪。。才大致看了下,我的理解确实是没有操作系统,就是一件事做到底,有操作系统,就是可以同时做几件事。但是,我现在没想通,一件事做到底,和同时做几件事,我在程序的功能上还不是特别的清楚。版主可以类似的举几个例子详细说明下。。还有,我看的所谓的ucoss移植,哪叫什么系统移植啊。。目前我看得stm32的,简直就是文件的移植。。然后偶尔改几句代码,最后,建立几个任务,然后根据需要改任务就行了。。这样学习对吗?还是要注意什么其他的东西?

使用特权

评论回复
52
1026869700|  楼主 | 2016-10-18 11:41 | 只看该作者
长的帅怪我落 发表于 2016-10-18 09:14
我是最近才开始学ucossiii,然后也是用的stm32,新手有点问题莫怪。。才大致看了下,我的理解确实是没有操 ...

     就是那样移植的;嵌入式系统本身的结构就是,写一部分代码,这部分代码可以控制单片机的运行。然后按照这段代码的规格,添加进入任务,然后那部分代码把你写的任务添加到硬件运行过程中。
     我来说一下多任务和单任务的运行结构:
     没有操作系统的结构。。。
     任务1;
       |
     任务2;
      |
     任务3;
      |
     .......
这样就是一个任务必须要完全运行完,才能进入下一个任务。
     多任务并行呢:(A代表当前执行的)
     |                       |                        |                        ......
  任务1                任务2                 任务3                      ......
    A                      .                        .
    .                       .                       A
    .                      A                        .
    .                      A                        .
    .                      .                         A
    A                     .                          .
这种结构就是,每个任务执行一会儿,就切换到别的任务去了,而且是按照任务优先级切换的。不是一个任务执行完了、才去切换到另一个任务。

使用特权

评论回复
53
长的帅怪我落| | 2016-10-18 11:53 | 只看该作者
1026869700 发表于 2016-10-18 11:41
就是那样移植的;嵌入式系统本身的结构就是,写一部分代码,这部分代码可以控制单片机的运行。然后 ...

那就回到了你帖子开头的,类似中断,只是像软件产生的的中断一样,一样有优先级。但是说实话,这又跟没操作系统的中断有什么区别?我也可以中断嵌套多个中断来完成啊。我之前的理解是操作系统可以同时进行多项任务,ABC,然后ABC是同时进行的,没有优先级之说,就是cpu在一瞬间做3件事。现在看来,其实操作系统在某一瞬间也只是在做一件事。当我有更高优先级的,我就去做别的,停下正在做的。做完后在回来。一直循环。这样理解对吧。

使用特权

评论回复
54
1026869700|  楼主 | 2016-10-18 12:00 | 只看该作者
长的帅怪我落 发表于 2016-10-18 11:53
那就回到了你帖子开头的,类似中断,只是像软件产生的的中断一样,一样有优先级。但是说实话,这又跟没操 ...

你的理解是对的。硬件中断时用于特定的事件的,如果没有系统文件的干涉,你的CPU只能顺序执行,无法在一个任务执行的中途去打断当前任务且转移任务。系统文件可以控制在任何时间点去打断且切换任务。
   

使用特权

评论回复
55
长的帅怪我落| | 2016-10-18 12:02 | 只看该作者
1026869700 发表于 2016-10-18 12:00
你的理解是对的。硬件中断时用于特定的事件的,如果没有系统文件的干涉,你的CPU只能顺序执行,无法在一 ...

哦,多谢版主解答。暂时我还没学到那么深,以后有问题再来请教你哈

使用特权

评论回复
56
1026869700|  楼主 | 2016-10-18 17:49 | 只看该作者

跑堂的都不打赏我了,好歹是纯手工敲打,花时间总结的。想着攒攒可以教话费呢。

使用特权

评论回复
57
yy98988988| | 2016-10-18 21:45 | 只看该作者
我也要成长

使用特权

评论回复
58
jiaxiansheng| | 2016-10-18 23:52 | 只看该作者
接着讲,我在像看小说一样的看

使用特权

评论回复
59
lilinfei520| | 2016-10-21 08:53 | 只看该作者
谢谢分享,学习了

使用特权

评论回复
60
525488045| | 2016-10-21 16:56 | 只看该作者
楼主讲的很仔细,还通过举例子来描述抽象逻辑,不错!
想问下楼主对于菜鸟来说学习什么操作系统比较容易上手?

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则