OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4012|回复: 0

core_cm3.c与core_cm3.h

[复制链接]

16

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-12-21
在线时间
18 小时
发表于 2015-12-26 21:16:06 | 显示全部楼层 |阅读模式
1金钱
core_cm3.h中的函数与core_cm3.c中对应的函数有什么关系?
比如,调用__get_CONTROL,找到的是core_cm3.h中的,core_cm3.c文件去掉也可以
但是__get_MSP,则是在core_cm3.h中**,在core_cm3.c中定义的,必须有core_cm3.c
没太搞清楚这两个文件的用意
另外,新版本core_cm3.h又包含了两个头文件core_cmInstr.h与core_cmFunc.h,而这两个头文件里面都是空的,都包含了一个cmsis_armcc.h
其实本质上是一样的,把原来core_cm3.h中的部分内容挪到了cmsis_armcc.h里面,可能是为了移植更方便,结构更合理一些吧
不过,新版本不需要core_cm3.c了,cmsis_armcc.h中实现了__get_MSP,但是看不懂,也不是汇编,是不是在库文件中实现的呀

core_cm3.h:
static __INLINE uint32_t __get_CONTROL(void)
{
  register uint32_t __regControl         __ASM("control");
  return(__regControl);
}
extern uint32_t __get_MSP(void);

core_cm3.c中为:
__ASM uint32_t __get_CONTROL(void)
{
  mrs r0, control
  bx lr
}
__ASM uint32_t __get_MSP(void)
{
  mrs r0, msp
  bx lr
}

cmsis_armcc.h中为:
__STATIC_INLINE uint32_t __get_CONTROL(void)
{
  register uint32_t __regControl         __ASM("control");
  return(__regControl);
}
__STATIC_INLINE uint32_t __get_MSP(void)
{
  register uint32_t __regMainStackPointer     __ASM("msp");
  return(__regMainStackPointer);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 16:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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