首页 理论教育 AVR单片机入门|处理和分配字符串

AVR单片机入门|处理和分配字符串

时间:2023-11-20 理论教育 版权反馈
【摘要】:最困难的是字符串的分配和处理,问题在于C中将字符串转换为char指针。如果希望节省空间,能使用常量字符型数组来将字符串只分配进程序存储器中。另外,新的字符串函数已加入了对只存储于FLASH中字符串的支持。当这个选项是选中的,字符串类型“const char*”是有效的,并且必须保证函数获得了合适的参数类型。除了新的“const char*”与字符串有关系外,创建了cprintf和csprintf函数承认字符串格式的类型。

AVR单片机入门|处理和分配字符串

在哈佛结构的AVR单片机中,程序内存和数据内存分开,给程序内存和数据内存的说明带来了一定的复杂性,现在来讨论一下字符串。

这个编译器将带有const说明的表和项目放入程序存储器中。最困难的是字符串的分配和处理,问题在于C中将字符串转换为char指针。如果字符串是分配在程序存储器中,那么所有字符串库函数中的任意一个必须被复制成不同于指针的操作,或者字符串也必须被分配在数据存储器中。ImageCraft编译器提出了解决这个问题的两个方法:

(1)默认的字符串

分配这个默认的方法是同时分配字符串在数据和程序存储器中,所有涉及的字符串是复制进数据存储器的,为了确保它们的值是正确的,在程序启动时字符串是由程序存储器复制进数据存储器中的。因此只有单一的字符串复制函数是必须的(编译器执行全局变量初始化也是这样处理的)。

如果希望节省空间,能使用常量字符型数组来将字符串只分配进程序存储器中。例如:

const char hello[]="Hello World";

在这个例子中,hello可以在上下文中作为字符串使用,但不能用作标准C库中字符串函数的参数。(www.xing528.com)

Printf已被扩展成带%S格式字符来输出只存储于FLASH中的字符串。另外,新的字符串函数已加入了对只存储于FLASH中字符串的支持。

(2)只分配全部字符串到FLASH存储器中

当对应“Project->Options->Target->Strings In FLASH Only”检查框被选中时,可以指挥编译器字符串只放在FLASH中,这时必须很小心地调用库函数。当这个选项是选中的,字符串类型“const char*”是有效的,并且必须保证函数获得了合适的参数类型。除了新的“const char*”与字符串有关系外,创建了cprintf和csprintf函数承认字符串格式的类型。读者可以参考标准输入输出函数。

注意,当选项2(只分配全部字符串到FLASH存储器中)时,应使用cprintf()。对const char*及const char ptr[]类型字符串,并且加%S参数。

当选项1时,应使用printf()。对const char*及const char ptr[]类型字符串,并且加%S参数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈