我们已经知道了单片机的组成,余下的问题是如何将它们的各部分连接成相互关联的整体呢?实际上,单片机内部有一条将它们连接起来的“纽带”,即“内部总线”。这些总线就像城市中的道路,CPU、ROM、RAM、I/O口、中断系统等就分布在“总线”的两旁,并和它连通。从而,一切指令、数据都可经内部总线传送。
不同型号的单片机硬件特征和软件特征均不尽相同。硬件特征是指单片机芯片的内部结构。要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标,包括功能特性、控制特性和电气特性等等(可以从生产厂商的技术手册中得到);软件特征是指指令特性和开发支持环境,指令特性包括寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等。开发支持的环境包括指令的兼容及可移植性,支持软件以及硬件资源。
.复位中断(Rest)。 CPU 复位以后就会进入复位中断,我们可以在复位中断服务函数里面 做一些初始化工作,比如初始化 SP 指针、 DDR 等等。
文章相对比较长,字数比较多,大家可以先打开头像关注我,之后慢慢看,///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了,私信我就可以哦~点我头像左下角黑色字体加我也能领取哦///
.未定义指令中断(Undefined Instruction),如果指令不能识别的话就会产生此中断。
.软中断(Software Interrupt,SWI),由 SWI 指令引起的中断, Linux 的系统调用会用 S WI指令来引起软中断,通过软中断来陷入到内核空间。
.指令预取中止中断(Prefetch Abort),预取指令的出错的时候会产生此中断。
.数据访问中止中断(Data Abort),访问数据出错的时候会产生此中断。
.IRQ 中断(IRQ Interrupt),外部中断,前面已经说了,芯片内部的外设中断都会引起此 中断的发生。
.FIQ 中断(FIQ Interrupt),快速中断,如果需要快速处理中断的话就可以使用
最后大家可以看一下stm32的启动文件
其中也有针对中断向量表的设置,虽然中断向量表的大小与内容与我提到的不完全相同,但大致的理解思路都是相同的。
进来具体看一下(我这是正点原子的精英板跑马灯程序)
序号1单词为vector正好就是向量的意思,也从另一方面说明这是中断向量表。
序号2就是我们刚才说的复位中断,由此可知程序会跳转Reset_Handler接着执行,我们再往下跟踪下去
上面的汇编代码相当于将main函数地址放入R0,然后跳转到这个地址,也就相当于跳转到了main函数 至于为什么是_main是因为_main是一个C语言提供的库函数,在这个函数里会跳转到main,所以终究是从这里到达main函数的。
序号3就是其他的中断向量,大家一起组成中断向量表,来给我们添麻烦(哦,不,是给我们带来知识)。
总结来说
汇编程序是必不可少的,就像stm32其实也有,只不过我们一般不需要进行修改,但是为了更加灵活的掌握,还是不得不去研究,就比如说有些店家提供的函数源码就会在汇编中进行一些文件的修改,我们听说的bootloader更加离不开汇编
早期嵌入式芯片:
·使用汇编语言。
·基本不使用操作系统。
基础条件成熟:
·硬件提升。MCU性能提升、存储容量提升。
·软件提升。编译器,操作系统,集成开发环境。
对单片机感兴趣的朋友可以找我,我录制了一些关于单片机的入门教程,有需要的童鞋找我拿就行,私信我“林老师”就可以拿~点击打开我的头像就能领取
为什么要使用操作系统?也就是使用嵌入式操作系统有什么好处?
1、操作系统可以降低开发难度。
操作系统协调了不同功能程序以让他们共同完成同一个工作。同时操作系统又隔离了各个功能程序让它们的耦合程度降低。这样就方便设计人员编写各个功能模块,同时整个系统的结构也更加清晰。特别是系统逻辑结构复杂,功能模块较多的情况下操作系统的这一优点体现的更加明显。
同时,由于用任务划分整个流程,编写程序的时候逻辑以及时序会相对简单。只需要考虑单个任务所完成的功能,不用过多的考虑人物之间的耦合关系。
2、增加代码可读性。给后续代码维护带来方便。
使用操作系统。可对代码进行层次管理,驱动归驱动,应用层归应用层。而且任务里的功能都很明显。每个任务的优先级,执行周期都是可以预期的。程序比较庞大的时候,拥有操作系统的程序的可读性将远远高于裸奔的芯片。(详情可以看看multiwii飞控的程序。。)
3、增加代码可移植性。
使用操作系统的时候,每个任务的执行时间,优先级,延时的长短。也就是大部分逻辑方面,操作系统中都已经设定好了。且对需要处理的事分成多个任务处理。每个任务相对独立。当需要对代码进行
好了,这期分享就到这里啦,觉得对屏幕前的你有帮助的麻烦一键三连,点赞收藏加关注哦,有问题的朋友也可以在评论区评论,或者私信我
热门跟贴