常量数组调用方法: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);
...
}
文章评论(0条评论)
登录后参与讨论