|
楼主 |
发表于 2021-5-14 15:18:20
|
显示全部楼层
你好,
貌似 如下几种定义没有使用指针,
如何把常数字符串定义在flash 空间?
法一:unsigned char __flash temptab[] = {1,2,3,4,5};
法二:__flash unsigned char temptab[] = {1,2,3,4,5};
法三:#pragma type_attribute=__flash
unsigned char temptab[]={1,2,3,4,5};
法四:const unsigned char temptab[]={1,2,3,4,5};
我目前 使用第二个方法 貌似编译时倒是可以的,只不过 data 与 code 区域都会增加空间,
__flash char *Xingqi_a[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
但是如果改成
char __flash *Xingqi_b[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; 这样则不行,在引用时会出错
-------------------------------
char __buf[4];
strcpy(__buf, Xingqi_a[18%24]); // 引用时貌似是可以 OK 的,只是 data 及 code 区域都会增加空间
strcpy(__buf, Xingqi_b[18%24]); // 引用时会出错, ????
-------------------------------------------------------------
如果使用 方法4,编译可以正常通过,只是 data 与 code 也都增加空间,而且 data 增加的空间比较大,avr 的单片机 data 比较宝贵呀,木有那么多的 空间给他使用,
--------------------------------------------------------------------
另外一种方法是吧 上面的字符分开
__flash char Xingqi_a[]={"星期日"};
__flash char Xingqi_b[]={"星期一"};
__flash char Xingqi_c[]={"星期二"};
__flash char Xingqi_d[]={"星期三"};
__flash char Xingqi_e[]={"星期四"};
__flash char Xingqi_f[]={"星期五"};
__flash char Xingqi_g[]={"星期六"};
只是这样的话,程序就貌似显得有点复杂啊,
大神还有没有什么其他的好方法啊 ???
|
|