查看: 41558|回复: 32

[其他] Error[Lp011]: section placement failed: unable to place 0x50 initializer bytes

[复制链接]

该用户从未签到

3

主题

17

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
发表于 2012-6-7 09:35:11 | 显示全部楼层 |阅读模式
在Flash_1M编译模式下,遇到如下问题:
wdog.c 
Linking
Error[Lp011]: section placement failed: unable to place 0x50 initializer bytes (maximum alignment 4) in 

Error while running Linker
 
Total number of errors: 1
Total number of warnings: 35
 
搜索Google良久,未果。
我知道答案 目前已有30人回答
Error Lp011.jpg
回复

使用道具 举报

该用户从未签到

3

主题

33

帖子

0

新手上路

Rank: 1

积分
76
最后登录
1970-1-1
发表于 2012-6-7 11:21:04 | 显示全部楼层

RE:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

如果是IAR编译,看一下icf文件及map文件,[0x0002f52c-0x00100000]这一段是不是已经分配满了,将 initializer 非配到其他段看会不会报错。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

17

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2012-6-7 11:49:41 | 显示全部楼层

回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

回复第 2 楼 于2012-06-07 11:21:04发表:
如果是IAR编译,看一下icf文件及map文件,[0x0002f52c-0x00100000]这一段是不是已经分配满了,将 initializer 非配到其他段看会不会报错。
 

这一段没有分配满,这一段的总空间为1M Byte,实际只用到几百K Byte。在源码中搜索了一下initializer,没发现它在什么地方,不清楚该怎么把它分配到其它地方。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-6-7 14:09:52 | 显示全部楼层

    RE:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    看意思是空间不够了,应该不是FLASH的问题,看一下RAM。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    33

    帖子

    0

    新手上路

    Rank: 1

    积分
    76
    最后登录
    1970-1-1
    发表于 2012-6-7 15:36:46 | 显示全部楼层

    回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    回复第 3 楼 于2012-06-07 11:49:41发表:
    回复第 2 楼 于2012-06-07 11:21:04发表:
    如果是IAR编译,看一下icf文件及map文件,[0x0002f52c-0x00100000]这一段是不是已经分配满了,将 initializer 非配到其他段看会不会报错。
     

    这一段没有分配满,这一段的总空间为1M Byte,实际只用到几百K Byte。在源码中搜索了一下initializer,没发现它在什么地方,不清楚该怎么把它分配到其它地方。
     

    不仅是代码,你有没有大量定义const变量,字符串常量等数据段,还有,有没有大量的全局变量的初始化非零值,这些都默认在你定义的代码段。所以你要看一下map文件。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    1970-1-1
     楼主| 发表于 2012-6-7 16:20:57 | 显示全部楼层

    回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    回复第 4 楼 于2012-06-07 14:09:52发表:
    看意思是空间不够了,应该不是FLASH的问题,看一下RAM。 

    我在飞思卡尔社区中搜索了一下,得到了一点提示,之所以出现这个问题,可能跟编译选项有关系,当我在C/C++ 将C语言由C99标准更改为C89标准后该问题就迎刃而解。设置如图所示。
     
    C89.jpg
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    1970-1-1
     楼主| 发表于 2012-6-7 16:22:29 | 显示全部楼层

    回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    回复第 5 楼 于2012-06-07 15:36:46发表:
    回复第 3 楼 于2012-06-07 11:49:41发表:
    回复第 2 楼 于2012-06-07 11:21:04发表:
    如果是IAR编译,看一下icf文件及map文件,[0x0002f52c-0x00100000]这一段是不是已经分配满了,将 initializer 非配到其他段看会不会报错。
     

    这一段没有分配满,这一段的总空间为1M Byte,实际只用到几百K Byte。在源码中搜索了一下initializer,没发现它在什么地方,不清楚该怎么把它分配到其它地方。
     

    不仅是代码,你有没有大量定义const变量,字符串常量等数据段,还有,有没有大量的全局变量的初始化非零值,这些都默认在你定义的代码段。所以你要看一下map文件。
     

    Map文件我已经分析过,目前没有定义对内存特别过分的字段。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    1970-1-1
     楼主| 发表于 2012-6-14 14:59:04 | 显示全部楼层

    回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    回复第 6 楼 于2012-06-07 16:20:57发表:
    回复第 4 楼 于2012-06-07 14:09:52发表:
    看意思是空间不够了,应该不是FLASH的问题,看一下RAM。 

    我在飞思卡尔社区中搜索了一下,得到了一点提示,之所以出现这个问题,可能跟编译选项有关系,当我在C/C++ 将C语言由C99标准更改为C89标准后该问题就迎刃而解。设置如图所示。
     
     

    修改编译选项没解决这个问题,之前的解决是我通过注释掉一段代码来实现,代码如下:
        /* Get addresses for any code sections that need to be copied from ROM to RAM.
         * The IAR tools have a predefined keyword that can be used to mark individual
         * functions for execution from RAM. Add "__ramfunc" before the return type in
         * the function prototype for any routines you need to execute from RAM instead
         * of ROM. ex: __ramfunc void foo(void);
         */
        #if (defined(IAR))
          code_relocate_ram = __section_begin("CodeRelocateRam");
        code_relocate = __section_begin("CodeRelocate");
        code_relocate_end = __section_end("CodeRelocate");

        /* Copy functions from ROM to RAM */
        n = code_relocate_end - code_relocate;
        while (n--)
          *code_relocate_ram++ = *code_relocate++;
        #endif
    该段代码的含义就是将ROM中的数据Copy到RAM中,ROM的空间肯定没问题,看来是RAM趴下啦。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    33

    帖子

    0

    新手上路

    Rank: 1

    积分
    76
    最后登录
    1970-1-1
    发表于 2012-6-14 15:19:17 | 显示全部楼层

    回复:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    回复第 8 楼 于2012-06-14 14:59:04发表:
    回复第 6 楼 于2012-06-07 16:20:57发表:
    回复第 4 楼 于2012-06-07 14:09:52发表:
    看意思是空间不够了,应该不是FLASH的问题,看一下RAM。 

    我在飞思卡尔社区中搜索了一下,得到了一点提示,之所以出现这个问题,可能跟编译选项有关系,当我在C/C++ 将C语言由C99标准更改为C89标准后该问题就迎刃而解。设置如图所示。
     
     

    修改编译选项没解决这个问题,之前的解决是我通过注释掉一段代码来实现,代码如下:
        /* Get addresses for any code sections that need to be copied from ROM to RAM.
         * The IAR tools have a predefined keyword that can be used to mark individual
         * functions for execution from RAM. Add "__ramfunc" before the return type in
         * the function prototype for any routines you need to execute from RAM instead
         * of ROM. ex: __ramfunc void foo(void);
         */
        #if (defined(IAR))
          code_relocate_ram = __section_begin("CodeRelocateRam");
        code_relocate = __section_begin("CodeRelocate");
        code_relocate_end = __section_end("CodeRelocate");

        /* Copy functions from ROM to RAM */
        n = code_relocate_end - code_relocate;
        while (n--)
          *code_relocate_ram++ = *code_relocate++;
        #endif
    该段代码的含义就是将ROM中的数据Copy到RAM中,ROM的空间肯定没问题,看来是RAM趴下啦。
     

    应该不会吧,你把这段屏蔽的部分放开,屏蔽前面其他的代码,看看有没有问题。这好像更说明是ROM空间的问题,因为屏蔽了代码,造成占用ROM空间减少,之前放不下的部分就放下了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    33

    帖子

    0

    新手上路

    Rank: 1

    积分
    76
    最后登录
    1970-1-1
    发表于 2012-6-14 15:33:02 | 显示全部楼层

    RE:Error[Lp011]: section placement failed: unable to place 0x50 initializer byte

    还有,你在工程选项里,Linker->Config->Linker configuration file选的是什么文件?RAM还是FLASH?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-11 21:52 , Processed in 0.109634 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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