打印

请教2407中使用C语言定义.const段定义问题

[复制链接]
4035|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huttu|  楼主 | 2007-11-29 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前几天发一贴,没人回,整理问题重新发一下。

问题是这样:LCD显示数据使用static const定义为数组,希望编译后数据保存到程序空间,因此在CMD文件中使用 .const load = PROG PAGE 0,将数据定义到程序空间。在程序中使用函数BLKMVP2D,将数据从程序空间搬到相应的数据空间,由于.const段定义没能理解好,这个问题一直困扰着我。这几天去掉static 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 
我的理解是,若只使用.const load = PROG PAGE 0定义的数据,数据能载到程序空间,但此时若使用指针向数据就会出现数据类型不匹配的问题,因此后面的RUN一段看来还是必须要用,看谁能解释一下的?

原贴内容如下:

我遇到了一个很奇怪的问题,把数组定义到程序空间,在程序中使用指针不能指向程序空间的数组名,下面是具体的问题描述,请达人帮忙指导一下

数组是这样定义:
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.

相关帖子

沙发
snakeemail| | 2007-11-29 10:58 | 只看该作者

不懂

LCD显示数据使用static const定义为数组,希望编译后数据保存到程序空间??
不懂.
例如显示电压,电压的值变化,那么这个值不是变量吗?怎么会成常量?

使用特权

评论回复
板凳
huttu|  楼主 | 2007-11-29 15:34 | 只看该作者

LCD显示的数据只是显示的数据

我用的是点阵式LCD显示,128×32点阵,不涉及到显示电压的变化

使用特权

评论回复
地板
euvjin| | 2007-11-30 17:13 | 只看该作者

指向C1A的指针,也要定义为const Uint16*

使用特权

评论回复
5
西安化易| | 2007-12-12 01:01 | 只看该作者

你的指针类型不对,所以不对了.

const Uint16 * data_src 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

100

帖子

0

粉丝