我已经将一个可编程的xbee与一个16x2字符的LCD接口。我在另一个xbee的帮助下传输无线帧,并将其显示在正在接收的xbee上。 当我一个接一个地发送两个无线帧时,就会出现问题。 考虑到我在第一帧中发送了24个字符,该字符将按原样正常显示(显示末尾有一个随机的多余字符,我不知道为什么) 例如,当我发送小于第一帧的第二帧时,就会出现问题。 6个字符。 LCD将显示这6个字符,但会在这6个字符之后的第一帧中添加另外18个字符。 显示屏看起来像这样:
Frame1显示:这是一条检查消息。 Frame2显示:您好! (原始消息:您好!)
我在不同位置的帧之间尝试了clearall()lcd函数,但是它不起作用。我还改变了您在代码中看到的内容,但它们不起作用。
当前代码如下: 在此处输入代码
#include <xbee_config.h>
#include <types.h>
#include <string.h>
#include <ctype.h>
#define char_lcd_writ_str(a) char_lcd_writ(a, strlen(a))
static uint8_t test_stage = 0;
static uint8_t test_stage_done = 0;
static const char str[] = "abcdefghijklmnopqrstuvwxyz012345";
#if defined(RTC_ENABLE_PERIODIC_TASK)
void rtc_periodic_task(void)
{
test_stage++;
if (test_stage == 8)
test_stage = 0;
test_stage_done = 0;
}
#endif
#ifdef ENABLE_XBEE_HANDLE_RX
int xbee_transparent_rx(const wpan_envelope_t FAR *envelope, void FAR *context)
{
int c=0;
char addrbuf[ADDR64_STRING_LENGTH];
char_lcd_init(CHAR_LCD_CFG);
char_lcd_clear();
addr64_format(addrbuf, &envelope->ieee_address);
sys_watchdog_reset();
while (c<4)
{
char_lcd_writ_str(envelope->payload);
delay_ticks(2*HZ);
char_lcd_clear();
char_lcd_goto_xy(0, 0);
c++;
}
}
#endif
void main(void)
{
uint8_t i, j;
sys_hw_init();
sys_xbee_init();
sys_app_banner();
char_lcd_init(CHAR_LCD_CFG);
for (;;) {
if (!test_stage_done) {
switch (test_stage) {
case 0:
char_lcd_goto_xy(0, 0);
char_lcd_writ_str("All working fine");
break;
}
test_stage_done = 1;
}
sys_watchdog_reset();
sys_xbee_tick();
}
}
ssize_t char_lcd_writ(const uint8_t *data, size_t len)
{
size_t written = 0;
while (written < len) {
char_lcd_putchar(*data++);
written++;
if ( written == 32 || written == 64 || written == 96 || written == 128 || written == 160 || written == 192 )
{
delay_ticks(2*HZ);
char_lcd_clear();
char_lcd_goto_xy(0, 0);
}
}
while (written < len) {
written = 0;
memset(*data++, '\0', len);
written++;
}
return (ssize_t)written;
}
答案 0 :(得分:0)
如果您超出信封中指定的有效载荷长度,可能很简单envelope->payload
不能为空终止,而实际上包含那些额外的字符。尝试将char_lcd_writ()
函数与有效载荷的长度一起使用,而不要使用char_lcd_writ_str()
来使用strlen()
来查找长度。