嵌入式系统开发预备知识(二)常用数据类型及数据结构

    今天这一节讲的是ucos-II常用数据类型及数据结构,总结我在第三章所看到,这些知识点非常重要,务必牢记。

    本节主要内容有控制块,队列与堆栈,位图,程序流程转移的中断实现方法。

   控制块:

    操作系统中的每一个被管理对象,不管这个对象是软件模块还是硬件装置,他们至少会有一个记录其基本信息的数据结构,操作系统就一句这个控制块提供的信息来对这些对象那个进行管理。控制块就是被控制对象在操作系统中的身份证。

从代码上看,控制块就是一个C结构体:

    typedef struct tcb{

                         char * code ;    //代码名称

                         int      p;            //重要性级别

                        int     v_number;         //版本号

                       void  (*fun)(void);   //指向被管理代码的指针

} TCB;

其中,函数指针指向的便是被管理模块的函数模块,而结构tcb中的其他各项都是这个被管理模块的相关管理信息,这个软件模块也叫程序控制块或程序描述块。

实际操作系统所使用的程序控制块是相当复杂的,一是需要记录的信息很多,而是结构很复杂,比如说级联结构,但不管怎么变,程序控制块总是通过函数指针关联相应代码的。

同类控制块的登记造册

操作系统需要将控制块集中管理存放到某种数据结构,常见的数组对于存放相同类型的数据比较方便但是,数组不便存放大型数据,且对内存要求很高,需占用一块连续的内存,这时候不占用连续 内存存放大型数据的链表有事就体现出来了。用双向链表来管理程序控制块即在程序控制块中添加两个指针,一个指向前一个控制块,一个指向下一个控制块。我们知道用这样的方式虽然存放方便但是读取就比较麻烦了,所以用一个数组来存放指向各个链表成员的指针,通过遍历数组元素来查询链表元素就很快了。书本中图2-16 链表和数组的配合。现在高级的模式还有哈希表等新型结构来解决这种问题。

队列与堆栈

首先我们要知道什么是队列,顾名思义类似我们排队是的队伍,队伍前面的总是优先安排处理,第一个处理完了,开始第二个。CPU就一个,每个想使用CPU的任务,想要占有CPU那就要排队,其实是CPU把想要占有自己的任务进行排队。

堆栈

堆栈类似于搭积木,积木按照顺序一层一层进行堆砌,当我想要拿到其中的一块积木,我就要把这块积木上面的积木都拿走,我才能得到这块积木。

人类在设计堆栈的最初用途是为了保护函数调用时保护程序断点,函数断点就是发生函数调用时,CPU去调用这个函数,当这个函数执行完了之后,CPU需要返回到刚才发生函数调用的地方,继续去执行程序。用堆栈保护函数断点的好处是系统只需保存栈顶的地址即可,因为每次从堆栈中读取断点都是读取栈顶数据。

通常在程序中是用数组申请一块连续内存作为堆栈,为了能够访问栈顶数据,堆栈就需要一个总是指向栈顶的指针,随着数据的增加和减少,这个指针会浮动位置,从而保证无论是输入数据还是输出数据,系统都是从SP处操作,这个指针叫做堆栈指针SP。

位图

计算机系统中,位图的每一个像素都是用数字来表示的,例如一个16位二进制数据表示的像素,低八位表示颜色,高八位表示亮度,操作系统中用一个二进制位来代表一个具有两个状态的事物,状态有0或1,0来表示未被使用,空闲状态;1表示正在被使用,忙状态。

程序流程转移的终端实现方法

    中断就是打断某个程序执行过程,目的是执行另外一个程序。这个动作是非主动的,计算机系统中的中断管理机构来实施的。

通常引发一个中断的原因是计算机外部设备有事情需要计算机来做。也就是说,引发中断的源头是中断源。中断源的中断申请在中断管理器的管理下终止现行程序并按照中断管理器给出的地址将程序转向中断服务程序。

以上的过程是程序执行过程中的被动行为,与程序执行过程中的主动调用其他函数是有本质区别的,主动过程函数的调用所产生的断点是系统自动保存与恢复的,而被动过程中中断服务程序执行过后可能返回被中断的程序,也有可能进入到另一个新的程序,这取决于你的设计。

本小节结束意味着学习ucos-II的预备知识的结束,下一节我们将正式开始学习嵌入式多任务实时操作系统,更新起来也会表慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值