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

YunTu Forum

YTMicro.com
  1. 主页
  2. Blogs
  3. 使用YT-LINK 遇到_sbrk end问题的原因分析

使用YT-LINK 遇到_sbrk end问题的原因分析

已定时 已固定 已锁定 已移动 Blogs
7 帖子 6 发布者 1.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • FrankieF 离线
    FrankieF 离线
    Frankie YunTu
    写于 最后由 编辑
    #1

    问题描述

    67ced6c8-bdf1-4679-83b1-1f5968bc0524-image.png
    如图,在使用GCC+YT-LINK的时候用时候会遇到如上图的错误,发生在link阶段,提示end这个symbol没有定义

    问题定位

    这个问题是gcc + newlib 的问题,先来看一下_sbrk这个的源码和功能

    _sbrk (ptrdiff_t incr)
    {
      extern char   end asm ("end"); /* Defined by the linker.  */
      static char * heap_end;
      char *        prev_heap_end;
    
      if (heap_end == NULL)
        heap_end = & end;
    
      prev_heap_end = heap_end;
    
      if ((heap_end + incr > stack_ptr)
          /* Honour heap limit if it's valid.  */
          || (__heap_limit != 0xcafedead && heap_end + incr > (char *)__heap_limit))
        {
          /* Some of the libstdc++-v3 tests rely upon detecting
    	 out of memory errors, so do not abort here.  */
    #if 0
          extern void abort (void);
    
          _write (1, "_sbrk: Heap and stack collision\n", 32);
    
          abort ();
    #else
          errno = ENOMEM;
          return (void *) -1;
    #endif
        }
    
      heap_end += incr;
    
      return (void *) prev_heap_end;
    }
    

    可以看到_sbrk 的主要功能就是从heap里面申请内存,但是YT-LINK默认没有开启HEAP,只有stack,所以任何和内存相关的函数都会用到_sbrk

    • 内存相关的如:malloc 等
    • sprintf 等

    为什么YT-LINK默认没有定义heap

    因为在汽车嵌入领域不建议使用动态内存,即使要使用动态内存,也不建议使用newlib自带的,而是使用其他轻量的内存管理库。

    如何解决

    下面的方法任选其一

    • 移除使用到内存的相关函数如:malloc,sprintf 等
    • 在YT-LINK里增加heap区域 (注意,heap区域必须要在stack上面,看_sbrk代码可以得知)
    • 自己实现一个_sbrk函数。
    1 条回复 最后回复
    0
    • FrankieF Frankie 在 中 引用了 这个主题
    • FrankieF 离线
      FrankieF 离线
      Frankie YunTu
      写于 最后由 编辑
      #2

      在YT-LINK 增加heap的方法

      依次增加Memory->Group->Section
      一定要在STACK上面

      1f35e973-872c-4d7b-b976-0e6479a9f738-image.png

      增加alt symbol startend

      1a5b03d5-c076-4780-ae1c-5471208e2cf9-image.png

      f521a3c2-df6d-46b5-a2ec-c7fb03299209-image.png

      1 条回复 最后回复
      0
      • FrankieF Frankie 在 中 引用了 这个主题
      • kasselK 离线
        kasselK 离线
        kassel
        写于 最后由 编辑
        #3

        你好,目前有个客户需要使用MALLOC函数做动态内存分配,但是照上述方法还是无法正常使用
        image.png
        反馈无法编译

        image.png

        runR 1 条回复 最后回复
        0
        • qinzhaoQ qinzhao 在 中 引用了 这个主题
        • wang2023W 离线
          wang2023W 离线
          wang2023
          写于 最后由 编辑
          #4

          厉害了我的歌。。。。。

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

            感觉好高级的样子

            1 条回复 最后回复
            0
            • runR 在线
              runR 在线
              run YunTu
              在 回复了 kassel 最后由 编辑
              #6

              kassel 可以试试增加下面的定义。

              extern uint32_t Image$$HEAP_start$$Base;
              extern uint32_t Image$$HEAP_end$$Limit;
              uint32_t __heap_base =  (uint32_t)&Image$$HEAP_start$$Base;
              uint32_t __heap_limit = (uint32_t)&Image$$HEAP_end$$Limit;
              
              1 条回复 最后回复
              0
              • 涂俊伟涂 离线
                涂俊伟涂 离线
                涂俊伟
                写于 最后由 编辑
                #7

                image.png
                使用molloc 一直返回NULL

                1 条回复 最后回复
                0
                • yifeng_xieY yifeng_xie 在 中 引用了 这个主题

              • 云途开发生态介绍

                快速上手云途开发生态

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YT CONFIG TOOL调查问卷

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

              • can
                19
                demo
                19
                uds
                11
                lin stack
                9
                fbl
                5
                md14
                5
                yt-link
                5
                adc模块
                4
                Online Users
                iambingxiI
                iambingxi
                WangPeiyingW
                WangPeiying
                runR
                run
                wangweidongW
                wangweidong
                iss-dannI
                iss-dann
                EkkoE
                Ekko
                liu123456L
                liu123456
                mcM
                mc
                WHQW
                WHQ
                YQHY
                YQH
                luxiaoguoL
                luxiaoguo
                carpeC
                carpe
                LCZOUYIWENL
                LCZOUYIWEN
                quanfengQ
                quanfeng
                QWQ
                QW
                jinyiJ
                jinyi
                yt0503Y
                yt0503
                junhanhuangJ
                junhanhuang
                DerrickD
                Derrick
                YTBivY
                YTBiv
                • 登录

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