2

[自制操作系统] 第13回 磨刀不误砍柴工 - 李知行

 1 year ago
source link: https://www.cnblogs.com/Lizhixing/p/15937588.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

[自制操作系统] 第13回 磨刀不误砍柴工

目录
一、前景回顾
二、编写makefile
三、实现Assert断言
四、实现字符串操作函数
五、测试

一、前景回顾

  上一回我们详细地讲解了整个系统的中断工作流程,整个中断系统比较难的地方在于中断的执行流程,我开始学的时候对这一块也是比较模糊的,感觉不知从何入手。现在已经很清楚整个流程了,这里可以给读者一个建议,想象自己是CPU,当接收到中断信号后,根据中断的处理流程去看代码,应该很快就能看懂代码,不要单独去看某一块代码,这样代入性不强。这一回先暂停主线任务,先腾出手来把一些准备工作给完善了。

二、编写makefile

  这里为什么要插入makefile呢?在前面的代码中,如果读者都编译运行过的话,会发现实在是太太太麻烦了!每一个文件都要去编译,最后再链接。所以这里我们写一个自己的makefile,只需要一键make就可以。直接上代码:

ContractedBlock.gifExpandedBlockStart.gif

makefile

  我们新建了一个文件夹build,这个文件以后专门用于存放编译生成的.o文件。这里需要注意一个地方,因为考虑到ld链接的顺序,被依赖的文件应该放在前面。所以这里需要手动添加链接的文件。以后每新增一个.o文件,我们都需要自己手动修改一下makefile。这也是无奈之举。除了这个以外,我们以后只需要通过make就可以编译链接所有文件,通过make install命令就可以自动将生成的bin文件拷贝进硬盘并且启动系统。这个makefile我没有抄书上的,是根据自己的理解来写的。所以可能有些地方看起来很丑,不过能用就行了。

三、实现Assert断言

  Assert断言是什么意思呢?我以前学习stm32的时候,有些时候看源代码会有这种代码出现:

  

2593960-20220225210117600-772747068.png

  它就是一种Assert断言,什么意思呢?就是对传进来的表达式进行判断,如果为真就跳过,如果为假就报错。就是起到一种debug的作用,好让你知道当程序出错后,是错在哪个地方。在此之前,还需要完善一下interrupt.c和interrupt.h文件,然后在project/kernel目录下新建debug.c和debug.h文件。一并如下:

ContractedBlock.gifExpandedBlockStart.gif

interrupt.c

ContractedBlock.gifExpandedBlockStart.gif

interrupt.h

ContractedBlock.gifExpandedBlockStart.gif

debug.c

ContractedBlock.gifExpandedBlockStart.gif

debug.h

四、实现字符串操作函数

  这个没什么好说的,就是一些基本的字符串操作函数,为方便后面的使用。在project/lib/kernel目录下新建string.c和string.h文件,代码如下:

ContractedBlock.gifExpandedBlockStart.gif

string.c

ContractedBlock.gifExpandedBlockStart.gif

string.h

五、测试

  最后我们来测试一下前面的ASSERT函数的功能。修改main函数如下,不要忘记还要在makefile中增加debug.o和string.o。

ContractedBlock.gifExpandedBlockStart.gif

main.c

  最终运行结果如下,也就说明我们的ASSERT函数成功。

  

2593960-20220225220252020-180657596.png

  本回的内容就到此结束了,下一回合我们开始步入内存管理系统。欲知后事如何,请看下回分解。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK