欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

使用C++在AURIX Development Studio里開發(fā)TC275 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

使用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)案例查看更多