是老恭呀 2024-06-17 20:22 采纳率: 0%
浏览 14

(凑字数)撒厚度维护好v才看完

代码展示

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h" 
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#define LED1 P1_0
#define LED2 P1_1
#define SW1  P1_2
void delay(int t)
{
  while(t--);
}
void init()
{
  P1SEL &=~0x1F;
  P1DIR |=0x1B;
  P1 &=~0x1B;
}
int x,y;
void hx()
{
  if(y>=0&&y<500)
  {
    x++;
    LED1=1;
    delay(x);
    LED1=0;
    delay(x);
    y++;
  }
  if(y>=500)
  {
    x--;
    LED1=1;
    delay(x);
    LED1=0;
    delay(x);
    y++;
  }
  if(y==1000)
  {
    x=0;
    y=0;
  }
}
unsigned char word[20];
void LED()
{
  if(halUartRead(word,sizeof(word)))
  {
    halMcuWaitMs(100);
    if(word[8]=="ZA 00 ZB")
    {
      LED1=0;
      LED2=0;
    }
    if(word[8]=="ZA 01 ZB")
    {
      LED1=1;
      LED2=0;
    }
    if(word[8]=="ZA 02 ZB")
    {
      LED1=0;
      LED2=1;
    }
    if(word[8]=="ZA 03 ZB")
    {
      hx();
    }
    if(word[8]=="ZA 04 ZB")
    {
      LED1=0;
      while(1)
      {
        LED2=1;
        halMcuWaitMs(500);
        LED2=0;
        halMcuWaitMs(500);
      }
    }
    memset(word,0,sizeof(word));
  }
}
/********************MAIN************************/
void main(void)
{
    halBoardInit();
    init();
    halUartInit(115200);
    while(1)
    {
      LED();
    }
}

代码报错:

img

报错所应用的库:

img

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-17 20:34
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    解决类型不匹配错误

    在你的代码中,你尝试使用 == 运算符来比较 unsigned char 类型的数组元素和 char * 类型的字符串。这是不允许的,因为它们是不同的数据类型。你需要将字符串转换为字符数组,然后逐个字符进行比较。以下是修正后的代码段:

    // 原始错误代码
    // if(word[8] == "ZA 00 ZB")
    
    // 修正后的代码
    char *cmd = "ZA 00 ZB";
    if(strncmp((char*)word + 8, cmd, strlen(cmd)) == 0)
    {
      LED1=0;
      LED2=0;
    }
    // 其他条件语句也使用相同的方法修正
    

    这里使用了 strncmp 函数,它允许你比较两个字符串直到它们不匹配或者到达字符串的末尾。注意,strlen(cmd) 用于获取字符串 cmd 的长度,确保比较的长度是正确的。

    理解 halUartRead 函数

    根据你提供的库代码片段,halUartRead 函数的作用是从串口读取数据。这个函数有两个参数:

    • uint8 *buf: 指向一个缓冲区的指针,用于存储从串口读取的数据。
    • uint16 len: 要读取的数据长度。

    函数的返回值是实际读取到的数据长度。

    使用 halUartRead 函数

    在你的代码中,halUartRead 被用来读取数据到 word 数组中。以下是如何正确使用这个函数的示例:

    unsigned char word[20];
    if(halUartRead(word, sizeof(word)) > 0) // 确保读取到数据
    {
      halMcuWaitMs(100); // 等待一段时间,可能用于稳定数据或其他目的
      // 处理读取到的数据
      // ...
    }
    

    从串口读取数据的处理

    读取数据后,你可以根据数据的内容执行不同的操作。例如,你可以根据读取到的数据来控制LED的状态。你已经在你的代码中尝试这样做了,但是需要修正类型不匹配的错误。

    总结

    • 修正类型不匹配错误,使用 strncmp 函数逐个字符比较。
    • 理解 halUartRead 函数的参数和返回值,确保正确读取数据。
    • 根据读取到的数据执行相应的操作,例如控制LED。

    希望这些信息能帮助你解决编译错误,并更好地理解如何使用 halUartRead 函数。如果你有任何其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 6月19日
  • 创建了问题 6月17日

悬赏问题

  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连
  • ¥15 进行一项代码设计遇到问题
  • ¥15 Mutisim中关于74LS192N计数器芯片设计(计数器)
  • ¥50 fastadmin后台无法删除文件
  • ¥15 oracle查询Socket read timed out错误