找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 372|回复: 4
收起左侧

程序不正确,请教一下

[复制链接]
ID:734017 发表于 2025-4-18 04:16 | 显示全部楼层 |阅读模式
u8 EE_RAM =0;  //eeprom取值


void Select_function(u8 EE_RAM_PAR)   //主菜单显示
{         
                                u8 i,k,h=0;               
                                u8 l = 28;
                                u8 EE_RA_temp = EE_RAM_PAR;
                                        u8        order        =        EE_RAM_PAR;
           for(i = 0; i < 8; i++)
           {
                                
                     if(0 != (EE_RA_temp & 0x80))  //0X80 = 0B1000 0000
                                                {        
                                                k=k+1;                                                                                       
                                                }
                                                EE_RA_temp <<= 1;
           }

                 Loop_sending(k);
                        
                switch(k)                         第一次上电不知道为什么会运行,放个大于8的数也不行                                       
                        {
                        case 1 :for(i = 0; i < 8; i++)
                               {
                                    if(0 != (order & 0x80))
                                        {                                                                                                                                                         
                                             Combination_X = Combination_1X;
                                             Combination_y = Combination_1y;
                                               l += h;
                                               Loop_sending(l);
                                                                                                                                
                                                }               
                                           h++;
                                      order <<= 1;        
                                 }        
                                break;
default:break;
}
}

回复

使用道具 举报

ID:277550 发表于 2025-4-18 09:12 | 显示全部楼层
第一次上电,指新的mcu、未初始化的mcu?

EEPROM 初始值 是 0xff的吧。
回复

使用道具 举报

ID:734017 发表于 2025-4-18 12:04 | 显示全部楼层
devcang 发表于 2025-4-18 09:12
第一次上电,指新的mcu、未初始化的mcu?

EEPROM 初始值 是 0xff的吧。

是的,初始k=0;可不行
回复

使用道具 举报

ID:1109793 发表于 2025-4-18 12:48 | 显示全部楼层
不懂,是啥芯片?EE_RAM_PAR是eeprom的数据?
回复

使用道具 举报

ID:1137639 发表于 2025-4-18 20:50 | 显示全部楼层
问题分析 变量未初始化:k 变量在使用之前没有进行初始化,这会使它的值是不确定的,可能会引发计算错误。 注释不规范:部分注释存在多余的空格,并且一些注释没有很好地解释代码的意图。 代码可读性:代码的格式不够清晰,缺少必要的空格和缩进,这会对代码的可读性产生影响。#include <stdint.h>  // 假设这些变量在其他地方定义 extern uint8_t Combination_X; extern uint8_t Combination_y; extern uint8_t Combination_1X; extern uint8_t Combination_1y;  // eeprom取值 uint8_t EE_RAM = 0;  // 假设这个函数在其他地方定义 void Loop_sending(uint8_t value);  // 主菜单显示 void Select_function(uint8_t EE_RAM_PAR) {     uint8_t i, k = 0, h = 0;     uint8_t l = 28;     uint8_t EE_RA_temp = EE_RAM_PAR;     uint8_t order = EE_RAM_PAR;      // 统计 EE_RAM_PAR 中最高位为 1 的位数     for (i = 0; i < 8; i++) {         if (0 != (EE_RA_temp & 0x80)) {             k++;         }         EE_RA_temp <<= 1;     }      Loop_sending(k);      switch (k) {         case 1:             for (i = 0; i < 8; i++) {                 if (0 != (order & 0x80)) {                     Combination_X = Combination_1X;                     Combination_y = Combination_1y;                     l += h;                     Loop_sending(l);                 }                 h++;                 order <<= 1;             }             break;         default:             break;     } }     
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表