如何解决如何为新行编写函数
我正在使用一些AT终端在C程序上工作,需要我的代码来定义许多字符串变量,例如:
const char *AT_norn = "AT";
const char *AT = "AT\r\n";
const char *ATI = "ATI\r\n";
就像我有30条以上的AT命令一样,可以序列化输出。 所以我有一个问题 我尝试制作一个像这样的新字符串
const char *myeol = "\r\n";
IN发出“ AT \ r \ n”
我试图写这样的东西,但是没有成功:
UART_write(handle,AT_norn,sizeof(AT_norn));
UART_write(handle,myeol,sizeof(myeol));
如何使用上述方法节省一些RAM大小?
解决方法
将AT_norn
定义为
const char *AT_norn = "AT";
sizeof AT_Norn
返回所需的指针大小
const char AT_norn[] = "AT";
以获取数组的大小。
,正如已经提到的,sizeof
在您的方法中不起作用,因为它将计算指针的大小,而不是它指向的字符串文字。
如果您的目的是减少RAM使用量,则可以用宏替换变量。
#define AT "AT"
#define ATI "ATI"
这将删除RAM中的指针变量。 字符串本身很可能位于ROM中。
根据编译器和链接器的聪明程度,即使不使用您的指针,它们也可能包含在最终的二进制文件中。
定义宏仅导致包含实际使用的那些字符串。 在文件中多次使用的字符串应由编译器存储在同一位置。
这也使您可以使用sizeof
,因为sizeof
会得出用于存储字符串文字的字符数。
这也将与David的答案中建议的数组一起使用。
然后,您可以通过添加一个新功能来消除存储EOL的需要:
void UART_write_AT(int handle,unsigned char *buf,size_t len) {
UART_write(handle,buf,len);
UART_write(handle,"\r\n",2);
}
我没有检查参数的正确类型或返回值。您可以根据需要进行调整。
然后您可以这样称呼它:
UAR_write_AT(handle,ATI,sizeof(ATI)-1);
请注意-1
,因为sizeof包含了不应该发送到UART的字符串文字的结尾0
字节。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。