OpenEdv-开源电子网

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

原子哥,库的启动文件中Reset_Handler会调用SystemInit()做时钟初始化那程序中是否可以不写呢

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
发表于 2015-1-24 12:27:10 | 显示全部楼层 |阅读模式
5金钱
启动文件中的程序如下:
; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP
那是否意味着主函数中的SystemInit()不需要再次调用?
之前有网友说可以注释掉这两行代码
IMPORT  SystemInit
                LDR     R0, =SystemInit
想请教一下原子哥, 可不可以注释掉启动文件中的代码,或者是主函数中的代码?

最佳答案

查看完整内容[请看2#楼]

不建议注释,如果你启用了外部ram做内存,那么在进入main函数之前就要进行内存初始化,如果注释掉而在main中调用,可能会出现不可预知的问题。事实上这个并不是用库和用寄存器的区别,用寄存器你可以把自己的初始化函数放到这里替换SystemInit(),主要是在进入main之前就初始化好系统,保证main中的代码是在设定好的条件中运行。
静水流深,物我两忘
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2015-1-24 12:27:11 | 显示全部楼层
不建议注释,如果你启用了外部ram做内存,那么在进入main函数之前就要进行内存初始化,如果注释掉而在main中调用,可能会出现不可预知的问题。事实上这个并不是用库和用寄存器的区别,用寄存器你可以把自己的初始化函数放到这里替换SystemInit(),主要是在进入main之前就初始化好系统,保证main中的代码是在设定好的条件中运行。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-1-24 12:42:17 | 显示全部楼层
这种问题  自己尝试下就知道结果了
学无止境
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-24 13:00:14 | 显示全部楼层
如果你用的是库函数的话,这两行老老实实的加上,因为系统时钟初始化什么的就在SystemInit()函数里面,或者你自己写一个函数,替代掉SystemInit()。如果用的寄存器版的话,你可以去掉,因为系统时钟初始化用的其他的函数,并且在其他的地方调用了的
开往春天的手扶拖拉机
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-1-24 15:30:39 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
谢谢您的指教,我是初学者,在网上看到这种方法的,我发现如果main()中不加完全不影响,启动文件中的话修改不了额。
静水流深,物我两忘
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-1-24 15:34:45 | 显示全部楼层
回复【3楼】zuozhongkai:
---------------------------------
谢谢您的指教,我用的是库函数版的,那请问如果在运行启动文件中(执行main()之前)已经调用了SystemInit(),那如果在main()中是否可以省去调用SystemInit()?
静水流深,物我两忘
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-1-24 15:45:58 | 显示全部楼层
回复【5楼】wangxipeng:
---------------------------------
谢谢您的指教,我懂了,主要是在进入main之前就初始化好系统,保证main中的代码是在设定好的条件中运行,那是不是意味着在main()中不需要加SystemInit()了呢?
静水流深,物我两忘
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2015-1-24 19:53:41 | 显示全部楼层
回复【7楼】Mort:
---------------------------------
可以啊
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-1-24 20:39:26 | 显示全部楼层
回复【8楼】wangxipeng:
---------------------------------
恩,好的,太谢谢你啦,看到网上很多都在主函数中第一句加并强调重要性,主要是担心有啥没用到的东西会影响到,现在放心了。
静水流深,物我两忘
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2015-1-24 21:07:48 | 显示全部楼层
回复【9楼】Mort:
---------------------------------
多参考下官方代码有好处,建议你多看看
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-1-24 22:21:57 | 显示全部楼层
回复【10楼】wangxipeng:
---------------------------------
你说的是库文件中的Examples吧,才发现,好的,多谢高人指路!
静水流深,物我两忘
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 14:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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