打印
[综合信息]

国产超低功耗华大单片启动文件详解及SystemInit函数分析

[复制链接]
2469|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2019-6-12 11:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
版权声明:本文为博主原创**,未经博主允许不得转载。 https://blog.csdn.net/lvk/article/details/84769297



启动代码文件名一般可命名为如startup_hc32xxxx.s。启动代码作用一般是:

1) 堆和栈的初始化

包括堆栈的大小,MSP(main stack pointer)值等。MSP的初始值在复位阶段取自存储区的第一个字(即0地址处的值)。

栈Stack: 由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。向低地址扩展。

堆Heap: 一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。向高地址扩展。

2) 向量表定义 
定义了各MSP初值,以及各个中断服务程序(ISR)的入口地址。

3) 中断服务程序 
CPU根据中断号从向量表中获取入口地址后,跳转至对应的ISR

4) 设置系统时钟频率
可在复位中断服务程序Reset_handler中调用系统时钟频率初始化程序

5) 中断寄存器的初始化


使用特权

评论回复
沙发
gwsan|  楼主 | 2019-6-12 11:15 | 只看该作者
6)进入C应用程序 
在复位中断服务程序即Reset_handler中实现进入C程序。如:

LDR  R0 , =_main  ;使用“=”表示LDR目前是伪指令。这里是把_main的地址给R0。

BX    R0                 ; BX是ARM指令集和THUMB指令集之间程序的跳转。

以下以华大单片机HC32L136K8TA的启动文件为例,对1) — 6)进行详细分析。

;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000

;然后在RAM中分配变量使用的堆

;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0000_0000,该中断向量表就从这个起始地址开始分配

;分配完成后,再定义和实现相应的中断函数,

;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进行链接。

;中断函数仅仅实现了Reset_Handler,其他要么是死循环,要么仅仅定义了函数名称

;HC32被设置为从内部FLASH启动时(这也是最常见的一种情况),当HC32遇到复位信号后,

;从0x0000_0000处取出栈顶地址存放于MSP寄存器,从0x0000_0004处取出复位中断服务入口地址放入PC寄存器,

;继而执行复位中断服务程序Reset_Handler,

;Reset_Handler仅仅执行了两个函数调用,一个是SystemInit,另一个__main,

;SystemInit定义在system_hc32xxxx.c中,主要初始化了HC的时钟系统:RCH,RCL,XTH,XTL,PLL,SystemClk,HCLK,PCLK等等.

;__main函数由编译器生成,负责初始化栈、堆等,并在最后跳转到用户自定义的main()函数,来到C的世界。


使用特权

评论回复
板凳
gwsan|  楼主 | 2019-6-12 11:15 | 只看该作者
HC32L136K8TA芯片的中断向量表如下图所示:

使用特权

评论回复
地板
gwsan|  楼主 | 2019-6-12 11:16 | 只看该作者

使用特权

评论回复
5
gwsan|  楼主 | 2019-6-12 11:17 | 只看该作者

使用特权

评论回复
6
gwsan|  楼主 | 2019-6-12 11:17 | 只看该作者

使用特权

评论回复
7
gwsan|  楼主 | 2019-6-12 11:18 | 只看该作者

使用特权

评论回复
8
gwsan|  楼主 | 2019-6-12 11:18 | 只看该作者

使用特权

评论回复
9
gwsan|  楼主 | 2019-6-12 11:19 | 只看该作者

使用特权

评论回复
10
gwsan|  楼主 | 2019-6-12 11:19 | 只看该作者

使用特权

评论回复
11
MCU57863859| | 2019-6-12 14:20 | 只看该作者

使用特权

评论回复
12
wiba| | 2019-6-12 14:54 | 只看该作者
代码真的好详细啊

使用特权

评论回复
13
zljiu| | 2019-6-12 15:09 | 只看该作者
.s文件可以手动更改吗

使用特权

评论回复
14
kxsi| | 2019-7-10 09:01 | 只看该作者
难道是汇编语言?

使用特权

评论回复
15
gwsan|  楼主 | 2019-7-25 14:13 | 只看该作者
额 是的 是汇编语言

使用特权

评论回复
16
RTX3080| | 2020-11-18 14:57 | 只看该作者
赞赞赞

使用特权

评论回复
17
hxf0756| | 2020-12-22 16:56 | 只看该作者
收藏了,这个讲的很好。谢谢

使用特权

评论回复
18
里面有晴雨| | 2020-12-23 10:57 | 只看该作者
感谢楼主分享,不错的国产芯片,一直使用这颗物料偶的。

使用特权

评论回复
19
hxf0756| | 2021-1-5 13:17 | 只看该作者
佩服,这么底层的都研究的这么透

使用特权

评论回复
20
tnteye| | 2021-1-16 10:38 | 只看该作者
给力!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3426

帖子

1

粉丝