工具/软件:TI C/C++编译器
我将 C7000 CGT 用于 Windows 以模拟 C7X。 版本为1.3.0。我的 Visual Studio 版本为2019。
我执行了该代码。
Vout.lo =__ SE1ADV (uint4);
但它只加载了一个元素。
Henry
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
亨利
我不确定您的问题可能是什么。 您能否尝试在您的环境中编译和运行以下代码? 此外、如果您发布/附加了您的代码、也会有所帮助。
#include #include #include #define size_array (1024) uint uint_array[size_array]; void init_memory () { 对于(int i = 0;i < size_array;i++) uint_array[i]= i + 1; } uint8 se_func (uint32_t * startaddr) { uint8 Vresult; __SE_TEMPLATE_v1参数=__gen_SE_TEMPLATE_v1 ();// SE 参数 Params.DIMFMT =__SE_DIMFMT_2D; Params.ELETYPE =__SE_ELETYPE_32位; Params.VECLEN =___ SE_VECLEN_4ELEMS;// 4个元素 //根据设置设置设置模板向量并打开流 //基于迭代计数器和维度(以 ELEMS 的#表示) params.ICNT0=128; Params.ICNT1 = 128; params.DIM1=0; Params.ICNT2=128; params.DIM2=0; Params.ICNT3=128; params.DIM3=0; // DECDIM1宽度(默认为0) params.DECDIM1宽度= 0; // DECDIM2宽度(默认为0) params.DECDIM2宽度= 0; // LEZR 计数(默认为0) PARAMS.LEZR_CNT = 0; _SE1_OPEN ((void*) startaddr、params); //读取数据流并推进计数器 对于(int I0 = 0;I0 < 8;I0++) { printf ("-------------------- \n"); uint8 Vout = #ifdef __C7X_HOSTEM__ uint8 (0); #else (uint8)(0); #endif Vout.lo =__SE1ADV (uint4); #ifdef __C7X_HOSTEM__ Vout.print(); #else printf ("%d、%d、%d、%d、%d、%d、%d、%d、%d、%d\n"、Vout.s0、Vout.s1、Vout.s2、Vout.s3、 Vout.s4、Vout.s5、Vout.s6、Vout.s7); #endif VOUT.hi =__SE1ADV (uint4); #ifdef __C7X_HOSTEM__ Vout.print(); #else printf ("%d、%d、%d、%d、%d、%d、%d、%d、%d、%d\n"、Vout.s0、Vout.s1、Vout.s2、Vout.s3、 Vout.s4、Vout.s5、Vout.s6、Vout.s7); #endif Vresult += Vout; } //关闭流 _SE1_CLOSE (); 返回 Vresult; } int main() { init_memory(); SE_func (uint_array);//未使用返回值 返回0; }
您好!
感谢您的回复。这是我执行的代码。
#include #include uint8 se_func (uint32_t * startaddr) { INT I0; uint8 Vresult; __SE_TEMPLATE_v1参数=__gen_SE_TEMPLATE_v1 ();// SE 参数 Params.DIMFMT =__SE_DIMFMT_4D; Params.ELETYPE =__SE_ELETYPE_32位; Params.VECLEN =___ SE_VECLEN_4ELEMS;// 4个元素 //根据设置设置设置模板向量并打开流 //基于迭代计数器和维度(以 ELEMS 的#表示) params.ICNT0=4; params.ICNT1 = 2; params.DIM1=4; params.ICNT2=2; params.DIM2=8; params.ICNT3=4; params.DIM3=-16; // DECDIM1宽度(默认为0) params.DECDIM1宽度= 0; // DECDIM2宽度(默认为0) params.DECDIM2宽度= 0; // LEZR 计数(默认为0) PARAMS.LEZR_CNT = 0; _SE1_OPEN ((void*) startaddr、params); //读取数据流并推进计数器 对于(I0 = 0;I0 < 8;I0++) { uint8 Vout; Vout.lo =__ SE1ADV (uint4); VOUT.hi =__ SE1ADV (uint4); Vresult += Vout; } //关闭流 _SE1_CLOSE (); 返回 Vresult ;}
我执行了您的代码、这是打印信息。
亨利
我将研究主机仿真和 MS Visual Studio 编译器的这个问题。 同时、您能否尝试使用 g++编译器并让我知道会发生什么情况?
仅供参考、我在上面发布的代码的预期输出为(我使用 g++获得的输出):
--------
(1、2、3、4、0、 0、0、0)
(1、2、3、4、5、 6、7、8)
--------
(9、10、11、12、0、 0、0、0)
(9、10、11、12、13、 14、15、16)
--------
(17、18、19、20、0、 0、0、0)
(17、18、19、20、21、 22、23、24)
--------
(25、26、27、28、0、 0、0、0)
(25、26、27、28、29、 30、31、32)
--------
(33、34、35、36、0、 0、0、0)
(33、34、35、36、37、 38、39、40)
--------
(41、42、43、44、0、 0、0、0)
(41、42、43、44、45、 46、47、48)
--------
(49、50、51、52、0、 0、0、0)
(49、50、51、52、53、 54、55、56)
--------
(57、58、59、60、0、 0、0、0)
(57、58、59、60、61、 62、63、64)
亨利
它看起来 MS Visual C++不能封装诸如 gcc/g++ can 的位字段。 此外、SE 设置寄存器和 SA 设置寄存器的实现取决于此位字段打包行为。 以前的 C7000编译器软件包在某些情况下适用于 MS Visual C++、因为有_set*函数手动对 SE 设置寄存器进行位字段打包。 虽然我们都很幸运、但 SE 设置寄存器中的某些位字段没有用于进行位打包的"设置"函数。 (v1.3 C7000编译器将 API 更改为 SE 和 SA 设置寄存器、使其更干净、更具可扩展性。 因此、这些"设置"函数已从 API 中删除。)
简而言之、MS Visual C++似乎不能用于主机仿真(至少此时)。 必须改为使用 G++。
我将向团队添加一个涉及解决问题(不确定是否可以这样做)或记录 MS Visual C++不能与主机仿真配合使用的工作项目。
Todd