你好,我遇到这种SDK错误该怎样解决呢?
你好,我遇到这种SDK错误该怎样解决呢?
Postby grantgao » Thu May 28, 2015 1:45 pm
你好,我遇到这种编译错误该怎样解决呢?
/opt/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .output/eagle/debug/image/eagle.app.v6.out section `.text' will not fit in region `iram1_0_seg'
collect2: error: ld returned 1 exit status
../Makefile:363: recipe for target '.output/eagle/debug/image/eagle.app.v6.out' failed
make[1]: *** [.output/eagle/debug/image/eagle.app.v6.out] Error 1
make: *** [.subdirs] Error 2
make[1]: Leaving directory '/cygdrive/d/esp8266ide/AITHINKER-ESP8266-SDK/project/esp_iot_sdk_v1.0.1_b1/app'
Makefile:308: recipe for target '.subdirs' failed
-------------------------------------------以下是我对问题的各种尝试----------------------------------------------
//我把 uart_init(BIT_RATE_115200, BIT_RATE_115200);从代码中注释掉,编译就能通过
//我是1024的flash,SDK版本是1.1.0
//修改irom0_0_seg : org = 0x40240000, len = 0x70000,无论如何修改len的值也不行
//但如果修改iram1_0_seg : org = 0x40100000, len = 0x8000,将len修改成0x8100,编译就能通过,在不注释代码的情况下,但这种修改已经超出了ram范围,不可取
void user_init(void)
{
bool bRet = true;
//设置uart并将调试打印转移到uart0
uart_init(BIT_RATE_115200, BIT_RATE_115200);
system_set_os_print(1);
os_printf("++++enter[%s,%d]\r\n",__FUNCTION__,__LINE__);
....
....
}
/opt/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .output/eagle/debug/image/eagle.app.v6.out section `.text' will not fit in region `iram1_0_seg'
collect2: error: ld returned 1 exit status
../Makefile:363: recipe for target '.output/eagle/debug/image/eagle.app.v6.out' failed
make[1]: *** [.output/eagle/debug/image/eagle.app.v6.out] Error 1
make: *** [.subdirs] Error 2
make[1]: Leaving directory '/cygdrive/d/esp8266ide/AITHINKER-ESP8266-SDK/project/esp_iot_sdk_v1.0.1_b1/app'
Makefile:308: recipe for target '.subdirs' failed
-------------------------------------------以下是我对问题的各种尝试----------------------------------------------
//我把 uart_init(BIT_RATE_115200, BIT_RATE_115200);从代码中注释掉,编译就能通过
//我是1024的flash,SDK版本是1.1.0
//修改irom0_0_seg : org = 0x40240000, len = 0x70000,无论如何修改len的值也不行
//但如果修改iram1_0_seg : org = 0x40100000, len = 0x8000,将len修改成0x8100,编译就能通过,在不注释代码的情况下,但这种修改已经超出了ram范围,不可取
void user_init(void)
{
bool bRet = true;
//设置uart并将调试打印转移到uart0
uart_init(BIT_RATE_115200, BIT_RATE_115200);
system_set_os_print(1);
os_printf("++++enter[%s,%d]\r\n",__FUNCTION__,__LINE__);
....
....
}
Re: 你好,我遇到这种SDK错误该怎样解决呢?
Postby grantgao » Thu May 28, 2015 2:05 pm
jackon wrote:.text段大小为0x8000。
一个函数默认情况下是放在.text段,加上ICACHE_FLASH_ATTR,就可以放到.irom0.text段。
请给和中断处理函数无关的函数加上ICACHE_FLASH_ATTR。
你好,我仔细检查过,我的函数除了uart中断收发外,都加了ICACHE_FLASH_ATTR属性,而且uart用的是SDK中自带的代码,怎么办啊?
Re: 你好,我遇到这种SDK错误该怎样解决呢?
Postby grantgao » Thu May 28, 2015 2:09 pm
grantgao wrote:jackon wrote:.text段大小为0x8000。
一个函数默认情况下是放在.text段,加上ICACHE_FLASH_ATTR,就可以放到.irom0.text段。
请给和中断处理函数无关的函数加上ICACHE_FLASH_ATTR。
你好,我仔细检查过,我的函数除了uart中断收发外,都加了ICACHE_FLASH_ATTR属性,而且uart用的是SDK中自带的代码,怎么办啊?
找到问题了,你们的SDK自带的uart中的uart_tx_one_char这个函数没有加ICACHE_FLASH_ATTR属性,加上就好了。
Re: 你好,我遇到这种SDK错误该怎样解决呢?
Postby YimingLi » Thu Jul 20, 2017 5:47 pm
SDK库里的函数源码,前面没有加 ICACHE_FLASH_ATTR的函数,最好不要随便加。因为,是否在函数前加 ICACHE_FLASH_ATTR, 并非仅仅取决于该函数是否为中断处理函数,而在于每次调用这个函数执行的时候,是否可以从从外部flash里载入。
因为这个标志,代表的就是这个意思。
例如,如果某个函数虽然不是中断处理函数,但是它被中断处理函数给调用了;或者,如果某个函数会被频繁调用了,即使它不是中断处理函数...... 做好也别随意添加ICACHE_FLASH_ATTR,否则,如果每次执行该函数都需要去读取一次SPI FLASH,这可能会影响到处理速度和系统性能的。例如,这里的uart_tx_one_char()函数,就被库里许多其他的频繁使用的函数所调用了。
所以,乐鑫SDK库里的函数,前面有没有加 ICACHE_FLASH_ATTR,都是有讲究的,建议最好不要随便添加,以免造成性能降低或冲突。即使加了,也应该多多深度测试,评估是否有负面影响。
供参考。
因为这个标志,代表的就是这个意思。
例如,如果某个函数虽然不是中断处理函数,但是它被中断处理函数给调用了;或者,如果某个函数会被频繁调用了,即使它不是中断处理函数...... 做好也别随意添加ICACHE_FLASH_ATTR,否则,如果每次执行该函数都需要去读取一次SPI FLASH,这可能会影响到处理速度和系统性能的。例如,这里的uart_tx_one_char()函数,就被库里许多其他的频繁使用的函数所调用了。
所以,乐鑫SDK库里的函数,前面有没有加 ICACHE_FLASH_ATTR,都是有讲究的,建议最好不要随便添加,以免造成性能降低或冲突。即使加了,也应该多多深度测试,评估是否有负面影响。
供参考。
Who is online
Users browsing this forum: No registered users and 296 guests
Login
Newbies Start Here
Are you new to ESP8266?
Unsure what to do?
Dunno where to start?
Start right here!
Latest SDK
Documentation
Complete listing of the official ESP8266 related documentation release by ESPRESSIF!
Must read here!
- All times are UTC+08:00
- Top
- Delete all board cookies
About Us
Espressif Systems is a fabless semiconductor company providing cutting-edge low power WiFi SoCs and wireless solutions for wireless communications and Internet of Things applications. We are the manufacturer of ESP8266EX.