[DSP编程] 重复定义问题

[复制链接]
6909|17
 楼主| stdenis 发表于 2014-8-4 09:34 | 显示全部楼层 |阅读模式
在ccs5编译后出现报错#10056 symbol"_gBufferRcvPing"redefined:first defined in "./main.obj";redefined in "./initFunction.obj"
请问是什么原因及解决方法
NWPU_CHEN 发表于 2014-8-4 15:22 | 显示全部楼层
重复定义了,错误这么明显,定义一次不就解决了,你的_gBufferRcvPing,在主函数和initFunction.c中重复定义,删掉一个定义就可以
 楼主| stdenis 发表于 2014-8-4 17:19 | 显示全部楼层
NWPU_CHEN 发表于 2014-8-4 15:22
重复定义了,错误这么明显,定义一次不就解决了,你的_gBufferRcvPing,在主函数和initFunction.c中重复定 ...

但我在initfunction中没有定义,是不是因为包含的头文件里有对它的定义
NWPU_CHEN 发表于 2014-8-4 22:04 | 显示全部楼层
stdenis 发表于 2014-8-4 17:19
但我在initfunction中没有定义,是不是因为包含的头文件里有对它的定义

如果文件里边没定义的话,就是头文件的问题,你可以把相关部分贴上来
zhangmangui 发表于 2014-8-4 23:27 | 显示全部楼层
CCS有搜索功能   找找看   都在哪里定义了
 楼主| stdenis 发表于 2014-8-5 09:52 | 显示全部楼层
NWPU_CHEN 发表于 2014-8-4 22:04
如果文件里边没定义的话,就是头文件的问题,你可以把相关部分贴上来

这是其中的一个头文件有如下定义:
        Int16 gBufferXmtPing[BUFFSIZE];  // Transmit PING buffer
        Int16 gBufferXmtPong[BUFFSIZE];  // Transmit PONG buffer

        Int16 gBufferRcvPing[BUFFSIZE];  // Receive PING buffer
        Int16 gBufferRcvPong[BUFFSIZE];  // Receive PONG buffer
 楼主| stdenis 发表于 2014-8-5 09:54 | 显示全部楼层
zhangmangui 发表于 2014-8-4 23:27
CCS有搜索功能   找找看   都在哪里定义了

是FIND选项么,应该怎么搜索
NWPU_CHEN 发表于 2014-8-5 10:59 | 显示全部楼层
stdenis 发表于 2014-8-5 09:54
是FIND选项么,应该怎么搜索

你就贴了这么几个,我表示无能为力,这个顶多就能看出来你定义了这个变量,用Find in Files(一个望远镜上边有个文件夹,在工具栏)查找文件中所有的关于这个变量,看看是不是有重复定义
 楼主| stdenis 发表于 2014-8-5 15:19 | 显示全部楼层
NWPU_CHEN 发表于 2014-8-5 10:59
你就贴了这么几个,我表示无能为力,这个顶多就能看出来你定义了这个变量,用Find in Files(一个望远镜 ...

找了一下,在bufferhead.h中Int16 gBufferXmtPing[BUFFSIZE];
          在configstructure.h中(Uint32)&gBufferXmtPing,  
           在main.c中memset((void *)gBufferXmtPing, 0, BUFFSIZE * 4 * 2);
NWPU_CHEN 发表于 2014-8-5 21:11 | 显示全部楼层
在configstructure.h中(Uint32)&gBufferXmtPing---------------这个一整句就是这个?完整的代码贴出来
zhangmangui 发表于 2014-8-5 22:11 | 显示全部楼层
stdenis 发表于 2014-8-5 09:54
是FIND选项么,应该怎么搜索

ctrl F试试   看着是一个望远镜的图标
 楼主| stdenis 发表于 2014-8-6 15:17 | 显示全部楼层
NWPU_CHEN 发表于 2014-8-5 21:11
在configstructure.h中(Uint32)&gBufferXmtPing---------------这个一整句就是这个?完整的代码贴出来 ...

下面是configstructure.h的代码
  1. /*******************FPGA与DSP通信**********************/
  2. /****Config structure****/
  3. #ifndef CONFIG_STRUCTURE
  4. #define CONFIG_STRUCTURE
  5. /* Transmit side EDMA configuration */
  6. EDMA_Config gEdmaConfigXmt = {
  7.     EDMA_FMKS(OPT, PRI, HIGH)          |  // Priority
  8.     EDMA_FMKS(OPT, ESIZE, 16BIT)       |  // Element size
  9.     EDMA_FMKS(OPT, 2DS, NO)            |  // 2 dimensional source?
  10.     EDMA_FMKS(OPT, SUM, INC)           |  // Src update mode
  11.     EDMA_FMKS(OPT, 2DD, NO)            |  // 2 dimensional dest
  12.     EDMA_FMKS(OPT, DUM, NONE)          |  // Dest update mode
  13.     EDMA_FMKS(OPT, TCINT, YES)         |  // Cause EDMA interrupt?
  14.     EDMA_FMKS(OPT, TCC, OF(0))         |  // Transfer complete code
  15.     EDMA_FMKS(OPT, LINK, YES)          |  // Enable link parameters?
  16.     EDMA_FMKS(OPT, FS, NO),               // Use frame sync?

  17.                  // Src address

  18.     EDMA_FMK (CNT, FRMCNT, NULL)       |  // Frame count
  19.     EDMA_FMK (CNT, ELECNT, BUFFSIZE),     // Element count

  20.     EDMA_FMKS(DST, DST, OF(0)),           // Dest address

  21.     EDMA_FMKS(IDX, FRMIDX, DEFAULT)    |  // Frame index value
  22.     EDMA_FMKS(IDX, ELEIDX, DEFAULT),      // Element index value

  23.     EDMA_FMK (RLD, ELERLD, NULL)       |  // Reload element
  24.     EDMA_FMK (RLD, LINK, NULL)            // Reload link
  25. };

  26. /* Receive side EDMA configuration */
  27. EDMA_Config gEdmaConfigRcv = {
  28.     EDMA_FMKS(OPT, PRI, HIGH)          |  // Priority
  29.     EDMA_FMKS(OPT, ESIZE, 16BIT)       |  // Element size
  30.     EDMA_FMKS(OPT, 2DS, NO)            |  // 2 dimensional source?
  31.     EDMA_FMKS(OPT, SUM, NONE)          |  // Src update mode
  32.     EDMA_FMKS(OPT, 2DD, NO)            |  // 2 dimensional dest
  33.     EDMA_FMKS(OPT, DUM, INC)           |  // Dest update mode
  34.     EDMA_FMKS(OPT, TCINT, YES)         |  // Cause EDMA interrupt?
  35.     EDMA_FMKS(OPT, TCC, OF(0))         |  // Transfer complete code
  36.     EDMA_FMKS(OPT, LINK, YES)          |  // Enable link parameters?
  37.     EDMA_FMKS(OPT, FS, NO),               // Use frame sync?

  38.     EDMA_FMKS(SRC, SRC, OF(0)),           // Src address

  39.     EDMA_FMK (CNT, FRMCNT, NULL)       |  // Frame count
  40.     EDMA_FMK (CNT, ELECNT, BUFFSIZE),     // Element count

  41.     [color=Magenta](Uint32)&gBufferRcvPing,              // Dest address[/color]

  42.     EDMA_FMKS(IDX, FRMIDX, DEFAULT)    |  // Frame index value
  43.     EDMA_FMKS(IDX, ELEIDX, DEFAULT),      // Element index value

  44.     EDMA_FMK (RLD, ELERLD, NULL)       |  // Reload element
  45.     EDMA_FMK (RLD, LINK, NULL)            // Reload link
  46. };

  47. /* McBSP codec data channel configuration */
  48. static MCBSP_Config mcbspCfg1 = {
  49.         MCBSP_FMKS(SPCR, FREE, NO)              |
  50.         MCBSP_FMKS(SPCR, SOFT, NO)              |
  51.         MCBSP_FMKS(SPCR, FRST, YES)             |
  52.         MCBSP_FMKS(SPCR, GRST, YES)             |
  53.         MCBSP_FMKS(SPCR, XINTM, XRDY)           | //XINT输出中断由字结束和帧结束触发XRDY;
  54.         MCBSP_FMKS(SPCR, XSYNCERR, NO)          |
  55.         MCBSP_FMKS(SPCR, XRST, YES)             | // 串口输出使能;
  56.         MCBSP_FMKS(SPCR, DLB, OFF)              | // 不使用内部反馈环;
  57.         MCBSP_FMKS(SPCR, RJUST, RZF)            | // 右对齐,自动补零;
  58.         MCBSP_FMKS(SPCR, CLKSTP, DISABLE)       | // 时钟停止模式,不使用SPI;
  59.         MCBSP_FMKS(SPCR, DXENA, OFF)            | // DX不使能;
  60.         MCBSP_FMKS(SPCR, RINTM, RRDY)           | // 接收中断模式,字结束或帧结束;
  61.         MCBSP_FMKS(SPCR, RSYNCERR, NO)          |
  62.         MCBSP_FMKS(SPCR, RRST, YES),                          // 串口接收器停止工作,处于复位状态;

  63.         MCBSP_FMKS(RCR, RPHASE, SINGLE)         | // 单相one phase数据;
  64.         MCBSP_FMKS(RCR, RFRLEN2, DEFAULT)       | // 第二相默认;
  65.         MCBSP_FMKS(RCR, RWDLEN2, DEFAULT)       | // 第二相默认;
  66.         MCBSP_FMKS(RCR, RCOMPAND, MSB)          | // 数据不压缩;
  67.         MCBSP_FMKS(RCR, RFIG, NO)               | // 接收帧同步信号不忽略第一个脉冲;
  68.         MCBSP_FMKS(RCR, RDATDLY, 0BIT)          | // 接收数据延迟位0 bit;(1bit?)
  69.         MCBSP_FMKS(RCR, RFRLEN1, OF(1))         | // 接收帧长度1个字;
  70.         MCBSP_FMKS(RCR, RWDLEN1, 16BIT)         | // 每个字16位;
  71.         MCBSP_FMKS(RCR, RWDREVRS, DISABLE),                  // 接收32位数据不翻转;

  72.         MCBSP_FMKS(XCR, XPHASE, SINGLE)         |
  73.         MCBSP_FMKS(XCR, XFRLEN2, DEFAULT)       |
  74.         MCBSP_FMKS(XCR, XWDLEN2, DEFAULT)       |
  75.         MCBSP_FMKS(XCR, XCOMPAND, MSB)          |
  76.         MCBSP_FMKS(XCR, XFIG, NO)               |
  77.         MCBSP_FMKS(XCR, XDATDLY, 0BIT)          |
  78.         MCBSP_FMKS(XCR, XFRLEN1, OF(1))         |
  79.         MCBSP_FMKS(XCR, XWDLEN1, 16BIT)         |
  80.         MCBSP_FMKS(XCR, XWDREVRS, DISABLE),

  81.         MCBSP_FMKS(SRGR, GSYNC, DEFAULT)        |
  82.         MCBSP_FMKS(SRGR, CLKSP, DEFAULT)        |
  83.         MCBSP_FMKS(SRGR, CLKSM, CLKS)           | // 采样速率发生器时钟外部clks输入;
  84.         MCBSP_FMKS(SRGR, FSGM, FSG)                                |
  85.         MCBSP_FMKS(SRGR, FPER, OF(0x00f))                | // 帧宽度16位;
  86.         MCBSP_FMKS(SRGR, FWID, DEFAULT)         |
  87.         MCBSP_FMKS(SRGR, CLKGDV, OF(0x03)),                  // 4分频;

  88.         MCBSP_MCR_DEFAULT,
  89.         MCBSP_RCER_DEFAULT,
  90.         MCBSP_XCER_DEFAULT,

  91.         MCBSP_FMKS(PCR, XIOEN, SP)              |
  92.         MCBSP_FMKS(PCR, RIOEN, SP)              |
  93.         MCBSP_FMKS(PCR, FSXM, EXTERNAL)         |
  94.         MCBSP_FMKS(PCR, FSRM, EXTERNAL)         |
  95.         MCBSP_FMKS(PCR, CLKXM, INPUT)           |
  96.         MCBSP_FMKS(PCR, CLKRM, INPUT)           |
  97.         MCBSP_FMKS(PCR, CLKSSTAT, DEFAULT)      |
  98.         MCBSP_FMKS(PCR, DXSTAT, DEFAULT)        |
  99.         MCBSP_FMKS(PCR, FSXP, ACTIVEHIGH)       |
  100.         MCBSP_FMKS(PCR, FSRP, ACTIVEHIGH)       |
  101.         MCBSP_FMKS(PCR, CLKXP, FALLING)         |
  102.         MCBSP_FMKS(PCR, CLKRP, RISING)
  103. };

  104. #endif
NWPU_CHEN 发表于 2014-8-6 20:27 | 显示全部楼层
这里边没有相关定义,你把initFunction和主函数的头文件及它包含的头文件贴出来,你也仔细看看
 楼主| stdenis 发表于 2014-8-7 09:19 | 显示全部楼层
NWPU_CHEN 发表于 2014-8-6 20:27
这里边没有相关定义,你把initFunction和主函数的头文件及它包含的头文件贴出来,你也仔细看看 ...

主函数
  1. /*****************FPGA与DSP通信*******************/
  2. /*****************use_McBSP_&_EDMA****************/
  3. /******include*******/
  4. #define CHIP_6713
  5. #include <stdio.h>
  6. #include "cslinclude.h"
  7. #include "BufferHead.h"
  8. #include "ConfigStructure.h"

  9. /******define*******/
  10. /******global*******/
  11. Uint32 i;
  12. Uint32 TempData=0;
  13. Uint32 Reg=0;

  14. Uint32 i1;
  15. Uint32 i2;
  16. Uint32 i3;

  17. Uint32 j=0;                //数据存储计数;
  18. Uint32 j1=0;        //PingBuffer计数;
  19. Uint32 j2=0;        //PongBuffer计数;
  20. Int16 tempdata;
  21. Int16 wavedata[100];

  22. volatile short xpingOrpong = PING;  // Ping-pong state variable
  23. volatile short rpingOrpong = PING;
  24. volatile short xmtdone = 0;
  25. volatile short rcvdone = 0;
  26. /******function_prototypes*******/

  27. extern void initMcbsp(void);
  28. extern void initEdma(void);
  29. extern void initIrq(void);
  30. extern void initGpio(void);

  31. void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length);
  32. void processBuffer(void);
  33. void edmaHwi(void);

  34. extern far void vectors();
  35. void setupInterrupts(void);
  36. /******extern*******/

  37. /******main*******/
  38. void main()
  39. {
  40.           // Initialize CSL
  41.     CSL_init();

  42.     /*  CACHE_clean(CACHE_L2ALL, 0, 0);
  43.       CACHE_enableCaching(CACHE_CE00);
  44.       CACHE_setL2Mode(CACHE_64KCACHE);*/

  45.     /* Clear buffers */
  46.     memset((void *)gBufferXmtPing, 0, BUFFSIZE * 4 * 2);

  47.     initMcbsp();               // Initialize McBSP1 for audio transfers
  48.     IRQ_globalDisable();       // Disable global interrupts during setup
  49.     initEdma();                // Initialize the EDMA controller
  50.     initIrq();                 // Initialize interrupts
  51.     IRQ_globalEnable();        // Re-enable global interrupts
  52.         initGpio();
  53.         while(1)
  54.         {
  55.                 if(rcvdone && xmtdone)
  56.                 {
  57.                         rcvdone=0;
  58.                         xmtdone=0;
  59.                         if(rpingOrpong == PING)
  60.                         {
  61.                                 tempdata=gBufferRcvPing[j1];
  62.                                 j1++;
  63.                                 rpingOrpong = PONG;
  64.                         }
  65.                         if(rpingOrpong == PONG)
  66.                         {
  67.                                 tempdata=gBufferRcvPing[j2];
  68.                                 j2++;
  69.                                 rpingOrpong = PING;
  70.                         }
  71.                         printf("data = %d \n",tempdata);
  72.                         wavedata[j]=tempdata;
  73.                         j++;
  74.                 }
  75.         }
  76. }
  77. /******functions*******/
  78. void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length)
  79. {
  80.     Int16 i = 0;

  81.     for (i = 0; i < length; i++) {
  82.         outbuf  = inbuf ;
  83.                 printf("outbuf=%d\n",outbuf);
  84.     }
  85. }
  86. /* ---------------------- Interrupt Service Routines -------------------- */

  87. /*
  88. *  edmaHwi() - Interrupt service routine for the DMA transfer.  It is
  89. *              triggered when a complete DMA receive frame has been
  90. *              transferred.   The edmaHwi ISR is inserted into the interrupt
  91. *              vector table at compile time through a setting in the DSP/BIOS
  92. *              configuration under Scheduling --> HWI --> HWI_INT8.  edmaHwi
  93. *              uses the DSP/BIOS Dispatcher to save register state and make
  94. *              sure the ISR co-exists with other DSP/BIOS functions.
  95. */
  96. void edmaHwi(void)
  97. {

  98.     //LOG_printf(&trace, "edmaHwi start!\\n";   \\???

  99.     /* Check CIPR to see which transfer completed */
  100.     if (EDMA_intTest(gXmtChan))
  101.     {
  102.         EDMA_intClear(gXmtChan);
  103.         xmtdone = 1;
  104.     }
  105.     if (EDMA_intTest(gRcvChan))  //如果收到数据;
  106.     {
  107.         EDMA_intClear(gRcvChan);
  108.         rcvdone = 1;

  109.     }
  110. }
  111. /* ------------------------------- Threads ------------------------------ */

  112. /*
  113. *  processBuffer() - Process audio data once it has been received.
  114. */
  115. void processBuffer(void)
  116. {
  117.     Uint32 pingPong;

  118.         //LOG_printf(&trace, "processBuffer start!\\n");

  119.     /* Get contents of mailbox posted by edmaHwi */
  120.     pingPong =  SWI_getmbox();

  121.     /* Copy data from transmit to receive, could process audio here */
  122.     if (pingPong == PING) {

  123.         /* Copy receive PING buffer to transmit PING buffer */
  124.         copyData(gBufferRcvPing, gBufferXmtPing, BUFFSIZE);
  125.     } else {

  126.         /* Copy receive PONG buffer to transmit PONG buffer */
  127.         copyData(gBufferRcvPong, gBufferXmtPong, BUFFSIZE);
  128.     }
  129. }

initFunction
  1. /*****************FPGA与DSP通信*******************/
  2. /*****************use_McBSP_&_EDMA****************/
  3. /******include*******/
  4. #define CHIP_6713
  5. #include <stdio.h>
  6. #include "cslinclude.h"
  7. #include "BufferHead.h"
  8. #include "ConfigStructure.h"

  9. /******define*******/
  10. /******global*******/
  11. Uint32 i;
  12. Uint32 TempData=0;
  13. Uint32 Reg=0;

  14. Uint32 i1;
  15. Uint32 i2;
  16. Uint32 i3;

  17. Uint32 j=0;                //数据存储计数;
  18. Uint32 j1=0;        //PingBuffer计数;
  19. Uint32 j2=0;        //PongBuffer计数;
  20. Int16 tempdata;
  21. Int16 wavedata[100];

  22. volatile short xpingOrpong = PING;  // Ping-pong state variable
  23. volatile short rpingOrpong = PING;
  24. volatile short xmtdone = 0;
  25. volatile short rcvdone = 0;
  26. /******function_prototypes*******/

  27. extern void initMcbsp(void);
  28. extern void initEdma(void);
  29. extern void initIrq(void);
  30. extern void initGpio(void);

  31. void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length);
  32. void processBuffer(void);
  33. void edmaHwi(void);

  34. extern far void vectors();
  35. void setupInterrupts(void);
  36. /******extern*******/

  37. /******main*******/
  38. void main()
  39. {
  40.           // Initialize CSL
  41.     CSL_init();

  42.     /*  CACHE_clean(CACHE_L2ALL, 0, 0);
  43.       CACHE_enableCaching(CACHE_CE00);
  44.       CACHE_setL2Mode(CACHE_64KCACHE);*/

  45.     /* Clear buffers */
  46.     memset((void *)gBufferXmtPing, 0, BUFFSIZE * 4 * 2);

  47.     initMcbsp();               // Initialize McBSP1 for audio transfers
  48.     IRQ_globalDisable();       // Disable global interrupts during setup
  49.     initEdma();                // Initialize the EDMA controller
  50.     initIrq();                 // Initialize interrupts
  51.     IRQ_globalEnable();        // Re-enable global interrupts
  52.         initGpio();
  53.         while(1)
  54.         {
  55.                 if(rcvdone && xmtdone)
  56.                 {
  57.                         rcvdone=0;
  58.                         xmtdone=0;
  59.                         if(rpingOrpong == PING)
  60.                         {
  61.                                 tempdata=gBufferRcvPing[j1];
  62.                                 j1++;
  63.                                 rpingOrpong = PONG;
  64.                         }
  65.                         if(rpingOrpong == PONG)
  66.                         {
  67.                                 tempdata=gBufferRcvPing[j2];
  68.                                 j2++;
  69.                                 rpingOrpong = PING;
  70.                         }
  71.                         printf("data = %d \n",tempdata);
  72.                         wavedata[j]=tempdata;
  73.                         j++;
  74.                 }
  75.         }
  76. }
  77. /******functions*******/
  78. void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length)
  79. {
  80.     Int16 i = 0;

  81.     for (i = 0; i < length; i++) {
  82.         outbuf  = inbuf ;
  83.                 printf("outbuf=%d\n",outbuf);
  84.     }
  85. }
  86. /* ---------------------- Interrupt Service Routines -------------------- */

  87. /*
  88. *  edmaHwi() - Interrupt service routine for the DMA transfer.  It is
  89. *              triggered when a complete DMA receive frame has been
  90. *              transferred.   The edmaHwi ISR is inserted into the interrupt
  91. *              vector table at compile time through a setting in the DSP/BIOS
  92. *              configuration under Scheduling --> HWI --> HWI_INT8.  edmaHwi
  93. *              uses the DSP/BIOS Dispatcher to save register state and make
  94. *              sure the ISR co-exists with other DSP/BIOS functions.
  95. */
  96. void edmaHwi(void)
  97. {

  98.     //LOG_printf(&trace, "edmaHwi start!\\n";   \\???

  99.     /* Check CIPR to see which transfer completed */
  100.     if (EDMA_intTest(gXmtChan))
  101.     {
  102.         EDMA_intClear(gXmtChan);
  103.         xmtdone = 1;
  104.     }
  105.     if (EDMA_intTest(gRcvChan))  //如果收到数据;
  106.     {
  107.         EDMA_intClear(gRcvChan);
  108.         rcvdone = 1;

  109.     }
  110. }
  111. /* ------------------------------- Threads ------------------------------ */

  112. /*
  113. *  processBuffer() - Process audio data once it has been received.
  114. */
  115. void processBuffer(void)
  116. {
  117.     Uint32 pingPong;

  118.         //LOG_printf(&trace, "processBuffer start!\\n");

  119.     /* Get contents of mailbox posted by edmaHwi */
  120.     pingPong =  SWI_getmbox();

  121.     /* Copy data from transmit to receive, could process audio here */
  122.     if (pingPong == PING) {

  123.         /* Copy receive PING buffer to transmit PING buffer */
  124.         copyData(gBufferRcvPing, gBufferXmtPing, BUFFSIZE);
  125.     } else {

  126.         /* Copy receive PONG buffer to transmit PONG buffer */
  127.         copyData(gBufferRcvPong, gBufferXmtPong, BUFFSIZE);
  128.     }
  129. }

bufferhead.h
  1. #ifndef BUFFER_HEAD
  2. #define BUFFER_HEAD

  3.         /* Constants for the buffered ping-pong transfer */
  4.         #define PING 0
  5.         #define PONG 1

  6.         #define BUFFSIZE 1000
  7.         //#define NN 480

  8.         /* Create Buffers for the use of EDMA
  9.          * Data buffer declarations - the program uses four logical buffers of size
  10.          * BUFFSIZE, one ping and one pong buffer on both receive and transmit sides.
  11.          */
  12.         Int16 gBufferXmtPing[BUFFSIZE];  // Transmit PING buffer
  13.         Int16 gBufferXmtPong[BUFFSIZE];  // Transmit PONG buffer

  14.         Int16 gBufferRcvPing[BUFFSIZE];  // Receive PING buffer
  15.         Int16 gBufferRcvPong[BUFFSIZE];  // Receive PONG buffer

  16.         Int16 gXmtChan;                       // TCC codes (see initEDMA())
  17.         Int16 gRcvChan;

  18. #endif
NWPU_CHEN 发表于 2014-8-7 11:30 | 显示全部楼层
你开始说的是gBufferRcvPing,后来咋又改成了gBufferXmtPing?估计你写错了吧,现在不管是哪个了,就当是gBufferXmtPing:两个c函数都用到了,把这个参数定义放到两个C函数(initFunction或者是main函数)文件之一的顶部,将bufferhead.h中的定义删除,然后另一C函数顶部添加extern Uint16 gBufferXmtPing【BUFFSIZE],全局作用,就没错误了,BUFFSIZE的宏定义不变;另外如果还有相同错误的变量也这么干;
我建议你在CCS中编程一个C文件对应一个相应的头文件,所用该文件中用到的变量仅包含在所对应头文件中,其他文件引用时,在对应头文件中添加extern+定义变量!

 楼主| stdenis 发表于 2014-8-7 14:44 | 显示全部楼层
谢谢,问题解决了!结贴了
zhangmangui 发表于 2014-8-7 23:13 | 显示全部楼层
stdenis 发表于 2014-8-7 14:44
谢谢,问题解决了!结贴了

好吧   看来还不会结贴   
结贴是要操作的   
问题解决了给大家分享一下
久倚斜阳春风醉 发表于 2015-1-15 21:51 | 显示全部楼层
请问楼主是怎么解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部