μC/OS-II操作系统在STM32上的移植
详细介绍μC/OS-II操作系统在STM32上的移植过程,引导初学者完成基本的操作系统架构的创建。建立工程使用(我使用版)在目录下建立工程,工程名为。选一个系列的芯片,哪一个都无所谓(我选的是因为我的板子就是用这个芯片),接下来要注意的是当弹出是否拷贝启动代码到工程文件夹时要选,因为标准外设厍里已经有启动代码了。将里的顶层日录名改为,并将第一个名改为把日录下所有和文件加载到工程里的在下建立一个目录用来放置系统初始化代码。把拷贝到文件夹拷贝到文件夹中。是中断服务程序文件。是标准外设库的配置文件,对于工程中不需要的外设,可以注释掉里面的包含的头文件。这里我建议先仅留下,用到什么再打开什么,这样编译起来快一点,当然也可都留着。使用标准外设库事实上标准外设库的使用在中的节中已有说明,下面我把其中的步骤罗列一下根据所选芯片,把中的启动代码加到工程中,这一步在上面凵经做过了。在的行,根据所选芯片类型,去掉相应注释,这里我去掉行的注释(大谷量型片)去掉行的注释,启用标准外设库。在的行,根据所选芯片主频,去掉相应注释,默认注释已去掉,如果你的芯片主频是,就不用做修改了,这里我的芯片是注释去掉注释跑马灯程序现在可以使用标准外设库了,下面以一个简单的跑马灯程序说明。在日录下建立作为系统入口在下建立一个日录用来放置板级支持代码,建立代码如下:在中建立组,并将各种代码加入。在工程的选项卡的中添加选项卡中选选项卡中选选项卡选打钩,这一步大家可以根据自己手上的仿真器做不同选择。编译运行。在上的移植详解虽然目前网上凵经有不少关于在上的移植版本,包括也有官方移植版本。但这些版本具体是怎么移植出来的,又该怎么基于移植好的开发应用软件,网上介绍的并不多。这里介绍一下我的移植经历,希望对大家有所帮助。我的移植基本上是从零开始的。首先想要做好移植,有两方面的內容是必须要了解。日标芯片内核原理虽然我们移植的目标芯片是,但操作系统的移植基木是针对内核(以下简称)而言的,所以我们只需了解内核就好了。片就是内核加上各种各样的外设。怎么才能了解呢?看一本书权威指南(宋岩译,网上多的很)就好了,很多同学可能想,看完这本书移植的新鲜劲都没了,因此我把该书和移植有关的章节都刎了出来,并对其中的重点内容进行介绍,我数了数相关章节还不到页,就这点内容,总要看了吧。相关章节如下概览主要了解的概貌。刚开始看时不用追求仝部理解,后面会有详细介绍,很多内容多看几遍就明白。其中指令集,只要了解,只使用就了基础寄存器组通用寄存器堆栈寄存器有两个,和同时只能看见一个引用时,引用的是正在使用的那个可用于异常服务和应用程序只能用于应用程序系统复位后,用的堆栈指针是连接寄存器,又名,存储返冋地址程序计数寄存器,又名特殊功能寄存器程序状态字寄存器组(中断屏蔽寄存器组(控制寄存器(程序状态字寄存器组()分为应用程序中断号执行每个都是位,由于这个寄存器有效位是错开的,因此可以组合访问。中断屏蔽寄存器组(),这三个寄存器用于控制异常的使能和除能。控制寄存器()它有两个作用:定义特权级别选择当前使用哪个堆栈指针操作模式和特权极别操作模式处理者模式和线程模式异常处理:处理者模式主程序:线程模式不区分特权级和用户级,程序始终工作在特权级这两个堆栈指针的切换是全自动的,就在出入异常服务例程时由硬件处理。没什么好讲的,需要看。复位序列初值初值复位向量异常异常类型分为系统异常编号和外部中断大于优先级支持个固定的高优先级和多达级的可编程优先级。在中,每个中断都有一个优先级配置寄存器(个,用来配置该中断的优先级。但该寄冇器并不是每个位都被使用,不同制造商生产的芯片不相同,譬如使用位,也就是说支持个可编程优先级(参考注意该寄存器是以对齐的,因此每个中断的优先级配置寄存器位有效,位无效。对于优先级,又分为抢占优先级和亚优先级,中的应用程序中断及复位掉制寄存器的优先级分组描述了如何划分抢占优先级和亚优先级什么意思?以为例,优先级配置寄存器不是位有效吗,如果中的优先级分组值为,则优先级配置寄冇器的位确定抢占优先级,位确定亚优先级。此时所有中断有个抢占优先级,每个抢占优先级有个亚优先级。抢占优先级高的中断可以抢占抢占优先级低的中断,即抢占优先级决定了中断是否可以嵌套相同抢占优先级的中断不能嵌套,但当抢占优宄级相同的异常有不止一个到来时,就优先响应亚优先级最高的异常。参考附求表表中断优先级寄存器阵列共系统异常优先级寄冇器共个优先级相同,看中断号,中断号小的优先。向量表初始在处,可以通过向量表偏移量寄存器(地址:)更改,般无需更收。中断输入及挂起行为需要看。异常可不看和主要用在分特权级和用户级的操作系统,不区分特权级和用户级可以不管这个东西。这里说点题外话,一开始我很奇怪为什么会提供这种中断,因为这种中断一般都是用在大型的操作系统上,如系统上,可又不提供,应该是无法移植系统。后来我才知道是针对没有的嵌入式系统而设计的不过还是很怀疑有人会在像这种芯片上用中断主要做上下文切换,也就是任务切换,是移植过程中最重要的中断。主要有两点中断是手工往的悬起寄存器中写产生的(由写)中断优先级必须设为最低在讲移植代码时会介绍具体是如何做的。对于的部分应认真研读一下。与中断控制负责芯片的中断管理,它和内核紧密相关。如果对于中断配置不是很了解,可以看看节讲述了定时器,需要看。中断的具体行为中断/异常的响应序列当开始响应一个中断时以及入栈取向量选择堆栈指针,更新堆栈指针,更新连接寄存器,更新程序计数器对移植米说,需要注意异常返同在中,进入中断时,寄存器的值会被自动更新。节对史新后的值进行说明。这里统称。返回时通过把往里写来识别返回动作的。因为是一个特殊值,所以对于,汇编语言就不需要类似这种指令,而用语言开发时,不需要特殊编译器命令指示个函数为中断服务程序。实际上,中断服务程序如果是代码编写,汇编成汇编代码,函数结尾一般是嵌套的中断只要注意:中断嵌套不能过深即可。和这两节说明对中断的响应能力大大提高了,主要是硬件机制的改进。但对移植来说,并不需要关注异常返回值对不同状态进入中断时,寄存器的值进行说明,需要看。这里有一点需要注意,该点在讲移植代码时再介绍利对移植来说,并不需要关注。的低层编程这·章仅需关注节,因为对移植来说汇编与的接口是必须面对的。汇编与的接口有两点需要知道当主调函数需要传递参数(实参)时,它们使用。其中传递第一个,传递第个在返冋时,把返冋值写到中在函数中,用汇编写代码时,可以随便使用,而使用则必须先以上内容和移植多少都有些关系,刚开始看,可能不太明白,多看几遍就好了。
- 2020-12-07下载
- 积分:1
基于Matlab读取标准RINEX格式的GPS星历数据
基于Matlab读取标准RINEX格式的GPS星历数据,采用Matlab直接读取Rinex文件张妮,等基于 Matlab读取标准 RINEX格式的GPS星历数据navdata(i). day str2num(line(10: 12));Le Edit yie seb finds Helpnavdata(i). hour=str2num (line(13: 15));navdata(i). minute str2num(line(16: 18))navdata (i).second str2num (line(19: 22));navdata(i). af0= str2num(line(23: 41))2:s10122-0041.4e012]【5.917e012]t30e95a-012navdata(i). afl str2num (line(42: 60));4.480-00navdata(i). af2 str2num (line(61: 79));4.600T+00619.8348←[6.419e007line fgetl(fid); %o second linem…2107007]navdata(i). aode str2num(line(4: 22))205-00【--007[7.2643c0090.9161【0.922】navdata().crs str2num(line(23: 41))navdata (i).dn= str2num(line(42: 60))图3读取星历数据结果navdata(i) Anomaly str2num (line(61: 79))Fig 3 Reading result of ephemeris dat4)关闭文件 status= fclose(fid)。骤,利用 Matlab矩阵的计算优势,很方便地计算不同时刻卫22星历数据的读取星的坐标,此外,还可方便查看卫星导航表层信息,判断导航星历数据的读取采用结构体数组显示的相关命令读取,数据的质量。若要获取某个卫星的相关参数可输入如示例命令:>>navdata(1)。获取结果如图2所示,为1号卫星参数读取结果3结论利用 Matlab以矩阵为单位进行计算的优势对 RINEX文件进行读取,较其他语言简单易行,结果精确,程序可移植性好,便于后续数据处理,同时还可利用 Matlab的仿真功能,实现卫星动态变化的实时模拟afl:1.47T9e-012参考文献:[1]陈东银,刘立龙,陈雷.GPS导航定位技术中面向对象读取 RINEX格式数据!测绘与空间地理信,2009(6):41-43.chen DorInCHen Lei. An ohmethod of reading rineX formatdat in GPS navigation tech-图21号卫星参数读取结果nology [J]. Geomatics and Spatial Information TechnologyFig. 2 Reading result of parameter of satliete NO.2009(6):41-43也可利用 Matlab元包数组,将数据存放并显示出来,具|2 I Gurtner W. RINEX: The receiver independent exchange for体实现代码如下mat: Version 2.10[M] Canada: Astronomical Institute UniverFN=fieldnamesnavdata)sity of Berne, 2002size=size(FN)3]孟广祥,郭标明.CPS接收机(OEM)二进制文件向 RINEXnavdata year;文件的转换[,测绘工程,2009(10:18-21.nav data=cell(oh+1);MENG Guang-xiang. Guo Biao-ming. The transformationsIzefrom GPS receiver (OEM) binary data to RINEX file[J]. Enfor i= 2: noph +1gineering of Surveyying and Mapping, 2009(10): 18-21onavcell=char(navdata year)[4]陈桂珍,戴建军.GPS-OEM原始数据向 RINEX格式转换nav_data(n, 1= char(FN(n));的方法[测绘技术装备,2006(4):26-27nav_data n, i= navdata(i-1).(char(FN(n)))CHENG Gui-zhen, DAI Jian-jun. The transformation fromGPS-OEM orignal data to RINEX Format[J]. Surveying techendnical equipment, 2006(4): 26-27读取结果如图3所示。5]张志涌.精通 Matlab6.5[M]北京:北京航空航天大学出版采用 Matlab软件读 RINEX导航文件,可以将文件所有社,2004的数据用矩阵保存,数据的显示精度不仅不会影响计算精6 Chapman Stephen J. Matlab Programming for engineers [M度,而且可以随时修改,并可根据卫星坐标的计算公式和步北京:科学出版社,200325基于Ma1ab读取标准RINX格式的GPS星历数据旧万据WANFANG DATA文献链接作者张妮,王标标, ZHANG NI, WANG Biao-biao作者单位张妮, ZHANG Ni(西安工业大学北方信息工程学院,陕西,西安,710025),王标标, WANG Biaobiao(中国人民解放军96275部队,河南洛阳,471003)刊名:电子设计工程sTc英文刊名ELECTRONIC DESIGN ENGINEERING年,卷(期):2010,18(8参考文献(6条)1. Chapman Stephen J Matlab Programming for engineers 20032.张志涌精通 Matlab6.520043.陈桂珍;戴建军 GPS-OEM原始数据向 RINEX格式转换的方法[期刊论文]测绘技术装备2006(044.孟广祥;郭标明GPS接收机(OEM二进制文件向 RINEX文件的转换2009(10)5. Gurtner W RINEX: The receiver independent exchange format: Version 2.10 2002陈东银;刘立龙;陈雷GPS导航定位技术中面向对象读取 RINEX格式数据2009(06)本文链接http://d.g.wanfangdata.comcn/periodiCaldzsjgc201008007.aspx
- 2020-11-02下载
- 积分:1