打印
[开发工具]

高分拜请高手扔掉main函数?

[复制链接]
楼主: armhoo
手机看帖
扫描二维码
随时随地手机跟帖
21
14楼的方向是正确的。

使用特权

评论回复
22
armhoo|  楼主 | 2010-6-4 10:31 | 只看该作者
香主:
如果可以copy cstartup.s修改就可以解决问题,我就不用这么愁了,关键不是IAR没有给出映像文件相关符吗?

使用特权

评论回复
23
香水城| | 2010-6-4 10:36 | 只看该作者
肯定会有,只不过你不知道。去找IAR的技术支持问问吧,:D

使用特权

评论回复
24
sophya| | 2010-6-4 10:55 | 只看该作者
main是程序的入口.
如2楼比喻的树干.:)

使用特权

评论回复
25
静默| | 2010-6-4 11:03 | 只看该作者
俺的思路:

咱以IAR 5.3,STM32F10X为例: 
相应的startup_stm32f10x_xx.s中有如下的代码。
Reset_Handler
        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0

__iar_program_start是IAR的函数,俺们见不着其源代码。
但SystemInit的源码是给出的,可以把程序直接放在SystemInit中。

使用特权

评论回复
26
armhoo|  楼主 | 2010-6-4 11:31 | 只看该作者
首先非常感谢大家的回复。
其实帖子发出后,大多数回复都是文不对题,不知是不是我问法不对?

回复静默:
__iar_program_start只是一个符号,类似汇编里的伪指令ENTRY,你可以改成你愿意的任何符号,只是你得在IAR选项里重新设置下你的ENTRY,因为默认的是__iar_program_start。 至于什么是ENTRY你自己看吧!

使用特权

评论回复
27
huangqi412| | 2010-6-4 13:05 | 只看该作者
无语

使用特权

评论回复
28
huangqi412| | 2010-6-4 13:06 | 只看该作者
说白了就是想自己初始化CPU,不使用系统初始化而已。  表达严重不清楚。。。

使用特权

评论回复
29
wujing198| | 2010-6-4 13:10 | 只看该作者
呵呵,看了半天终于明白楼主的意思了。

他是想把建工程的时候编译器已经做好的那些东西都自己搞。

使用特权

评论回复
30
BitFu| | 2010-6-4 13:33 | 只看该作者
main的主要意义就是进入后不再退出,是一个死循环
去掉没什么意义,最终程更换后的程序还是和MAIN一样的结构
STARTUP程序中转到MAIN,MAIN可以理解为应用程序的入口处
C语言的这种安排已经很合理,没有必要。

使用特权

评论回复
31
BitFu| | 2010-6-4 13:37 | 只看该作者
如果想在MAIN之前做一些手脚那就改startup程序就可以了,编译器都提供相关修改方法。

使用特权

评论回复
32
armhoo|  楼主 | 2010-6-4 14:38 | 只看该作者
30楼:
呵呵,看了半天终于明白楼主的意思了。
他是想把建工程的时候编译器已经做好的那些东西都自己搞。

正解,看来是我表达不清楚!!!

使用特权

评论回复
33
armhoo|  楼主 | 2010-6-4 14:41 | 只看该作者
main的主要意义就是进入后不再退出,是一个死循环
去掉没什么意义,最终程更换后的程序还是和MAIN一样的结构
STARTUP程序中转到MAIN,MAIN可以理解为应用程序的入口处
C语言的这种安排已经很合理,没有必要。
如果想在MAIN之前做一些手脚那就改startup程序就可以了,编译器都提供相关修改方法。

如果你可以让你的IAR工程里没有符号main而且可以编译运行时请再说。。。。。。。就可以了。

使用特权

评论回复
34
huangqi412| | 2010-6-4 14:42 | 只看该作者
问的人脑袋不清醒,回答的一大帮人也是。。。
都不带误差修正功能。

使用特权

评论回复
35
armhoo|  楼主 | 2010-6-4 14:43 | 只看该作者
30楼:
呵呵,看了半天终于明白楼主的意思了。
他是想把建工程的时候编译器已经做好的那些东西都自己搞。

现在问题是IAR好像不让自己搞,一些相关的符号信息并没有显示给出!!!!

使用特权

评论回复
36
lizhan625| | 2010-6-4 15:33 | 只看该作者
唉。。。。傻的问题

使用特权

评论回复
37
lxyppc| | 2010-6-4 17:42 | 只看该作者
本帖最后由 lxyppc 于 2010-6-4 17:51 编辑

STM32用中断向量表指明复位后程序执行地址
在IAR中有个__vector_table,其第二项是__program_start
你把这个换成你自己写的初始化的函数就行了,初始化好了之后再调用main或是你想执行的程序

至于RO,RW,ZI这些信息,可以从map文件和__program_start反编译的结果中找到一些线索

P.S. 楼主这样做有何意义

使用特权

评论回复
38
gxgclg| | 2010-6-5 09:18 | 只看该作者
从开始到MAIN不就是初始化的过程吗,有什么问题呢,不要把简单的问题弄复杂了

使用特权

评论回复
39
yun_xiao| | 2010-6-7 10:25 | 只看该作者
不理解

使用特权

评论回复
40
cqwangsf| | 2010-6-7 14:23 | 只看该作者
你看一下汇编就知道是如何到main的了

使用特权

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

本版积分规则