我遇到了一个很奇怪的问题,把数组定义到程序空间,在程序中使用指针不能指向程序空间的数组名,下面是具体的问题描述,请达人帮忙指导一下
数组是这样定义: static const Uint16 C1A[] ={ 0x1022,0x06C00,0x080FC,0x004F4,0x004FE,0x004F8,0x000FE,0x00000, 0x0000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, 0x0000,0x2030,0x0AC63,0x02010,0x0FC84,0x08484,0x0FE82,0x0C282,0x00000, }; 在CMD文件中.const段是这么定义,.const后面的定义没有理解,暂没使用: .const: load = PROG PAGE 0 /*run = SARAM PAGE 1 { __const_run = .; *(.c_mark) *(.const) __const_length = . - __const_run; } /*Global and static const variables that are explicitly */ 使用blkMvP2D作为程序空间往数据空间传送数据函数,原形声明如下: extern Uint16 blkMvD2P( Uint16 *data_src, Uint16 size, Uint16 *pgm_dest );
指针定义如下: Uint16 mLcdBuf[256],*pData = mLcdBuf,*pStr; // mLcdBuf为开辟内存空间作为显示缓存,pData指向缓存首址,pStr指向程序空间的数组首址。
第一种尝试,使用数组名作为参数传递给函数: //blkMvP2D(C1A,24,pData+18); // 错误如下: [lcd.c] "C:\CCStudio_v3.1\C2400\cgtools\bin\dspcl" -g -q -fr"E:/dspProgram/huituc/Debug" -d"_DEBUG" -v2xx -@"Debug.lkf" "lcd.c" [lcd.c] "lcd.c", line 236: [E146] pointer argument disagrees with prototype Compile Complete, 1 Errors, 0 Warnings, 0 Remarks.
第二种尝试,重新定义一个指针,先把数组地址传递给指针 pStr = C1A; 仅这一句参与编译就出现以下错误 [lcd.c] "C:\CCStudio_v3.1\C2400\cgtools\bin\dspcl" -g -q -fr"E:/dspProgram/huituc/Debug" -d"_DEBUG" -v2xx -@"Debug.lkf" "lcd.c" [lcd.c] "lcd.c", line 235: [E124] operands of '=' point to different types Compile Complete, 1 Errors, 0 Warnings, 0 Remarks.
|