原创 PIC第三方编译软件CCS PCWH使用心得(3)

2010-4-4 16:19 2754 2 2 分类: MCU/ 嵌入式

  常量数组调用方法:CCS PCWH环境下对常量数组进行操作与其他C语言有所不同,对于单一数组操作也很简单不会遇到太多问题,但如果要作为参量来调用麻烦就来了,不注意还真不知道怎么使用。我的一个友人在用做CCS PCWHLCD显示程序时,便遇到了不小的麻烦。
  比如,定义一数组,通常定义为:
BYTE CONST TABLE[10]= {9,8,7,6,5,4,3,2,1,0};
对其直接可行的操作为x = TABLE或者x = TABLE[5],但是想将TABLE作为参量方式在另一个函数中调用,一般思路为:定义函数
void disp_bmp(unsigned char *dptr)
{
 unsigned char TEMP;
 ...
  TEMP = *dptr;
  ...
}
调用时:disp_bmp(TABLE)。很不幸,行不通!
  随即很多.......
    disp_bmp(&TABLE);
    disp_bmp(&TABLE[0]);
    .......
    或者是HELP文件描述的方法:
  The syntax is:
  const type id[cexpr] = {value}
    For example:
    Placing data into ROM
    const int table[16]={0,1,2...15}
    Placing a string into ROM
    const char cstring[6]={"hello"}
    Creating pointers to constants
    const char *cptr;
    cptr = string;


  或者改变数组定义方式:
  The syntax is:
  #rom address = {data, data, … , data}
  For example:
  Places 1,2,3,4 to ROM addresses starting at 0x1000
  #rom 0x1000 = {1, 2, 3, 4}
  Places null terminated string in ROM
  #rom 0x1000={"hello"}
  This method can only be used to initialize the program memory.


  这些方法都不能正确取得数据,原因在于无法建立一个正确的常量指针,最终取数都指向了RAM,而非ROM中。
  有一种方法,在HELP文件中有所描述:
  READ_PROGRAM_MEMORY (address, dataptr, count );
  Parameters:
   address is 32 bits . 
   dataptr is a pointer to one or more bytes.
   count is a 16 bit integer
  因此上述程序改为:
  void disp_bmp(unsigned int32 dptr)
    {
      unsigned char TEMP[2];
      ...
      READ_PROGRAM_MEMORY (dptr, TEMP, 1);
      ...
    }
    调用disp_bmp(TABLE)即可。但是对于下面几种情况仍将会产生错误调用:
  void disp_bmp(unsigned int32 dptr)
    {
      unsigned char TEMP;
      ...
      READ_PROGRAM_MEMORY (dptr, TEMP, 1);
      ...
    }
    或者是:
  void disp_bmp(unsigned int32 dptr)
    {
      unsigned char *TEMP;
      ...
      READ_PROGRAM_MEMORY (dptr, *TEMP, 1);
      ...
    }
  

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /3 下一条