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

6678开了三级优化会影响cache吗??

自己做的板子,在调试程序的时候,发现一个问题,想不太明白是为什么,求专家给指导一下

程序分为核0上跑的程序和核1~4上跑的程序,核0通过上位机接收下发的命令字,等待FPGA数据缓存区里的buffer满,满了之后通过emif读空其中的数据,然后发消息给核1,消息传递通过查询共享内存里的标志位实现。

 

typedef struct

{

    int frame_front;//帧头

    int frame_cnt;//帧计数

    int frame_lenth;//帧长

    int Ord;//命令类型   10-设置参数,20-控制命令

    int WorkMode;//工作模式10测量20标校

    int CarryFre;//载频/10  10.5G/10

    int MeasureState;//开始/结束测量   命令类型为控制命令时有效   10-开始,20-结束

    int RotateSpeed;//转速    周/min

    int FFTNum;//FFT点数

    int RutterMaxNum;//目标最大航迹数

    int VMin;//目标速度下限

    int VMax;//目标速度上限

    int RMin;//目标距离下限

    int RMax;//目标距离上限

    int SNRRCatch;//距离捕获门限

    int SNRRLock;//距离跟踪门限

    int LfmBandWidth;//扫频带宽

    int LfmScanCycle;//扫频周期

    unsigned int absolute_time;

    float azimuth;

    int frame_end;//帧尾

    //int reserve[11];

}Control_word,*PControl_word;

trigger大小为84个字节

核 0 的主程序如下:

volatile int cnt0 =0,cycle_cnt = 0;

//通过网络下发的雷达控制字,存放在共享内存区

Control_word trigger;

PControl_word Ptrigger;

 

#pragma DATA_SECTION (trigger,"control_data");

#pragma DATA_ALIGN(trigger, 16);

 

//核间消息传递标志,L1cache为64BYTE一个line,对齐在line上

volatile int  coretocore_flag[8][16];

#pragma DATA_SECTION (coretocore_flag,"control_data");

#pragma DATA_ALIGN(coretocore_flag,64);

main()

{

while(cnt0<=(TEST_NUM/2))

{

       cnt0++;

       if(cnt0%(TEST_NUM/2)==0)

         printf("cnt0 is %d\n", cnt0);

       //判断第一对buffer是否已满标志0101

       flag = *(unsigned short*)(0x78000000 + INT_STATUS*4);

       while ((flag & 0x05) != 0x05)

        {

           flag = *(unsigned short*)(0x78000000 + INT_STATUS*4);

       }

 

       if ((flag & 0x05) == 0x05)

       {

           for (i = 0; i < 4000; i++)

           {

                 dataA1[i] = (*(unsigned short*)(0x78000000 + A1_READ_DATA*4));

                  dataB1[i] = (*(unsigned short*)(0x78000000 + B1_READ_DATA*4));

              *(dataIA1+i) = dataA1[i];

              *(dataQB1+i) = dataB1[i];

 

           }

           *(unsigned short*)(0x78000000 + INT_CLEAR*4) = 0x05;//清中断

           coretocore_flag[0][0] = 10;

       CACHE_wbInvL1d((void *)(&coretocore_flag[0][0]),4,CACHE_WAIT);

      

       //判断第二队buffer是否已满标志1010

                  flag = *(unsigned short*)(0x78000000 + INT_STATUS*4);

                  while ((flag & 0x0A) != 0x0A)

                  {

                  flag = *(unsigned short*)(0x78000000 + INT_STATUS*4);

                  }

 

                  if ((flag & 0x0A) == 0x0A)

                  {

                  for (i = 0; i < 4000; i++)

                  {

                         dataA2[i] = (*(unsigned short*)(0x78000000 + A2_READ_DATA*4));

                         dataB2[i] = (*(unsigned short*)(0x78000000 + B2_READ_DATA*4));

                        *(dataIA2+i) = dataA2[i];

                        *(dataQB2+i) = dataB2[i];

                      }

       *(unsigned short*)(0x78000000 + INT_CLEAR*4) = 0x0A;//清中断           coretocore_flag[0][0] = 10;

       CACHE_wbInvL1d((void *)(&coretocore_flag[0][0]),4,CACHE_WAIT);

              }

     }

}

 

核1~4的主程序

//通过网络下发的雷达控制字,存放在共享内存区

Control_word trigger;

PControl_word Ptrigger;

 

#pragma DATA_SECTION (trigger, "control_data");

#pragma DATA_ALIGN(trigger, 16);

 

 

//核间消息传递标志,L1cache为64BYTE一个line

volatile int  coretocore_flag[8][16];

#pragma DATA_SECTION (coretocore_flag,"control_data");

#pragma DATA_ALIGN(coretocore_flag, 64);

void main()

 {

     int i;

     volatile int coreID = CSL_chipReadReg(CSL_CHIP_DNUM);//读取当前核的编号

     int rad;

     int j = 0;

     int a,b,time_cycle;

 

     int flag;

 

     volatile int cnt1=0,cnt2=0,cnt3=0,cnt4=0;

     if(coreID==1)

      {

         while(1)

         {

    CACHE_invL1d((void *)(&coretocore_flag[0][0]),4,CACHE_WAIT);

    if(coretocore_flag[0][0]==10 )

               {

                  cnt1++;

                  if(cnt1%(TEST_NUM)==0)

                  {

                        printf("cnt1 is %d\n", cnt1);

                   }

     coretocore_flag[0][0]=0;

     CACHE_wbInvL1d((void *)(&coretocore_flag[0][0]),4,CACHE_WAIT);

}

核1开三级优化时trigger收到的内容跟不开优化时不一样?加了volatile还是结果不一样?请问开了三级优化会影响cache吗??

CACHE_disableCaching(12);函数可不可以使共享memory为noncache

Allen35065:

不会影响cache,但会影响指令执行的时序,你需要确保数据已经写入到地址里了

赞(0)
未经允许不得转载:TI中文支持网 » 6678开了三级优化会影响cache吗??
分享到: 更多 (0)