TI中文支持网
TI专业的中文技术问题搜集分享网站

cortex-A8内核,ccs5.5上搭建环境以方便neon/FVP指令集在arm端进行算法优化?

Hello Gary Wu,

阅读了您下面文档,关于Neon指令在CCS环境下的使用,

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/18765.aspx?pi2132219853=1

目前我正在cortex-A8上,ccs5.5上搭建环境,想利用neon/FVP在arm端进行算法优化,目前遇到不少问题?

如果方便的话,能否共享一下您提供的文档中涉及的工程代码,学习arm端 Neon/VFP指令在CCS环境应用的搭建?

非常感谢!

BRS,

Meng

Jian Zhou:

是汇编那部分的问题么?

Lingcon Meng:

回复 Jian Zhou:

Hello zhou,

非常感谢您的回复!

我在网上看了一些文档,我的理解是,看到 CCS 是不支持,neon的intrinsic 指令,你要在ccs下面,用neon指令,必须用汇编,事实情况是这样的吗?

我编的程序,包括了neon的intrinsic指令。

另外,我看文档说,你要用neon指令,你必须,在使用neon加速器前,通过汇编代码使能其,以前没弄过,不知道如何做,

所以,如果有例程参考的话,那是最好不过的。

非常感谢!

BRS,

Meng

Jian Zhou:

回复 Lingcon Meng:

初始化neon,要加入一段汇编:

ØAdding the assembly code into the CP15.asm as a function:

          MRC p15, #0, r1, c1, c0, #2 ; r1 = Access Control Register

                 ORR r1, r1, #(0xf << 20) ; enable full access for p10,11

              MCR p15, #0, r1, c1, c0, #2 ; Access Control Register = r1

              MOV r1, #0

              MCR p15, #0, r1, c7, c5, #4 ; flush prefetch buffer because of FMXR           below

                                                            ; and CP 10 & 11 were only just enabled

                     ; Enable VFP itself

                 MOV r0,#0x40000000

                 FMXR FPEXC, r0 ; FPEXC = r0

Lingcon Meng:

回复 Jian Zhou:

Hello Zhou,

我已经在arm端加了汇编代码,包括neon/VFP 的使能 以及 L2 cache 使能,

目前代码已经能go main()。

我了解的是要在CCS环境下neon指令集,必须写汇编,intrinsic 的形式是不支持的,

我写了一段代码如下:

想验证vld1.16这个neon指令是否能正常运行

编码形式是在c语言中插入汇编代码(该说法正确吗)。

我想知道,如何在vld1.16汇编代码中调用在C语言的定义的数组a[8],

也就是说想把,a[] 数组中的值通过该vld1.16指令加载到{d0,d1}中. 

我试了好多种方式,都没有成功。缺乏arm 与c交叉编程经验,请给予指导。

非常感谢!

int16_t a[8] = {0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007};

int main(void){asm("ldr r0,=p");  //this instruction error.

asm(" vld1.16 {d0,d1},[r0] ");}

BRS,

Meng

Jian Zhou:

回复 Lingcon Meng:

理论上直接用你的那种asm()方式就可以嵌入汇编,是编译会报错么?

Lingcon Meng:

回复 Jian Zhou:

Hello Zhou,

是的,报错,

我主要不知道如何将a[i]数组,通过vld1.16 加载到{d0,d1},也就说源操作数,如何将a[8],加载到r0.

谢谢!

BRS,

Meng

Jian Zhou:

回复 Lingcon Meng:

检查一下你的CCS的工程配置,看看neon/vfp有没有在工程配置中使能。

我以前有客户嵌入的neon汇编没有问题。

Lingcon Meng:

回复 Jian Zhou:

Hello Zhou,

你说的neon/vfp,我都根据ti网站的文档设置过了。刚才我刚刚写了一段汇编函数,c语言来调用。

现在遇到以下问题:

我从 cortex-a8的资料中,了解到 他们用的是neon/vfp3,但是我在ARM编译选项的processor options,选择VFP3时,编译是出现下列错误,

error #16004-D: file "C:/ti/ccsv5/tools/compiler/arm_5.1.1/lib/rtsv5_A_le_eabi.lib<memcpy32.obj>" has a Tag_ABI_VFP_args attribute value of "1" that is different than one previously seen ("0"); combining incompatible files

但是我将该选项更改为:vfplib,重新编译,编译成功,并且可以正常跟踪,得到正常的计算结果。

请问这是什么原因,难道cortex-a8 描述,有误,还是别的原因?

NEON/VFP enable 代码如下:

MRC p15, #0, r1, c1, c0, #2 ; r1 = Access Control Register ORR r1, r1, #(0xf << 20) ; enable full access for p10,11 MCR p15, #0, r1, c1, c0, #2 ; Access Control Register = r1 MOV r1, #0 MCR p15, #0, r1, c7, c5, #4 ; flush prefetch buffer because of FMXR below ; and CP 10 & 11 were only just enabled ; Enable VFP itself MOV r0,#0x40000000 FMXR FPEXC, r0 ; FPEXC = r0

L2 cache 使能代码如下:

;l2 cache enable

mrc p15, #0, r3, c1, c0, #1

orr r3, r3, #2 mcr p15, #0, r3, c1, c0, #1

BRS,

Meng

赞(0)
未经允许不得转载:TI中文支持网 » cortex-A8内核,ccs5.5上搭建环境以方便neon/FVP指令集在arm端进行算法优化?
分享到: 更多 (0)