1、如何在CoIDE中使用C如何在CoIDE中使用C+ CooCox论坛上时不时有人问:CoIDE是否支持C+?CoIDE默认支持C语言,工程中的*.cpp或*.C(大写的C,会默认为cpp文件)不参与编译。这让不少惯用C+的用户觉得可惜。好在这个世界上解决问题的方法永远比问题多得多,感谢用户Yury Kuchura的贡献和分享,现在只需要几处改动,CoIDE中就能使用C+了。步骤如下:1. 修改build.xml文件,使*.cpp文件能被编译2. 修改link.ld文件,使连接时C+所需的段能被识别/* Section Definitions */SECTIONS .text : KEEP(*(
2、.isr_vector .isr_vector.*) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata .rodata* .gnu.linkonce.r.*) /* C+ Static constructors/destructors (eabi) */ . = ALIGN(4); KEEP(*(.init) . = ALIGN(4); _preinit_array_start = .; KEEP (*(.preinit_array) _preinit_array_end = .; . = ALIGN(4);
3、 _init_array_start = .; KEEP (*(SORT(.init_array.*) KEEP (*(.init_array) _init_array_end = .; . = ALIGN(4); KEEP(*(.fini) . = ALIGN(4); _fini_array_start = .; KEEP (*(.fini_array) KEEP (*(SORT(.fini_array.*) _fini_array_end = .; /* C+ Static constructors/destructors (elf) */ . = ALIGN(4); _ctor_star
4、t = .; KEEP (*crtbegin.o(.ctors) KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors) KEEP (*(SORT(.ctors.*) KEEP (*crtend.o(.ctors) _ctor_end = .; . = ALIGN(4); KEEP (*crtbegin.o(.dtors) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors) KEEP (*(SORT(.dtors.*) KEEP (*crtend.o(.dtors) > rom .ARM.extab : *(.ARM.extab*
5、.gnu.linkonce.armextab.*) > rom /* stack section */ .co_stack (NOLOAD): . = ALIGN(8); *(.co_stack .co_stack.*) > ram _exidx_start = .; .ARM.exidx : *(.ARM.exidx* .gnu.linkonce.armexidx.*) > rom _exidx_end = .; . = ALIGN(4); _end = . ;3. 修改启动代码,使构造和析构函数能被正确调用extern unsigned long _preinit_arr
6、ay_start;extern unsigned long _preinit_array_end;extern unsigned long _init_array_start;extern unsigned long _init_array_end;extern unsigned long _ctor_start;extern unsigned long _ctor_end;static void call_constructors(unsigned long *start, unsigned long *end) _attribute_(noinline);static void call_
7、constructors(unsigned long *start, unsigned long *end) unsigned long *i; void (*funcptr)(); for ( i = start; i < end; i+) funcptr=(void (*)()(*i); funcptr(); void Default_Reset_Handler(void) /* Setup the microcontroller system. */ SystemInit(); /Initialize CoOS (in order the new/delete operators
8、to work properly /prior to calling constructors). Comment it out if you dont use CoOS! CoInitOS(); /Call C+ global constructors call_constructors(&_preinit_array_start, &_preinit_array_end); call_constructors(&_init_array_start, &_init_array_end); call_constructors(&_ctor_start,
9、&_ctor_end); /* Call the applications entry point.*/ main();4. 在组件页勾选C Library和Retarget printf,之后注释掉printf.c文件中的如下语句,以避免重定义_impure_ptrstruct _reent *_impure_ptr = &r;5. 在工程配置(Project configuration)中添加Linked Libraries libstdc+和libsupc+,它们可以从GCC tool chain的库中找到http:/www.coocox.org/Forum/topic.php?id=730http:/www.coocox.org/Forum/topic.php?id=873例程:103vb_cpp.zipSTM32103vb + CoIDE 1.3.1 + 闪灯说明因CoIDE 1.4.0存在bug“修改build.xml文件后无法保存”,故使用CoIDE 1.3.1版本。此bug在新版CoIDE中将被修复。欢迎大家常来CooCox论坛交流讨论
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2