知識
不管是網(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ù):191
背景:我自己有個庫 是用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++的對象初始化。可悲的是,這些函數(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)站
- 開發(fā)框架
- 昆明做網(wǎng)站建設(shè)的公司排名
- 汽車拆解管理系統(tǒng)
- 網(wǎng)站建設(shè)方案 doc
- 云南小程序開發(fā)制作
- 小程序開發(fā)費用
- 云南小程序開發(fā)哪家好
- 網(wǎng)站收錄
- 網(wǎng)頁制作
- 退款
- 汽車報廢軟件
- 云南軟件設(shè)計
- 云南網(wǎng)站建設(shè)服務(wù)
- 商標(biāo)注冊
- 云南網(wǎng)站建設(shè)百度官方
- 高端網(wǎng)站建設(shè)公司
- web前端
- 楚雄小程序開發(fā)
- 分銷系統(tǒng)
- 云南建設(shè)廳網(wǎng)站首頁
- 小程序被騙
- 百度小程序開發(fā)
- 網(wǎng)站開發(fā)哪家好
- 云南網(wǎng)站維護
- 云南小程序哪家好
- 云南花農(nóng)小程序
- 網(wǎng)站優(yōu)化公司
- 大理網(wǎng)站建設(shè)公司