- 论坛徽章:
- 0
|
个人状况:熟悉c语言,还算精通,c++大学学过,有一些基本概念,但是工作一年多没有使用过;
目前正在支援客户,开发中遇到如下问题:
1、客户的代码(middleware+app)全使用c++开发,我们自己的platform的代码(driver)使用c语言开发,c++&c编译及链接问题早已搞定。
2、大家知道elf格式,对嵌入式平台来说,elf格式的目标文件太大,我们必须通过
1)、使用objcopy部分section(比如.text,.rodata,)出来使用压缩工具(我们使用7-zip)压缩;
2)、ld里面写死某一部分库使用压缩工具压缩;
来构建flash image。
3、嵌入式系统一般都有bootloader,我们把整个flash image分为bootloader和system两部分,bootloader负责跳转到sdram或者jump到flash指定位置;
4、system中这部分压缩之后的code必须由bootloader解压缩到内存,或者先bootloader jump到系统的某一小段指定代码,让这部分代码去解压缩system中压缩的部分code;
因为一些历史原因,我们的做法是:
1、把客户的提供的所有库(middleware+app)全使用7-zip压缩;
2、system部分的code一部分未压缩(包括一部分汇编代码及main函数),一部分压缩;
3、bootloader jump到flash指定位置,该位置也即system部分的第一条指令位置;
4、platform上电后bootloader执行完自己的工作,然后jump到system部分位于flash第一条指令处,然后执行到main函数,在该函数里调用7-zip把压缩的部分代码(这部分代码是客户的c++编译后的代码)解压缩到sdram
碰见如下问题:
如果使用该方式,发现c++里面的构造函数没用。。。
MyObj::MyObj(int x, int y)
: m_x(x)
, m_y(y)
{
}
const MyObj my_obj(4,5); |
总结问题:c++部分的代码全压缩,然后在系统上电后(这时候嵌入式操作系统已经跑进main函数)由main函数调用7-zip把c++部分解压缩到sdram。这时候class里面的构造函数没用(my_obj(4,5)并没有初始化m_x = 4; m_y = 5,而是m_x = 0; m_y = 0)
请问,问题出现在哪里?
[ 本帖最后由 dodolo0k 于 2009-9-8 01:50 编辑 ] |
|