自己记点笔记 比较垃圾
void Lcd_printf(unsigned int x,unsigned int y,unsigned int c,unsigned int bk_c,unsigned int st,char *fmt,...)
{
char __LCD_Printf_Buf[256];
//原型是typedef int *va_list[1]; va_list是一个新的数据类型,这个类型是只有一个元素的数组,元素
//是int* 指针
va_list ap;
//字符串指针指向定义的BUF
unsigned char *pStr = (unsigned char *)__LCD_Printf_Buf;
unsigned int i = 0;
//#define va_start(ap, parmN) (void)(*(ap) = __va_start(parmN))
//使ap指向参数列表,...) 就是这个
va_start(ap,fmt);
//然后按照fmt的格式把参数打印到_LCD_Printf这个buf里
vsprintf(__LCD_Printf_Buf,fmt,ap);
//ap指针用完释放是个好习惯,ap=0活null
va_end(ap);
while(*pStr != 0 )
{
switch(*pStr)
{
case '\n' :
{
break;
}
default:
{
if( *pStr > 0xA0 & *(pStr+1) > 0xA0 ) //中文输出 汉字的内码大于A0A0
{
Lcd_PutHZ( x , y , (*pStr - 0xA0)*0x0100 + *(pStr+1) - 0xA0 , c , bk_c , st);
pStr++;
i++;
x += 16;
}else //英文输出
{
Lcd_PutASCII( x , y , *pStr , c , bk_c , st );
x += 8;
}
break;
}
}
pStr++;
i++;
//,pStr字符串应该有结束符
// 可能在不正常的时候pStr中就没有结束符号,就要靠下面的代码了
if( i > 256 ) break;
}
}
#endif
//TASK
OS_STK MainTaskStk[MainTaskStkLengh];
OS_STK Task0Stk [Task0StkLengh]; // Define the Task0 stack
OS_STK Task1Stk [Task1StkLengh]; // Define the Task1 stack
OS_STK Task2Stk [Task2StkLengh]; // Define the Task1 stack
把这些变量都粘贴到。h文件中发现不好用,经过百度得知,在头文件不能定义变量,只能声明变量
**************************************************************************************************************************
我在一个文件key.h中定义了几个全局变量,在target.c和key.c文件中都要用到,main函数在key.c里,target.c里有一段时钟的中断程序,编译时出现这样的语句:Error : L6200E: Symbol key1Ct multiply defined (by Target.o and KEY.o).
Error : L6200E: Symbol keyCt multiply defined (by KEY.o and Target.o).
我又在声明全局变量keyCt前加了extern,还是不行,请问应该怎样解决?Thank you very much!
头文一般仅声明变量,变量定义一般在c文件中。
从原理上来说是可以的。
在一个头文件中定义一个变量,那么在编译期(cp)是不会出错的。
每个cpp对应的obj里面的.data(或者.bss)段里面都含有这个变量符号,但是在链接(lk)的时候,一般系统会警告提示你说某个变量重复定义等。
假设你能链接程序成功,那么也是有可能的。
如果在头文件里面用extern 声明,但是在多个cpp文件里面进行定义,出现的情况可能是一样的。
上述两中定义,假设你能编译链接成功,但可能使得你的初始化会出现一些意想不到的结果。例如你在cpp1里面给你的定义赋值 a, cpp2里面赋值为b,其实链接的时候,就没法知道到底表示的是几了。可能在不同的机器上编译的结果不一样。
加extern的叫声明
唉 还是C语言没学好 !!!!!
用户377235 2012-10-8 10:13
有的地方还是不明白 无语
用户377235 2012-9-30 11:07