• 红温了,改了符号也没用


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 是老恭呀 2024-06-17 20:22 采纳率: 0% 浏览 13 首页/ 嵌入式 / (凑字数)撒厚度维护好v才看完 单片机嵌入式硬件c语言 代码展示 #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 #include #include #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(); } } 代码报错: 报错所应用的库: 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    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 函数。如果你有任何其他问题或需要进一步的帮助,请随时告诉我。

      展开全部

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      Spring扩展接口(3):BeanFactoryPostProcessor
      【算法】PTA刷题记录
      el-table 表格表头、单元格、滚动条样式修改
      Discrete Optimization课程笔记(3)—局部搜索
      springboot 调用第三方接口的方式(一)使用RestTemplate方法
      Maven引用本地jar包
      【公众号备份】运维现状思考之字字珠玑
      4、FFmpeg命令行操作9
      数据结构(3)基础查找算法——顺序查找、二分查找(JAVA版)
      灵性图书馆:好书推荐-《巫士唐望的教诲》
    • 原文地址:https://ask.csdn.net/questions/8119992