如何为新行编写函数
how to write a function for new line
我正在使用一些 AT 终端开发 C 程序,需要我的代码来定义许多字符串变量,例如:
const char *AT_norn = "AT";
const char *AT = "AT\r\n";
const char *ATI = "ATI\r\n";
就像我有 30 个或更多像上面那样的 AT 命令到 Serialprint 输出。
所以我有问题,
我尝试制作一个新的字符串
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
returns一个指针的大小,你要
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);
}
我没有检查正确的参数类型或 return 值。您可以根据自己的需要进行调整。
那么你可以这样称呼它:
UAR_write_AT(handle,ATI,sizeof(ATI)-1);
请注意 -1
,因为 sizeof 包含不应发送到 UART 的字符串文字的终止 0
字节。
我正在使用一些 AT 终端开发 C 程序,需要我的代码来定义许多字符串变量,例如:
const char *AT_norn = "AT";
const char *AT = "AT\r\n";
const char *ATI = "ATI\r\n";
就像我有 30 个或更多像上面那样的 AT 命令到 Serialprint 输出。 所以我有问题, 我尝试制作一个新的字符串
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
returns一个指针的大小,你要
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);
}
我没有检查正确的参数类型或 return 值。您可以根据自己的需要进行调整。
那么你可以这样称呼它:
UAR_write_AT(handle,ATI,sizeof(ATI)-1);
请注意 -1
,因为 sizeof 包含不应发送到 UART 的字符串文字的终止 0
字节。