知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
使用C++在AURIX Development Studio里開發(fā)TC275
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):190
背景:我自己有個庫 是用C++寫的,只用了C with class,為的就是在單片機上用繼承的功能,編寫高質(zhì)量的代碼。
以前在ARM單片機上面用的很好,現(xiàn)在要在TC275單片機(Tricore核心的單片機,就像STM32是ARM核心的單片機一樣)上跑。所以要搞一下Tricore C++
AURIX DS for Tricore是使用的免費的Tasking編譯器,其實該編譯器是支持C++的。但是從啟動文件來看 ,只初始化了c環(huán)境的東西:bss data等段,通過生成的elf 文件來看是生成了Cpp全局構(gòu)造函數(shù)初始化的函數(shù)的。也就是說生成了類似的代碼:
//file1.cpp: 會生成下面這樣一個函數(shù)(函數(shù)最后幾位是變化的,這個我們不需要管):
void __sti___11_file1_cpp_ea7c0589(void)
{
執(zhí)行對象A的構(gòu)造函數(shù)(構(gòu)造函數(shù)參數(shù)1,構(gòu)造函數(shù)參數(shù)2,.....);//對象A是在file1.cpp中定義的
執(zhí)行對象B的構(gòu)造函數(shù)(構(gòu)造函數(shù)參數(shù)1,構(gòu)造函數(shù)參數(shù)2,.....);//對象b是在file1.cpp中定義的
}
//file2.cpp: 會生成下面這樣一個函數(shù):
void __sti___11_file2_cpp_77448855(void)
{
執(zhí)行對象C的構(gòu)造函數(shù)(構(gòu)造函數(shù)參數(shù)1,構(gòu)造函數(shù)參數(shù)2,.....);//對象c是在file2.cpp中定義的
執(zhí)行對象C的構(gòu)造函數(shù)(構(gòu)造函數(shù)參數(shù)1,構(gòu)造函數(shù)參數(shù)2,.....);//對象d是在file2.cpp中定義的
}
如果我們能獲取到上面函數(shù)地址 ,我們手動調(diào)用這些函數(shù) 那么就可以完成C++的對象初始化??杀氖?#xff0c;這些函數(shù)都生成在.text段下。沒法通過鏈接腳本區(qū)分。。。
以我們換個思路,既然Tasking編譯器生成的elf,在mian函數(shù)之前初始化了c環(huán)境,那么是不是也有初始化c++的環(huán)境?我們看下bss和data段是怎么初始化的:_START函數(shù)->_Core0_start函數(shù)->Ifx_C_Init函數(shù)->_c_init函數(shù),執(zhí)行完這個函數(shù)后,bss和data段全部就有效了。這個函數(shù)位于:C:\Infineon\AURIX-Studio-1.2.0\plugins\com.infineon.aurix.tools_1.2.0\build_system\tools\Compilers\Tasking_1.1r4\ctc\lib\tc16x\libcs_fpu.a
這里拼人品的時候到了:我發(fā)現(xiàn)有很多的lib ,我分析_fpu的是使用硬件浮點,而275帶fpu,所以我應(yīng)該選擇和libcs_fpu.a一樣,選擇帶有_fpu.a的庫,又C++ 這個++的英文單詞是plus ,所以我大概率推斷應(yīng)該是libcps_fpu.a libcpsx_fpu.a libcpx_fpu.a 。這些個庫中應(yīng)該包含有C++全局對象初始化的函數(shù),經(jīng)過反編譯查看,果然都有_Z12__call_ctorsv函數(shù)。
那么至于選擇哪個庫 可以斷定是選擇libcps_fpu.a,因為之前看過一篇tasking的文檔。這些庫帶x的是帶c++異常的,我不用他。所以選擇libcps_fpu.a
選好libcps_fpu.a后,我們要添加在編譯選項中,在linker參數(shù)添加:-lcps_fpu
然后你在main函數(shù)一開始處添加_Z12__call_ctorsv的調(diào)用即可。
這里我為什么沒放到main開始處,因為我在做測試,實際應(yīng)用中放到main函數(shù)的第一行,或者放到_c_init函數(shù)的后面
一切正常了!世界是多么美好啊!
完畢。散花~~~
相關(guān)案例查看更多
相關(guān)閱讀
- 南通小程序制作公司
- 云南網(wǎng)站建設(shè)首選公司
- 云南網(wǎng)站建設(shè)案例
- 退款
- 怎么做網(wǎng)站
- 網(wǎng)站建設(shè)快速優(yōu)化
- 網(wǎng)站建設(shè)制作
- 云南網(wǎng)站建設(shè)公司排名
- 報廢車拆解系統(tǒng)
- 微信小程序開發(fā)入門課程
- 云南花農(nóng)小程序
- 重慶網(wǎng)站建設(shè)公司
- 網(wǎng)站建設(shè)電話
- 云南小程序被騙
- 網(wǎng)站制作哪家好
- 北京小程序制作
- 云南小程序開發(fā)
- 網(wǎng)站建設(shè)公司網(wǎng)站
- 云南網(wǎng)站建設(shè)電話
- 網(wǎng)絡(luò)公司哪家好
- 智慧農(nóng)貿(mào)市場
- web
- 云南小程序開發(fā)公司哪家好
- 網(wǎng)站排名優(yōu)化
- 報廢車
- 汽車報廢回收軟件
- 云南網(wǎng)站開發(fā)
- 軟件開發(fā)
- 網(wǎng)絡(luò)公司排名
- 云南網(wǎng)站建設(shè)外包