久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4658|回復: 0
打印 上一主題 下一主題
收起左側(cè)

Core_cm3.c MDK編譯問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99624 發(fā)表于 2015-12-27 05:07 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式

STM32,MDK升級5.0后,編譯出現(xiàn)問題,本人用的是win8.1,開始因為一直需要聯(lián)機而不得不停止工作,后來用管理員身份運行MDK,問題的到解決,但后續(xù)編譯又出現(xiàn)如下問題error:L6002U: Could not open file ..outputcore_cm3.o: No such file ordirectory", 沒有產(chǎn)生core_cm3.o。一時間在網(wǎng)上也沒有找到好的解決方案,后來就索性把core_cm3.c從工程中移除,編譯通過了,但是不知道會不會出現(xiàn)其他未知問題。最后發(fā)現(xiàn)是CMSIS1.x和CMSIS2.x不兼容的問題,解決方案是從ARM官網(wǎng)下載最新的CMSIS文件,取而代之。

STM32從3.0庫開始引入了CMSIS,CMSIS是Cortex微控制器軟件接口標準(Cortex MicroControllerSoftware InterfaceStandard)的縮寫,這個是ARM定制的一個用于Cortex-M系列的一個標準,主要是為了提供通用api接口來訪問內(nèi)核和一些片上外設,提高代碼的可移植性。

CMSIS有三個層:核內(nèi)外設訪問層Core Peripheral AccessLayer(CPAL),中間件訪問層Middleware Access Layer(MWAL),設備訪問層(DevicePeripheral Access Layer)。

CPAL用于訪問內(nèi)核的寄存器和組件,如NVIC,調(diào)試系統(tǒng)等。該層是由ARM實現(xiàn)的。

MWAL用于對中間件的訪問,現(xiàn)在該層還未實現(xiàn)。(也不知道所謂的中間件是什么東西)。

DPAL用于定義一些硬件寄存器的地址和一些外設訪問函數(shù),由芯片制造商實現(xiàn)。

CPAL層的實現(xiàn)就是Core_cm3.c文件,DPAL層的實現(xiàn)就是system_stm32f10x.c文件(似乎還應該加上外設的函數(shù)庫)。

接下來就來了解一下Core_cm3.c里面有什么東東:

首先是匯編關(guān)鍵字__ASM和__INLINE的宏定義,支持不同的編譯器。由于使用的是Keil,所以就只看第一種,__CC_ARM。

這里面的函數(shù)調(diào)用都只符合ARM過程調(diào)用標準的,如R0到R3用作參數(shù)和返回值傳遞,這也是這里面唯一用到的。

此外,在Keil中使用了__asm關(guān)鍵字后,編譯器不會為函數(shù)增加返回指令,所以需要自己編寫返回命令,也就是每個函數(shù)后面的 bx lr。

1.    __ASM uint32_t __get_PSP(void):獲取進程堆棧指針PSP。

2.    __ASM void __set_PSP(uint32_t topOfProcStack):設置PSP。

3.    __ASM uint32_t __get_MSP(void):獲取主堆棧指針MSP。

4.    __ASM void __set_MSP(uint32_t mainStackPointer):設置MSP。

5.    __ASM uint32_t __REV16(uint16_tvalue):反轉(zhuǎn)半字中字節(jié)順序,如0xABCD反轉(zhuǎn)后得到0xCDAB。

6.    __ASM int32_t __REVSH(int16_tvalue):反轉(zhuǎn)字節(jié)順序,并做符號拓展。就是在__REV16函數(shù)得到的結(jié)果上再進行一次符號拓展。這兩個函數(shù)主要是方便進行大小端的切換。

7.    __ASM void__CLREX(void):清除由LDREX指令造成的互斥鎖。LDREX和STREX是Cortex用來實現(xiàn)互斥訪問,保護臨界資源的指令,LDREX執(zhí)行后,只有離它最近的一條存儲指令(STR,STREX)才能執(zhí)行,其他的存儲指令都會被駁回,而CLREX就是用于清除互斥訪問狀態(tài)的標記。

8.    __ASM uint32_t __get_BASEPRI(void):獲取BASEPRI寄存器的值,優(yōu)先級號高于該寄存器的中斷都會被屏蔽(優(yōu)先級號越大,優(yōu)先級越低),為零時不屏蔽任何中斷。

9.    __ASM void __set_BASEPRI(uint32_t basePri):設置BASEPRI的值。

10.  __ASM uint32_t__get_PRIMASK(void):PRIMASK是一個只有一位的寄存器,置位時屏蔽絕大部分的異常中斷,只剩下NMI和HardFault可以響應。

11.  __ASM void__set_PRIMASK(uint32_t priMask):設置PRIMASK的值。

12.  __ASMuint32_t __get_FAULTMASK(void):FAULTMASK也是一個只有一位的寄存器,為1時只有NMI才能響應,其他異常與中斷全部被屏蔽。

13.  __ASM void__set_FAULTMASK(uint32_t faultMask):設置FAULTMASK的值。

14.  __ASM uint32_t__get_CONTROL(void):獲取CONTROL的值。寄存器CONTROL只有兩位。CONTROL[0]選擇特權(quán)級別,0為特權(quán)級,1為敵用戶級。CONTROL[1]用于選擇堆棧指針,0為MSP,1為PSP。

15.  __ASM void__set_CONTROL(uint32_t control):設置CONTROL寄存器的值。

BASEPRI,PRIMASK,F(xiàn)AULTMASK,CONTROL都只能在特權(quán)模式下被修改。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞羞在线视频 | 北条麻妃av一区二区三区 | 午夜激情视频在线 | av在线天天 | 国产日韩视频 | 久久精品一 | 国产精品一区二区久久精品爱微奶 | 亚洲欧美一区二区三区国产精品 | 黄色毛片在线看 | 欧美v日韩 | 免费成人毛片 | 青春草91| 亚洲一区网站 | 成人自拍视频 | 国产精品五月天 | 91在线视频在线观看 | 综合国产第二页 | 亚洲视频www | 亚洲精品电影在线观看 | 亚洲精品国产偷自在线观看 | 成人在线 | 一色一黄视频 | 欧美日韩国产高清 | 美女毛片免费看 | 国产精品高清一区二区 | 日韩精品在线视频 | 欧美第一区 | 超碰最新在线 | 国产精品综合 | 国产精品久久久久久模特 | 欧美一区二区三区久久精品 | 午夜免费成人 | 欧美精品第一页 | 国产精品不卡一区 | 国产成人在线视频 | 黄色激情毛片 | 蜜臀久久99精品久久久久野外 | 国产精品99久久久久久www | 91久久精品国产 | 国内自拍视频在线观看 | 精品国产乱码久久久久久图片 |