我正在将一些C代码移植到TI DSP芯片环境中.我正在努力解决C编译器问题.
我有一个包含指向函数的指针的数据结构.我有一个初始化数据结构的函数.像这样的东西:
typedef void (*PFN_FOO)(int x, int y);
struct my_struct
{
PFN_FOO pfn;
};
init_struct(struct my_struct *p, void *pfn)
{
p->pfn = (PFN_FOO)pfn;
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio和GCC下,这种代码无需投诉即可编译.事实上,因为pfn论证是类型void *我不需要在那里投一个演员; 它会毫无怨言地隐含地施放.
在用于TI DSP芯片的Code Composer Studio中,我收到"警告:无效类型转换"
我的策略是让我的代码在没有警告的情况下编译,所以我想解决这个问题.我尝试了各种各样的铸造.我发现编译器非常高兴,如果我将void *指针指向intfirst,然后将其转换为正确的类型.哎呀!
如果没有编译器抱怨,我怎么能这样做?我是否真的必须转向int关闭编译器?
注意:我特别没有找到"改变init_struct()接受PFN_FOO而不是"的效果的解决方案void *.这适用于这个简化的代码片段,但不适用于实际代码,它构建了可能异构的东西列表.
是编程人员为TMS320C64x编写DSP加速应用程序的快速入门指南吗?
我有一个定制algorythm程序(不是fft或usial过滤),我想用多DSP协处理器加速它.那么,我应该如何修改源以将计算从主CPU转移到DSP?DSP运行代码有什么限制?
我有一些CUDA的经验.在CUDA中,我应该将每个函数标记为设备(内核)的主机,设备或入口点.还有一些功能可以启动内核以及向/从GPU上传/下载数据.CUDA参考手册中描述了设备代码的一些限制.我希望,DSP有类似的界面和文档.
我的 SD 卡有问题。我正在使用 R0.10b 版的 FatFs 库来访问 SD 卡。
我的代码:
// .... //
FATFS fatfs;
FIL plik;
FRESULT fresult,res1,res2,res3,res4,res5;
UINT zapisanych_bajtow = 0 , br;
UINT zapianie_bajtow = 0;
char * buffor = "123456789abcdef\r\n";
unsigned short int i;
void main(void) {
// ... //
res1 = f_mount(0,&fatfs); // returns FA_OK
res2 = f_open( &plik, "f721.txt", FA_OPEN_ALWAYS | FA_WRITE ); // returns FA_OK
if( res2 == FR_OK )
{
res3 = f_write( &plik, ( const void * ) buffor, 17, &zapisanych_bajtow …Run Code Online (Sandbox Code Playgroud) 我把这个问题发布到了TI的28xx DSP论坛,但没有听到回复,并认为这里可能有人知道.
我知道如何在程序集中编写函数,以便它们是C可调用的; 如果C可调用名称是,foo()则汇编函数被命名_foo().
如果我想在汇编中使用C++并优化类方法怎么办?我怎么做?我假设唯一的主要问题是:
如果我不想担心最后两个,那么也许我会写一个静态成员函数并执行此操作:
class MyClass
{
int x;
static int _doSomething(int u); // implement this in assembly
public:
inline void doSomething() { x = _doSomething(x); }
// lightweight C++ wrapper to handle the class member / "this" pointer stuff
};
Run Code Online (Sandbox Code Playgroud) 我想知道哪个更好(性能)选项:
我想运行一些轻量级的linux并进行一些非常密集的计算,如图像/视频处理(可能是以后的3D),也可以处理它们上的音频.当然所有的浮点数学.
我查看了TI C/C++编译器v6.1用户指南(spru514e),但没有找到任何内容.
该asm声明在这方面似乎没有提供任何内容,手册甚至警告不要改变变量值(p132).未实现用于声明对变量的影响的GNU扩展(p115).
我也没有找到任何记忆障碍的内在因素(比如__memory_changed()Keil的armcc).
搜索网络或TI论坛也一无所获.
任何其他提示如何进行?
我目前使用的是没有硬件 FPU 的 OMAP L138 处理器。我们将使用 FP 密集型算法处理光谱数据,因此 ARM 端将不够用。我不是算法人,而是“动态时间扭曲”(我不知道这是什么意思,不)。最初的性能数字是:
Core i7 Laptop@
2.9GHz :1 秒Raspberry Pi ARM1176 @ 700MHz:12 秒
OMAP L138 ARM926 @ 300MHz:193 秒
更糟糕的是,树莓派大约是我使用的电路板价格的 30%!
我确实有一个 TI C674x,它是 OMAP L138 中的另一个处理器。问题是我是否最好花几周时间尝试:
(当我查看 A8 上的 FPU 性能时,它并没有比 Rasp Pi 有所改进,但 Cortex A9 似乎有所改进)。
我明白答案是“视情况而定”。这里的其他人说“你解锁了一个令人难以置信的快速 DSP,如果分配正确的工作,它可以轻松地超越 Cortex-A8”但是对于定义的工作集,我是否最好跳到 A9,即使我不得不购买外部DSP 以后?