还发现一个问题:
我定义了数组:uint8_t const Metalor[] = {M,e,t,a,l,o,r};
uint8_t const Lynn[] = {L,y,n,n,};
uint8_t const _21ic[] = {tt,kg,2,1,i,c};
函数:void vWriteString(uint8_t add,uint8_t const *pData) //在1602显示字符串
{
vWriteCom(0x80+add);
while(*pData != '\0')
{
vWriteData(0x30 + *pData);
pData++;
}
}
当执行 vWriteString(15,Metalor)时,三个数组的数据都被显示。
当执行 vWriteString(15,Lynn)时,后两个数组的数据都被显示。
当执行 vWriteString(15,_21ic)时,只显示_21ic[]数组的数据。
也就是说,在编译时这三个数组被编译成了一个数组!!!
因为我们知道每个数组的最后都默认有一个'\0’表示数组结束,我在函数里设置了数组结尾的判断,但没有效,函数一直执行直到第三个数组结束才停止(才遇到'\0'),只能说三个数组被编译成了一个数组才解释的通!!!
我只有在数组末尾手动加上'\0'函数才被正确执行!
即数组改为: uint8_t const Metalor[] = {M,e,t,a,l,o,r,'\0'};
uint8_t const Lynn[] = {L,y,n,n,'\0'};
uint8_t const _21ic[] = {tt,kg,2,1,i,c}; |