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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3073|回復: 0
收起左側

stm32的Core_cm3.c文件

[復制鏈接]
ID:104126 發表于 2016-1-23 00:09 | 顯示全部樓層 |閱讀模式
參考了其它博客或資料,均已在最后列出。
      上一章提到了對于stm32的堆棧的研究。實際上在查詢資料時,看到有大神提到可以獲取棧的指針。因為一般要驗證都是存在棧溢出的問題,把他貼出來供大家研究。(我沒有實際驗證)
  • void HardFault_Handler(void)
  • {
  •   uint32_t r_sp ;
  •   r_sp = __get_PSP(); //獲取SP的值
  •   PERROR(ERROR,Memory Access Error!);
  •   Panic(r_sp);
  •   while (1);
  • }
  • 獲取​進程堆棧指針并打印出來!__get_PSP()函數為Core_Core_cm3.c中的函數。他這個函數解析一下供大家查看:
  • Core_cm3.c里面的東西
首先是匯編關鍵字__ASM和__INLINE的宏定義,支持不同的編譯器。由于使用的是Keil,所以就只看第一種,__CC_ARM
1. __ASMuint32_t__get_PSP(void):獲取進程堆棧指針PSP。
2. __ASMvoid __set_PSP(uint32_ttopOfProcStack):設置PSP。
3. __ASM uint32_t__get_MSP(void):獲取主堆棧指針MSP。
4. __ASMvoid __set_MSP(uint32_tmainStackPointer):設置MSP。
5. __ASMuint32_t __REV16(uint16_tvalue):反轉半字中字節順序,如0xABCD反轉后得到0xCDAB。
6. __ASMint32_t __REVSH(int16_tvalue):反轉字節順序,并做符號拓展。就是在__REV16函數得到的結果上再進行一次符號拓展。這兩個函數主要是方便進行大小端的切換。
7. __ASMvoid__CLREX(void):清除由LDREX指令造成的互斥鎖。LDREX和STREX是Cortex用來實現互斥訪問,保護臨界資源的指令,LDREX執行后,只有離它最近的一條存儲指令(STR,STREX)才能執行,其他的存儲指令都會被駁回,而CLREX就是用于清除互斥訪問狀態的標記。
8. __ASMuint32_t __get_BASEPRI(void):獲取BASEPRI寄存器的值,優先級號高于該寄存器的中斷都會被屏蔽(優先級號越大,優先級越低),為零時不屏蔽任何中斷。
9. __ASMvoid __set_BASEPRI(uint32_tbasePri):設置BASEPRI的值。
10.__ASM uint32_t__get_PRIMASK(void):PRIMASK是一個只有一位的寄存器,置位時屏蔽絕大部分的異常中斷,只剩下NMI和HardFault可以響應。
11.__ASM void __set_PRIMASK(uint32_tpriMask):設置PRIMASK的值。
12.__ASM uint32_t __get_FAULTMASK(void):FAULTMASK也是一個只有一位的寄存器,為1時只有NMI才能響應,其他異常與中斷全部被屏蔽。
13.__ASM void __set_FAULTMASK(uint32_tfaultMask):設置FAULTMASK的值。
14.__ASM uint32_t__get_CONTROL(void):獲取CONTROL的值。寄存器CONTROL只有兩位。CONTROL[0]選擇特權級別,0為特權級,1為敵用戶級。CONTROL[1]用于選擇堆棧指針,0為MSP,1為PSP。
15.__ASM void __set_CONTROL(uint32_tcontrol):設置CONTROL寄存器的值。
BASEPRI,PRIMASK,FAULTMASK,CONTROL都只能在特權模式下被修改。

還有兩個文件,一個是Core_cmFunc.h和Core_cmInstr.h  這兩個文件時干嘛的,第一個文件是不同編譯器下的一些系統級的匯編函數,第二個文件是不同編譯器下的指令,我猜Keil公司這樣做是為了兼容不同的編譯器做設計的。

最后剩下Core_cm3.h文件了,這個文件時內核文件,就是定義了一些Cortex-M3的寄存器和一些函數,包括NVIC,MPU,SCB,SysTick,Debug寄存器。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久 | 国产情侣啪啪 | 国产女人第一次做爰毛片 | 精品欧美一区二区中文字幕视频 | 亚洲国产一区视频 | av中文字幕在线 | 中文字幕 在线观看 | 中文字幕亚洲欧美日韩在线不卡 | 成人在线视频一区 | 精品视频亚洲 | 日日夜夜免费精品 | 麻豆久久久久久 | 羞羞视频免费观看 | 日本精品久久 | 一区二区三区四区视频 | 精品视频一区二区三区在线观看 | 国产一区三区视频 | 成人中文网 | 亚洲久久| 可以在线看的黄色网址 | 免费一级黄色电影 | 亚洲综合视频 | 99资源站| 成人国产精品久久久 | 中文字幕免费在线 | 日韩精品 电影一区 亚洲 | 81精品国产乱码久久久久久 | 中文字幕人成乱码在线观看 | 青青久久久 | 亚洲精品一区在线观看 | 天天人人精品 | 亚洲国产精品福利 | 久久精品国产一区二区电影 | 精品九九久久 | 蜜桃在线视频 | 免费一区| 精品久久久久久久人人人人传媒 | 亚洲视频一区在线观看 | av电影一区 | www久久久 | 久久精品成人热国产成 |