REALYYA

这个打印是 链接器ld 打印的,说明就是这样的;

要么你的 linkerscript 写的有问题

    admin changed the title to [New] v3.17.1 更新.

    admin 那是不是每次都要在本地编一次 🧐,编译后大小150k,之前130k,两个二进制文件还是不一样的吧

    /* memory map */
    MEMORY
    {
      FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 64K
      RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 8K
    }
    
    ENTRY(Reset_Handler)
    
    SECTIONS
    {
      __stack_size = DEFINED(__stack_size) ? __stack_size : 2K;
    
    /* ISR vectors */
      .vectors :
      {
        . = ALIGN(4);
        KEEP(*(.vectors))
        . = ALIGN(4);
        __Vectors_End = .;
        __Vectors_Size = __Vectors_End - __gVectors;
      } >FLASH
    
      .text :
      {
        . = ALIGN(4);
        *(.text)
        *(.text*)
        *(.glue_7)
        *(.glue_7t)
        *(.eh_frame)
    
        KEEP (*(.init))
        KEEP (*(.fini))
    
        . = ALIGN(4);
        /* the symbol ¡®_etext¡¯ will be defined at the end of code section */
        _etext = .;
      } >FLASH
    
      .rodata :
      {
        . = ALIGN(4);
        *(.rodata)
        *(.rodata*)
        . = ALIGN(4);
      } >FLASH
    
      .ARM.extab :
      {
         *(.ARM.extab* .gnu.linkonce.armextab.*)
      } >FLASH
    
      .ARM : {
        __exidx_start = .;
        *(.ARM.exidx*)
        __exidx_end = .;
      } >FLASH
    
      .ARM.attributes : { *(.ARM.attributes) } > FLASH
    
      .preinit_array :
      {
        PROVIDE_HIDDEN (__preinit_array_start = .);
        KEEP (*(.preinit_array*))
        PROVIDE_HIDDEN (__preinit_array_end = .);
      } >FLASH
    
      .init_array :
      {
        PROVIDE_HIDDEN (__init_array_start = .);
        KEEP (*(SORT(.init_array.*)))
        KEEP (*(.init_array*))
        PROVIDE_HIDDEN (__init_array_end = .);
      } >FLASH
    
      .fini_array :
      {
        PROVIDE_HIDDEN (__fini_array_start = .);
        KEEP (*(.fini_array*))
        KEEP (*(SORT(.fini_array.*)))
        PROVIDE_HIDDEN (__fini_array_end = .);
      } >FLASH
    
      /* provide some necessary symbols for startup file to initialize data */
      _sidata = LOADADDR(.data);
      .data :
      {
        . = ALIGN(4);
        /* the symbol ¡®_sdata¡¯ will be defined at the data section end start */
        _sdata = .;
        *(.data)
        *(.data*)
        . = ALIGN(4);
        /* the symbol ¡®_edata¡¯ will be defined at the data section end */
        _edata = .;
      } >RAM AT> FLASH
    
      . = ALIGN(4);
      .bss :
      {
        /* the symbol ¡®_sbss¡¯ will be defined at the bss section start */
        _sbss = .;
        __bss_start__ = _sbss;
        *(.bss)
        *(.bss*)
        *(COMMON)
        . = ALIGN(4);
        /* the symbol ¡®_ebss¡¯ will be defined at the bss section end */
        _ebss = .;
        __bss_end__ = _ebss;
      } >RAM
    
      . = ALIGN(8);
      PROVIDE ( end = _ebss );
      PROVIDE ( _end = _ebss );
    
      .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
      {
        PROVIDE( _heap_end = . );
        . = __stack_size;
        PROVIDE( _sp = . );
      } >RAM AT>RAM
    }
    
     /* input sections */
    GROUP(libgcc.a libc.a libm.a libnosys.a)

    admin 这个是gd官方提供的 :🤔

      admin 这个问题在今早电脑重新开机后发现已经好了,也没有重新执行setup.bat,且昨日安装的时候,在请求管理员权限的时候我点了确认

      • ffff replied to this.

        @admin 现在的版本对portable不支持,能不能加上对环境变量 process.env.VSCODE_PORTABLE 的判断,对于portable版本,默认的.eide文件夹就可以放在DATA文件夹下,尝试借助AI对extension.js进行了修补,读配置文件的问题可以像如下方式修补,但是默认的homedir()不知道如何修补,因为完全不懂js,做了些尝试都会出错

        _formatPathForPluginSettings(e) {
        // 首先检查 process.env.VSCODE_PORTABLE 是否存在
        if (process.env.VSCODE_PORTABLE) {
        // 如果存在,则检查 e 中是否包含 "${env:VSCODE_PORTABLE}" 并替换它
        if (e.includes('${env:VSCODE_PORTABLE}')) {
        e = e.replace('${env:VSCODE_PORTABLE}', process.env.VSCODE_PORTABLE);
        }
        // 在这里,e 可能已经是一个完整的路径了,你可以根据需要添加额外的逻辑
        // 例如,确保 e 是绝对路径(如果需要的话)

            // 因为已经处理了 VSCODE_PORTABLE,所以下面的逻辑就不需要再执行了  
            return e;  
        }    
        // 如果 VSCODE_PORTABLE 不存在,则继续原有的逻辑  
        const t = h.WorkspaceManager.getInstance().getWorkspaceRoot();    
        // 如果 t 存在且尚未设置 ${workspaceFolder},则设置它  
        if (t && !this.eideEnv.has("${workspaceFolder}")) {  
            this.eideEnv.set("${workspaceFolder}", t.path);  
        }    
        // 替换 e 中的环境变量(现在只会替换 ${workspaceFolder},因为 VSCODE_PORTABLE 已经被处理了)  
        this.eideEnv.forEach((t, r) => {  
            const n = r.replace("$", "\\$").replace("{", "\\{").replace("}", "\\}");  
            e = e.replace(new RegExp(n, "gi"), t);  
        });    
        // 确保 e 是绝对路径(如果需要的话)  
        if (!c.isAbsolute(e) && t) {  
            e = t.path + u.File.sep + e; // 假设 u.File.sep 是路径分隔符  
        }    
        return e;  

        }

          ffff

          要重定向家目录。 你只需把插件里的所有 os.homedir() 调用,替换为一个包装后的函数就行了,比如

          function portable_homedir()
          {
              if (process.env.VSCODE_PORTABLE)
                 return process.env.VSCODE_PORTABLE;
              else
                 return os.homedir();
          }

          _formatPathForPluginSettings 这个函数只是用来替换一些特殊占位符的

          我也差不多这样处理的,只是每个用homedir的地方改成了判断语句,那个extension.js改的吐血,没办法格式化
          大佬能不能在后面的版本中增加这个判断,原生支持便携化
          那边附件还没审核过。。。。。

            ffff

            后面会加到插件里去的

            PS:extension.js 不是源码,是打包压缩后的,源码在 git 仓库里

            • ffff replied to this.

              admin 更新了就比旁边的platformio有优势了,它现在还不支持便携化 😃

              2 months later

              我是Macos用户,问下如何下载v3.16.1呢,另外,在macos如何解决ac6编译器的问题呢? 我尝试安装,有个/bin/uname文件找不到。

                Brain2024 mac版本的AC6可以到https://artifacts.tools.arm.com/arm-compiler/下载,用ARM自带的ARM License Manager激活成Keil MDK Community,或者设置license环境变量。AC5无解,没有mac平台,可能Keil MDK Professional有吧。不过LTO有bug无法使用

                2 months later

                REALYYA

                我把GD官方的LD文件改成这样就能显示正确的RAM使用量了,烧到MCU里面也没啥问题。

                Write a Reply...