今天是5月20日,上一篇文章也是今天发的,我是5月16日写下的。昨天晚上,实际上是今天早上凌晨1点左右我的操作系统终于运行了起来。这几天我有两个个晚上干到了2点。
我选择了ucos-ii来移植,网上有源代码,我手头上也有一本书,以前为了工作上的参考曾经学习过。在这里我发一下我的移植过程和一点心得吧!
第一步:当然是下载ucos-ii和bc31的编译器,这些东西网上很多。很快我就能在pc上运行那几个例子了。
第二步:我研究了一下我手头的电话机软件,虽然硬件上面没有任何文档,但是我有源代码。我留下了从启动开始的代码,直到它启动操作系统。同时我需要在没有操作系统支持的情况下使用那个小小的液晶显示屏,没有它我无法知道我的代码是否运行顺利。这花了我一点时间,大概是一天吧(公司现在根本就没有工作)。当我可以撇开原来的操作系统(VRTX)使用显示代码后我删除了原来的所有代码,只留下启动代码和显示驱动代码。
第三步:我需要选择编译器了,由于我的板子的CPU是80186,这让我可以选择网上下的那个BC,或者是我手头上的这个电话软件的编译器,可是由于我手头这个编译器我是有文档的,我自然选择了我手头的编译器。最后发现为了编译那ucos-ii的那些代码所花的精力是我这次移植中最多的。由于c编译器的不同,inline assembler 的形式有点不一样,这个还是比较好解决。还有不支持_DS这样使用寄存器,这个我用inline assembler替代了。在处理那个汇编文件的编译时,由于一个小小的失误让我头大了两个晚上。真的很郁闷,其实问题很小可是编译时不出问题,直到link时才出问题,让我查得好辛苦。
第四步:单独编译通过ucos-ii后,我还是先把make file和link用的cmd文件好好整理了一下,都说磨刀不误砍柴工,我觉得做软件的人一定要切记这一点。
第五步:连接启动代码和ucos-ii。把ucos中断和时钟中断挂上是最主要的了。其他的就是要在主任务(第一个任务)里插入显示代码。只要在这里看到显示就说明我已经几乎成功了。因为任务代码是需要操作系统来调度的。幸运的是这一步竟然很快就成功了,我知道如果这一步不成功将有可能很大的打击我的信心,因为我了解这将很难去查原因。
第六步:我还是想让这个ucos-ii做点什么吧,我选择了创建一个任务在显示器左上角上循环显示从0到9每显示一次延时一秒。这样就能看到这个任务的正常运行。当然这个就更加顺利了。
到现在我终于完成了一次操作系统移植。中间还有一点小小的心得,下一篇再来谈谈吧!