跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. 云途HA 调用 __main 来代替 RamInit1

云途HA 调用 __main 来代替 RamInit1

已定时 已固定 已锁定 已移动 已解决 YTM32B1H系列
11 帖子 3 发布者 3.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • gaoShengG 离线
    gaoShengG 离线
    gaoSheng
    写于 最后由 gaoSheng 编辑
    #1

    由于客户部分应用层采用C++方式开发,但在启动代码,并没有调用全局默认构造函数。 是否可以直接调用KEIL中的__main来构造bss data 以及全局构造函数?也就是要去掉RamInit1 增加__main

    1 条回复 最后回复
    0
    • FrankieF 离线
      FrankieF 离线
      Frankie YunTu
      写于 最后由 Frankie 编辑
      #4

      gaoSheng 可以,__main 是newlib自带的函数?(这个东西可能会导致bss/data等区域重新初始化)

      1 条回复 最后回复
      0
      • FrankieF 离线
        FrankieF 离线
        Frankie YunTu
        写于 最后由 编辑
        #2

        可以用RamInit2,目前这个函数是weak的,里面没有任何代码。

        gaoShengG 1 条回复 最后回复
        0
        • gaoShengG 离线
          gaoShengG 离线
          gaoSheng
          在 回复了 Frankie 最后由 编辑
          #3

          Frankie 感谢大佬的回复,意思是我可以在 RamInit2() 里调用 __main 吗

          1 条回复 最后回复
          0
          • FrankieF 离线
            FrankieF 离线
            Frankie YunTu
            写于 最后由 Frankie 编辑
            #4

            gaoSheng 可以,__main 是newlib自带的函数?(这个东西可能会导致bss/data等区域重新初始化)

            1 条回复 最后回复
            0
            • snikeguoS 离线
              snikeguoS 离线
              snikeguo
              写于 最后由 编辑
              #5

              Frankie 是的,会再次初始化bss data

              1 条回复 最后回复
              0
              • snikeguoS 离线
                snikeguoS 离线
                snikeguo
                写于 最后由 编辑
                #6

                Frankie 请您问下ARM 官方,如何获取全局构造函数的地址,现在卡在这里 没有初始化好C++环境.

                1 条回复 最后回复
                0
                • FrankieF 离线
                  FrankieF 离线
                  Frankie YunTu
                  写于 最后由 编辑
                  #7

                  查看这个例子:ha0.yct
                  这个例子包含:

                  1. init_array (对应构造函数)
                  2. RTT (对应jlink的RTT配置)
                  3. 一些其他的配置
                    593799bc-6b96-4de1-96e8-d0e1a95ff742-image.png
                  1 条回复 最后回复
                  0
                  • FrankieF 离线
                    FrankieF 离线
                    Frankie YunTu
                    写于 最后由 编辑
                    #8

                    还要加上这个代码(GCC 和 IAR, keil自行搜索解决):

                    void CallConstructors(void) { 
                    #if defined(__GNUC__)   
                        // Get the address of the first entry in .myinit section
                        extern func_ptr __init_array_start[];
                        
                        // Get the address of the last entry in .myinit section
                        extern func_ptr __init_array_end[];
                        func_ptr *ptr = __init_array_start;
                    
                        // Call each constructor function
                        while(ptr < __init_array_end) {
                            (*ptr)();
                            ptr++;
                        }
                    #else
                        __iar_data_init3();
                    #endif
                    }
                    
                    1 条回复 最后回复
                    0
                    • snikeguoS 离线
                      snikeguoS 离线
                      snikeguo
                      写于 最后由 编辑
                      #9

                      Frankie GCC不像KEIL那么奇葩,知道怎么解决,KEIL没发解决,为了方便调试,我才用的KEIL。VSCODE调试并不好用,虽然KEIL不大稳定吧。现在打算放弃了KEIL了。我重写了所有的启动文件,放弃了你们生成的,手动调用__main,结果发现bss data啥的并没有初始化。原因也知道,就是__main找符号找不到没法调,问题出在我写的链接脚本的问题。KEIL的链接脚本非常奇葩。从FLash复制到RAM不知道用KEIL脚本怎么写。

                      1 条回复 最后回复
                      0
                      • snikeguoS 离线
                        snikeguoS 离线
                        snikeguo
                        写于 最后由 编辑
                        #10

                        StartUp_重新启动_手动调用__KEIL的main.zip

                        1 条回复 最后回复
                        0
                        • snikeguoS 离线
                          snikeguoS 离线
                          snikeguo
                          写于 最后由 编辑
                          #11

                          重写LINK文件后,问题已解决,还是使用的__main

                          1 条回复 最后回复
                          0
                          • ,FrankieF Frankie 将这个主题转为问答主题
                          • ,FrankieF Frankie 将这个主题标记为已解决

                        • 云途开发生态介绍

                          快速上手云途开发生态

                        • 云途论坛规则/Yuntu Forum Rules

                          发帖前请查看

                        • YT CONFIG TOOL调查问卷

                          帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                        • can
                          25
                          demo
                          22
                          lin stack
                          13
                          uds
                          13
                          md14
                          6
                          yt-link
                          6
                          fbl
                          5
                          adc模块
                          4
                          Online Users
                          • 登录

                          • 登录或注册以进行搜索。
                          • 第一个帖子
                            最后一个帖子
                          0
                          • 版块
                          • 最新
                          • 标签
                          • 热门