充电宝什么品牌好| 梦见自行车是什么意思| hpv亚临床感染是什么意思| 用膳是什么意思| 网络cp是什么意思| 癌胚抗原是什么意思| 真丝姆米是什么意思| 月经量少吃什么药调理| 什么是甲亢| 小伙子是什么意思| 舌系带短有什么影响| 吃什么补白蛋白最快| 彩色的什么| 前列腺钙化有什么影响| 什么是肥皂剧| 33年属什么生肖| 腋下疣是什么原因造成的| 头七是什么意思| 天乙贵人什么意思| 肾结水有什么危害| 嗜酸性粒细胞偏低是什么意思| 1024是什么星座| 面包属于什么类食品| 88年属什么的生肖| 什么叫总胆固醇| 胎儿左侧侧脑室增宽的原因是什么| 家里有壁虎是什么征兆| 为什么手术前要禁食禁水| 五味是什么| 丰都为什么叫鬼城| 梅菌是什么病| 阴道放气是什么原因| 乙肝核心抗体高是什么意思| cvc是什么| 化作风化作雨是什么歌| tf是什么意思| 吴五行属什么| 淋巴发炎是什么症状| 什么人不能吃海带| 吃东西想吐是什么原因| wh是什么颜色| 养肝护肝吃什么最好| 脑梗什么原因导致的| 对虾是什么虾| 什么是射频| 什么人容易得间质瘤| 为什么订婚后容易分手| 梦见好多水果是什么预兆| 痛风病人吃什么菜| 什么叫手足口病| 小孩肚脐眼上面疼是什么原因| 儿童结膜炎用什么眼药水| 李白有什么之称| a-l-岩藻糖苷酶偏高是什么原因| 事半功倍什么意思| 医生说忌生冷是指什么| 女人跑马是什么意思| 草单斤是什么字| 吃石斛有什么作用| 咖啡对身体有什么危害| legrand是什么牌子| 酵母样真菌是什么意思| 蚩是什么意思| sport什么品牌| 瘦西湖为什么叫瘦西湖| 神仙是什么意思| 五官指什么| 一个合一个页读什么| 族谱是什么意思| 舍我其谁是什么意思| 9月份是什么季节| 生理期不能吃什么水果| 血脂高是什么原因引起| 五指毛桃有什么作用| 上海话娘娘是什么意思| 天长地久是什么意思| 苯佐卡因是什么| 胆结石吃什么最好| 容易受惊吓是什么原因| 心机什么意思| 手脱皮是什么原因| 后羿属什么生肖| 舌头肥大是什么原因| 沙漠有什么动物| 牙龈疼是什么问题| 早起嘴巴苦什么原因| 没有生抽可以用什么代替| 儿童急性肠胃炎吃什么药| 吃什么东西会长胖| 邋遢什么意思| 苯佐卡因是什么药| 基尼是什么货币| freeze是什么意思| 长痣是什么原因| 梦见老人去世预示什么| 附身是什么意思| 林冲的绰号是什么| 四面八方什么生肖| mop是什么意思| 脖子上有结节挂什么科| 曹操姓什么| 觅食是什么意思| 玉如意什么属相不能戴| 什么时候才能够| 医学hr是什么意思| 念珠菌和霉菌有什么区别| d3是什么| 什么的李子| 湿热吃什么食物好得快| 9点到11点是什么经络| 肾盂肾炎吃什么药好| 什么是花青素| 粗粮是什么| 感情洁癖什么意思| 得莫利是什么意思| 什么血型的人最聪明| 洗耳恭听什么意思| 血尿是什么颜色的| 夜明珠代表什么生肖| 人为什么会做梦| m标志是什么牌子衣服| 打车费计入什么科目| 项羽姓什么| dhea是什么| 正常大便是什么颜色| 锅巴吃多了有什么危害| 宫颈多发纳氏囊肿是什么意思| 女生长胡子是什么原因| 感冒拉肚子吃什么药| 胸口闷疼是什么原因| 胳膊上的花是打了什么疫苗| 与五行属什么| 尿液弱阳性什么意思| 黄梅时节是什么季节| 眩晕症是什么病| 大姨妈期间吃什么好| 三有动物是什么意思| 花胶是什么鱼的鱼肚| 手麻脚麻吃什么药| 黄花胶是什么鱼的胶| 多字五行属什么| 喝可乐有什么好处| 什么是水象星座| 肝郁有什么症状| 过度纵欲的后果是什么| 学习是什么| 十二指肠溃疡吃什么中成药| 什么是边界感| 花椒吃多了对身体有什么影响| 四川有什么烟| 喝酒前吃什么不容易醉| 兵马俑在什么地方| 脸上皮肤痒是什么原因| 哮喘咳嗽吃什么药好得快| 贫血是什么意思| 偏头痛什么原因| 吃什么补铁| 幡是什么意思| 疥疮是什么病| 里是什么结构| 猝死是什么意思| 什么是盗汗| 金针菇炒什么好吃| 骨质硬化是什么意思| 忠实的什么| 举足轻重是什么意思| 人体最大器官是什么| 身体上有小红点是什么病| 苦瓜为什么是苦的| 浮肿是什么原因引起的| 碱性磷酸酶是什么| 子宫复旧是什么意思| 中老年吃什么钙片比较好| 为什么尿会很黄| 植脂末是什么| 中医科是看什么病的| 什么快递便宜| 喉咙疼吃什么水果好| 中秋吃什么| 鸡五行属什么| 怀孕后壁和前壁有什么区别| 睡意是什么意思| 什么的夜晚| rh血型鉴定阳性是什么意思| 鹿加几念什么| 什么蚂蚁有毒| 肾结石有什么症状| 腿肿脚肿是什么病的前兆| 鹰嘴桃什么时候成熟| 小确幸是什么意思| 团委书记是什么级别| 追求完美的人什么性格| 梦见大领导有什么预兆| honor是什么牌子的手机| 小孩阑尾炎是由什么原因引起的| 激素六项是查什么的| 蒋介石为什么不杀张学良| 一案双查是什么意思| 念珠菌性阴道炎有什么症状| 间断性是什么意思| 县长什么级别| 智多星是什么意思| 金达莱是什么花| 检查心脏做什么检查| 知行合一是什么意思| 心五行属什么| 娇滴滴是什么意思| 经期喝茶有什么影响| 全身酸痛失眠什么原因| 光宗耀祖是什么意思| 皮下囊肿挂什么科| 胡塞武装是什么| 眼睛双重影什么原因| 什么是假声| 手上起小水泡痒是什么原因| 食糜是什么意思| 海带吃了有什么好处| 什么是马克杯| 老是头疼是什么原因| 针灸后需要注意什么| 昀是什么意思| 乌龙茶属于什么茶| 孩子贫血吃什么补血最快| 肌张力高吃什么药| 指甲小月牙代表什么| 蟋蟀是靠什么发声的| 结石挂什么科| 高密度脂蛋白是什么| 子宫内膜异位症有什么症状| 慎重考虑是什么意思| 69式是什么意思| 什么是蜘蛛痣图片| 网球肘用什么膏药效果好| tst是什么意思| 牙疼吃什么药最好最有效| oba是什么意思| 雅丹是什么意思| 护照免签是什么意思| 终其一生下一句是什么| 燕然未勒归无计的上一句是什么| 东南五行属什么| 521代表什么含义| 晚上睡觉流口水什么原因| 手脚麻木是什么原因引起的| 梦见丧尸是什么预兆| 胸前骨头疼是什么原因| 青海有什么湖| 拆封是什么意思| 梦见捡到钱是什么意思| 宫颈纳氏囊肿是什么| 感冒黄鼻涕吃什么药| 六味地黄丸有什么副作用| 渐行渐远是什么意思| 洁身自好什么意思| 爱吃甜食是缺乏什么| 刻薄什么意思| 试管什么降调| 胃阴虚吃什么中成药| 老放屁什么原因| 现在摆摊卖什么东西最好卖| pa是什么元素| 168红包代表什么意思| 什么叫肾病综合征| 狐臭手术挂什么科| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于CMSIS标准的 Cortex-M3应用软件开发

2017江苏扬州市高校毕业生到村(社区)任职考试选聘

作者: 时间:2025-08-05 来源:网络 收藏
百度 美国200多万农场主现在应该会因为特朗普签署的对华贸易备忘录而忧心。

  引 言

  ARM公司于2025-08-05发布了ARM Cortex微控制器软件接口标准(:Cortex Microcon-troller Software InteRFace Standard)。是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了连续的、简单的处理器软件接口,简化了软件复用,降低了上操作系统的移植难度,并缩短了新入门的微控制器开发者的学习时间和新产品的上市时间。

  根据近期的调查研究,软件开发已经被嵌入式行业公认为最主要的开发成本。图1为近年来软件开发与硬件开发成本对比图。因此,ARM与Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER和ST等诸多芯片和软件厂商合作,将所有Cortex芯片厂商产品的软件接口标准化,制定了标准。此举意在降低软件开发成本,尤其针对新设备项目开发,或者将已有软件移植到其他芯片厂商提供的基于Cortex处理器的微控制器的情况。有了该标准,芯片厂商就能够将他们的资源专注于产品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。

近年来软件开发与硬件开发成本对比图

  1 基于CMSIS标准的软件架构

  如图2所示,基于CMSIS标准的软件架构主要分为以下4层:用户应用层、操作系统及中间件接口层、CMSIS层、硬件寄存器层。其中CMSIS层起着承上启下的作用:一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。也正是如此,CMSIS层的实现相对复杂。

基于CMSIS标准的软件架构

  CMSIS层主要分为3部分。

  ①核内外设访问层(CPAL):由ARM负责实现。包括对寄存器地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(如CONTROL和xPSR)定义。由于对特殊寄存器的访问以内联方式定义,所以ARM针对不同的编译器统一用_INLINE来屏蔽差异。该层定义的接口函数均是可重入的。

  ②中间件访问层(MWAL):由ARM负责实现,但芯片厂商需要针对所生产的设备特性对该层进行更新。该层主要负责定义一些中间件访问的API函数,例如为TCP/IP协议栈、SD/MMC、USB协议以及实时操作系统的访问与调试提供标准软件接口。该层在1.1标准中尚未实现。

  ③设备外设访问层(DPAL):由芯片厂商负责实现。该层的实现与CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL层提供的接口函数,同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。

  2 CMSIS规范

  (1)文件结构

  CMSIS的文件结构如图3所示(以STM32为例)。其中stdint.h包括对8位、16位、32位等类型指示符的定义,主要用来屏蔽不同编译器之前的差异。core_cm3.h和core_cm3.C中包括Cortex_M3核的全局变量声明和定义,并定义一些静态功能函数。system_device>.h和system_device>.c(即图3中的system_stm32.h和system_stm32.c)是不同芯片厂商定义的系统初始化函数SystemInit(),以及一些指示时钟的变量(如SystemFre-quency)。device>.h(即图3中的stm32.h)是提供给应用程序的头文件,它包含core_cm3.h和system_device>.h,定义了与特定芯片厂商相关的寄存器以及各中断异常号,并可定制M3核中的特殊设备,如MCU、中断优先级位数以及SysTick时钟配置。虽然CMSIS提供的文件很多,但在应用程序中只需包含device.>h。

CMSIS的文件结构

  (2)工具链

  CMSIS支持目前嵌入式开发的三大主流工具链,即ARM ReakView(armcc)、IAR EWARM(iccarm)以及GNU工具链(gcc)。通过在core_cm3.C中的如下定义,来屏蔽一些编译器内置关键字的差异。

程序

  这样,CPAL中的功能函数就可以被定义成静态内联类型(static_INLINE),实现编译优化。

  (3)中断异常

  CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。异常和中断标识符需加后缀_IRQn,系统异常向量号必须为负值,而设备的中断向量号是从0开始递增,具体的定义如下所示(以STM32为例):

程序

  CMSIS对系统异常处理函数以及普通的中断处理函数名的定义也有所不同。系统异常处理函数名需加后缀_Handler,而普通中断处理函数名则加后缀_IRQHandler。这些异常中断处理函数被定义为weak属性,以便在其他的文件中重新实现时不出现重复定义的错误。这些处理函数的地址用来填充中断异常向量表,并在启动代码中给以声明,例如:NMI_Handler、MemManage_Handler、SysTick_Handler、WWDG_IRQHandler等。

  (4)数据类型

  CMSIS对数据类型的定义是在stdint.h中完成的,对核寄存器结构体的定义是在core_cm3.h中完成的,寄存器的访问权限是通过相应的标识来指示的。CMSIS定义以下3种标识符来指定访问权限:_I(volatile const)、_O(volatile)和_IO(volatile)。其中_I用来指定只读权限,_O指定只写权限,_IO指定读写权限。

  (5)调 试

  嵌入式软件开发中的一个基本需求就是能通过终端来输出调试信息,一般可通过2种方式实现:一种是使用串口线连接板上的UART和PC上的COM口,通过PC上的超级终端来查看调试信息;另一种则是采用半主机机制,但有可能不被所用的工具链支持。基于核的软件调试突破了这样的限制,内核提供了一个ITM(Instrumentation Trace Macrocell)接口,通过SWV(Serial Wire Viewer)可调试由SWO引脚接收到的ITM数据。ITM实现了32个通用的数据通道,基于这样的实现,CMSIS规定用通道0作为终端来输出调试信息,通道31用于操作系统的输出调试(特权模式访问)。在core_cm3.h中定义了ITM_SendChar()函数,因此可通过调用该函数来重写fputc,以在应用程序中通过printf打印调试信息,并可通过ITM Viewer查看这些调试信息。有了这样的实现,嵌入式软件开发者就可以在不配置串口和使用终端调试软件的情况下输出调试信息,在一定程度上减少了工作量。

  (6)安全机制

  在嵌入式软件开发过程中,代码的安全性和健壮性一直是开发人员所关注的,因此CMSIS在这方面也作出了努力,所有的CMSIS代码都基于MISRA-C2004(Motor Industry Software Reliability Association forthe C programming language)标准。MIRSA-C 2004制定了一系列安全机制用来保证驱动层软件的安全性,是嵌入式行业都应遵循的标准。对于不符合MISRA标准的,编译器会提示错误或警告,这主要取决于开发者所使用的工具链。

  3 基于CMSIS标准的代码实现

  CMSIS降低了代码开发的难度,为了更好地诠释这一点,下面以一个基于STM32微处理器的简单例子来说明。代码实现如下:

程序

  可以看到用户程序中仅需短短的几行代码就实现了定时器的功能,每隔1 S报数1次,并可通过ITM窗口查看输出的调试信息。其中SystemInit()用来初始化时钟,SysTick_Config()用来配置系统定时器,而SysTick_Han-dler()用来处理系统时钟异常,该异常每1 ms发生1次。由于重写了fputc(),所以可通过printf()函数将调试信息打印到ITM窗口上,输出结果如图4所示。

输出结果

  结 语

  本文阐述了基于CMSIS标准的软件架构、规范,并通过一个实例更加清晰地解读了CMSIS作为一个新的基于Cortex-M核处理器系列的软件开发标准所具有的巨大潜力。它不仅降低了软件开发的难度,更减少了软件开发的成本。因此,工程师尽早掌握CMSIS标准,对进行基于Cortex-M3处理器的软件开发会大有帮助。



评论


相关推荐

技术专区

关闭
甲状腺是什么原因引起的 舌钉有什么用 心火旺喝什么茶 脚为什么会发麻 骨裂什么症状
茴香豆是什么豆 doneed是什么牌子 黄芪和什么搭配不上火 蓝帽子标志是什么意思 要强的女人是什么性格
EE什么意思 一片冰心在玉壶是什么意思 政客是什么意思 什么非常什么 膀胱炎看什么科
什么叫排比句 鉴定是什么意思 三言两语是什么生肖 肝血不足吃什么药 气短是什么意思
夏天煲什么汤好hcv8jop3ns5r.cn 吃完饭恶心想吐是什么原因hcv8jop3ns0r.cn 吃什么排气最快0297y7.com 手术后吃什么恢复快hcv7jop5ns4r.cn 吃猪肺有什么好处和坏处hcv8jop9ns3r.cn
急性青光眼是什么症状hcv8jop3ns0r.cn 优越感是什么意思hcv9jop4ns7r.cn 凌寒独自开的凌是什么意思hcv9jop0ns7r.cn 牙虫长什么样子hcv8jop5ns2r.cn 四菜一汤是什么意思hcv8jop3ns1r.cn
知柏地黄丸主治什么hcv7jop7ns1r.cn 清炖鸡汤放什么调料hcv8jop9ns1r.cn 马蜂蛰了用什么药hcv8jop2ns2r.cn 低蛋白血症吃什么最快hcv9jop4ns0r.cn 双星座是什么意思hcv9jop6ns8r.cn
什么不同成语hcv9jop2ns3r.cn 白带有血丝是什么原因hcv8jop5ns0r.cn 瓜子脸剪什么发型好看hcv8jop8ns5r.cn 什么叫风热感冒hcv9jop7ns9r.cn 抑郁挂什么科hcv9jop6ns3r.cn
百度