• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试中如何实现一个最简单的操作系统

发布: 2009-8-10 10:59 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 234次 | 进入软件测试论坛讨论

领测软件测试网

发生异常,系统就死机

  5.对TIMER的实现,首先确定时间片,为了让系统更稳定,而且我们不需要实时功能,尽可能让时间片设置长一点,比如我们让一个任务运行20个时钟滴答数,然后应根据系统频率来确定每个系统滴答所占用的毫秒,这里使用5毫秒让系统定时器中断一次,那么就需要写时钟寄存器,具体参阅芯片资料,计算下来,一个任务最大可能连续运行100毫秒,注意:我们的操作系统不支持内核抢占,同时只支持两级中断优先级,就是只有时钟中断的优先级高一点,其它的优先级都低一级,但是在中断处理一节中却屏掉了这个功能因为一进入中断处理,就禁止中断,所以不管其它中断优先级有多高都没有用的,这样做优点是简单了,但不好之处显而易见,特别在相关中断处理函数如果进入了死循环,那么整个系统就死了,而且时间片也变得不准确了,反正都不用实时,也不需要实时钟支持嘛至于中断优先级设置请参阅芯片资料

  6.进程调度的实现,也就是do_timer函数(时钟中断处理函数),有一个全局变量指针,指向的就是当前任务结构数组(或者链表),当时钟中断时,就进入此函数中,首先判断任务结构体中的时间片是否用完,如未用完,就减一,然后退出中断,让CPU继续运行当前的任结构,若用完了时间片,就重置时间片,并重新寻找任何结构数组中的下一个等待

  运行的任务,若找到了,就切换至新的任务,至于如何切换,请见下一页描述,如果未找到就切换到IDLE任务(类似于Linux,呵呵,所有的处理就是模仿Linux,由于本人水平太差,所就不能自创一招),注意:为了简单,所以没有实现任务优先级,也未实现任务休眠等,也就是说只要静态地决定了有十个任务,这十个任务就按先后顺序一个一个执行而且每个任务都不允许结束,就是说在每个进程中的最后一句代码都必须用死循环,不然的话系统就跑飞了),还有一点,进程不支持信号,没有休眠与唤醒操作,这个CPU就是不停地在运行,呵呵,反正CPU又不是人,所以不需要人权的哈!!!这种调度是不是简单得不能再简单了?????!!!!

  7.串口不使用中断,这就是最大可能的降低难度,串口使用论询的方式来实现读写(当然是阻塞的方式了哦,而且只有写,不允许读,因为读的时候需要涉及到采用中断方式,因为轮询方式有个不好的地方,那就是正在读的时候,这里有可能当前进程的时间片用完了,系统切换到另一个进程,这里你在PC机的串口输入的数据就丢弃了,唉,又是为了简单嘛)

  8.最后一步就是MIAN函数的最后一部分,将本进程当作IDLE进程(相当于修改任务结构数组中的数据),开启中断,将当前进程加入一段死循环,以免它退出去。

  9.编译你的BOOTLOADER,KERNEL,并烧写至FLASH,反复调试

  10.至此将你的at91rm9200(或者是其它相类似的芯片)的串口接上PC机,打开超级终端,打开板子电源,说不定你的操作系统就打印出了"hello,world"了!!!一个最简单的操作系统就出来了

 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

22/2<12

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网