找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2538|回复: 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 单片机教程网

快速回复 返回顶部 返回列表