C++在嵌入式系统中的应用 --可以到10000分

金秋王 2003-06-19 05:26:06
我一直用C写嵌入式应用,现想改用C++,不知谁有支持C++的标准库,使程序的链接不依赖系统的默认库,我使用VC6.0环境及其编译器.或有这方面的资料。
相当实现mainCRTStartup()到main()之间的代码。
在它的实现中有 /*
* do initializations
*/
_initterm( __xi_a, __xi_z );

/*
* do C++ initializations
*/
_initterm( __xc_a, __xc_z );

请问在编译中它的参数值是如何确定的?
...全文
85 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongchange 2003-07-15
  • 打赏
  • 举报
回复
楼主:我也用c做嵌入式开发,不过刚开始,指点一下吧。
dongchange@eyou.com
glasswing 2003-07-14
  • 打赏
  • 举报
回复
一直想看到楼主的回复~~ 是不是不来了?
hookuy 2003-07-13
  • 打赏
  • 举报
回复
WindTech 2003-07-13
  • 打赏
  • 举报
回复
学习
galoit 2003-07-13
  • 打赏
  • 举报
回复
TO: magic007(无名)
哪一天有嵌入式系统开发平台还差不多
******************************
中国人太懒了 一用就用windows 一说就是office 总之 就是用别人开发的东西

该醒醒了

外国学生 一学c用的是在 unix 下的

现在 linux占外国用的系统比例已经有 40%上了 就是咱们中国用的microsoft多 !!

努力吧!
Elandsong 2003-07-11
  • 打赏
  • 举报
回复
不想用默认库,链接时加参数-nodefaultlib也许可以。
xueqt 2003-07-10
  • 打赏
  • 举报
回复
高手,牛!
wlfjck 2003-07-10
  • 打赏
  • 举报
回复
一个字,牛
magic007 2003-07-10
  • 打赏
  • 举报
回复
个人看法:现在用c++搞嵌入式开发不太成熟。
哪一天有嵌入式系统开发平台还差不多
glasswing 2003-07-08
  • 打赏
  • 举报
回复
另外,gcc也是不错的选择
glasswing 2003-07-08
  • 打赏
  • 举报
回复
从程序启动入口到main()这一段代码是编译器实现相关的;就是说,楼主费了很大力气反汇编然后跟踪出来的东东很可能会随时变化。

不明白,为什么楼主认为在嵌入式环境中就不能用任何库。如果标准库也不用,使用c++又有什么优势?而且可能一些运行时机制,比如RTTI,exception之类的东东也是以库的形式被连接进来的(不知道VC的具体情况,只能说可能)。 我认为只要在最后联接好的最终PE格式的EXE文件,不依赖任何一个DLL,就应该没有问题了。象STL,string之类的东东你尽管用好了。。。 :)

一点建议仅供参考
金秋王 2003-07-08
  • 打赏
  • 举报
回复
一起讨论吧
shornmao 2003-06-27
  • 打赏
  • 举报
回复
用gcc的编译器,他可以指定不链接启动代码和标准库,但是静态全局变量的初始化依旧保证进行。不需要操心。
VC的话我很少用,不知道有没有开关可以控制这一点,不过我很怀疑。
glasswing 2003-06-26
  • 打赏
  • 举报
回复
up
power4 2003-06-25
  • 打赏
  • 举报
回复
楼主在那里?我现在的下项目也是用从C++,在arm下。不过我作应用程序的编制,我刚学嵌入式编程不久,很希望同你探讨!
hslyliu 2003-06-23
  • 打赏
  • 举报
回复
gz
金秋王 2003-06-23
  • 打赏
  • 举报
回复
wei的答复部分可能与我的有些出入。当一C++文件编译后,如果有全局变量,会存在一个段CRT$XCU,这一段其实是包含了类的初始化代码的,它还会调用_atexit函数,而该函数是将该全局类的析构函数放入一全局函数数组中,供程序退出时调用。
我对CRT$XCU还没进行分析,不知该段在Linker时如何处理,当系统Loader 该EXE对该段是如何处理的(如对BSS段的特殊处理)。
我在程序中内存的管理(如delete,new)也是自己处理的,程序的装载点是在0x1000上,
金秋王 2003-06-23
  • 打赏
  • 举报
回复
谢谢你们的回复!!
其实我用的是586的嵌入式微控制器,在应用中我从第一条指令就开始接管(0xfffffff0),以后所有的都自己完成。所以不能用任何库。我用VC作为开发工具,它编译出来的PE格式也是自己装载的,当然还包括解压(像Linux内核装载),现在想改用C++,也只是借助VC编译器及环境。
何哀何欢 2003-06-21
  • 打赏
  • 举报
回复
main只是形式而已。

你真有10000分?羡慕
金秋王 2003-06-21
  • 打赏
  • 举报
回复
我的可用分多的很!!

mainCRTStartup()为装载后的入口函数,它的运行体在CRT0中有源,我用的如下:
if ( !_heap_init(0) ) /* initialize heap */
fast_error_exit(_RT_HEAPINIT); /* write message and die */

_ioinit(); /* initialize lowio */

/* get cmd line info */
_acmdln = (char *)GetCommandLineA();

/* get environ info */
_aenvptr = (char *)__crtGetEnvironmentStringsA();

_setargv();
_setenvp();

_cinit(); /* do C data initialize */

__initenv = _environ;
mainret = main(__argc, __argv, _environ);

exit(mainret);
}
而_cinit ()中的函数基本为
_initterm( __xi_a, __xi_z );

/*
* do C++ initializations
*/
_initterm( __xc_a, __xc_z );

其实__cx_a,__xc_z就是全局类的解析函数,我不知它是如何生成的。如果我对这部分代码进行重写,该如何处理?









}
加载更多回复(6)

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧