搜索
bottom↓
回复: 12

关于rt-thread 请教

[复制链接]

出0入0汤圆

发表于 2011-3-6 17:34:49 | 显示全部楼层 |阅读模式
终于开始学习代码了,以后把我的问题都放到这个帖子里。


问题1:关于启动过程:
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main

                LDR     R1, = __initial_sp        ; restore original stack pointer
                MSR     MSP, R1

                LDR     R0, =__main
                BX      R0
                ENDP
原来的认识是 跳到__main就是跳到keil提供的crt库里面完成程序运行的一些准备工作,最后准备完了跳到main()函数里面。

工程好像把入口点函数改名字了,请问改成什么了? 那个函数是类似main()的入口函数,我也没看见类似entry=? 的链接选项啊?

问题比较初级,感谢解答

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-3-6 17:56:38 | 显示全部楼层
这代码哪里来的?貌似贴的片段也是不全的.

同时请看Reset_Handler在哪里被引用.并对比keil提供的statup.S

出0入0汤圆

 楼主| 发表于 2011-3-6 20:10:54 | 显示全部楼层
Reset_Handler就在_Vectors段里面声明的。
__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     rt_hw_hard_fault           ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler


文件就是STM32选项卡下面的start_rvds.s文件。

出0入0汤圆

发表于 2011-3-6 20:14:24 | 显示全部楼层
入口是ResetHandler,不是main函数。

是ResetHandler --> __main --> main函数。

出0入0汤圆

发表于 2011-3-6 20:25:20 | 显示全部楼层
startup.S:
; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler

linker:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00005000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

以上是keil自带的startup.s中的原文,并没有修改任何什么.

出0入0汤圆

 楼主| 发表于 2011-3-6 20:46:24 | 显示全部楼层
回复【3楼】ffxz  
入口是resethandler,不是main函数。
是resethandler --> __main --> main函数。

-------------------------------------------------------------------

感谢回复,这个顺序我明白,我的问题是没找到最后的那个main()函数,所以以为把他给改名了,又没看见链接脚本里面有类似的改变entry的选项,所以想知道为什么?


请教3个问题:
1 entry=“” 是被用来指定类似被_main函数最终调用的(比如通用的main)这种函数的“入口点吧”
2 工程里面的main(或者相同功能的)函数在哪里
3 等于我们还是借用了keil 系统提供的_main 函数来实现了CRT的工作,是吧?

感谢

回复【4楼】aozima  
-----------------------------------------------------------------------

感谢回复,看到那个链接脚本了,就是在程序里面没找到main()函数。呵呵

出0入0汤圆

发表于 2011-3-6 20:51:27 | 显示全部楼层
那个顺序其实在上面已经指出了,
main函数是在__main中进行调用,__main部分是keil mdk的代码,好像并未提供。这部分代码应该是要做RW数据搬移到RAM的动作,并把ZI清零。

出0入0汤圆

 楼主| 发表于 2011-3-6 21:27:37 | 显示全部楼层
回复【6楼】ffxz  
那个顺序其实在上面已经指出了,
main函数是在__main中进行调用,__main部分是keil mdk的代码,好像并未提供。这部分代码应该是要做rw数据搬移到ram的动作,并把zi清零。
-----------------------------------------------------------------------

ffxz 你好,可能我没说清楚,我明白_main 调用main()

但是我在工程中没找到mian()能告诉我main()在那里么?谢谢

出0入0汤圆

发表于 2011-3-6 21:33:02 | 显示全部楼层
原以为楼主是指在启动代码里面找main()在哪.原来是在*.c里面找main().
我刚喝水看到这喷本本键盘上面了.要是本本7天内挂了你得赔我. 特此申明

或许楼主是见过某个法典规定 main()函数一定得要在 main.c中

出0入0汤圆

发表于 2011-3-6 21:34:37 | 显示全部楼层
1. 建议楼主找个好些的编辑器来敲代码.
2. keil再不济也还是有全局搜索的.可以搜索整个工程.

出0入0汤圆

 楼主| 发表于 2011-3-6 21:38:27 | 显示全部楼层
找到了int main(void)

我一直都在搜main(),本本不会坏了吧,不好意思了哈。

出0入0汤圆

发表于 2011-3-6 21:41:56 | 显示全部楼层
搜 "空格" + "main" + "(" 一般可以一次性成功
不行就去掉 "("
还不行就把写代码的拉出去枪毙100次.

刚想起来这有问题,有人会使用TAB,而部分编辑器确实搜不到.
看来最有用的办法还是:
随便找个地方写句
main()
然后 使用跳转到实现处 功能一步到位.

出0入0汤圆

 楼主| 发表于 2011-3-6 21:58:55 | 显示全部楼层
这个办法好,但是刚才我一直认为可能给main改名字了,所以搜的不是很理直气壮,呵呵


其实后来搜main 用match whole word only 发现也没多少结果,前十个就有int main(void)。

人就是总想省事,结果反而事与愿违,呵呵。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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