找回密码
 立即注册
查看: 471|回复: 7

写了个测试引脚电平的函数,发现特别麻烦

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-03-26 11:31:32

6

主题

17

回帖

86

积分

注册会员

积分
86
发表于 2024-3-19 10:31:42 | 显示全部楼层 |阅读模式
我的办法又笨,代码又冗长。
有没有办法简化一下?

void ShowPinLevel()
{
                S32 value1, value2;
                U8 Pin, Pin_num;
                U8 Pin_value;
       
                value1 = ReadPara();
                value2 = ReadPara();

        PrintString("\r\n探测引\xfd脚电平 ");
       
        if(value1 < 0 || value1 > 7 || value2 < 0 || value2 > 7)
        {
                PrintString("\r\n参数\xfd错误!");
        }
       
        Pin = (U8)value1;
        Pin_num = (U8)value2;
       
        printf_com1("%d.%d: ", (S32)Pin, (S32)Pin_num);
       
        switch(Pin)
        {
                case 0:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P00;
                                        break;
                                case 1:
                                        Pin_value = P01;
                                        break;
                                case 2:
                                        Pin_value = P02;
                                        break;
                                case 3:
                                        Pin_value = P03;
                                        break;
                                case 4:
                                        Pin_value = P04;
                                        break;
                                case 5:
                                        Pin_value = P05;
                                        break;
                                case 6:
                                        Pin_value = P06;
                                        break;
                                case 7:
                                        Pin_value = P07;
                                        break;
                        }
                        break;
                case 1:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P10;
                                        break;
                                case 1:
                                        Pin_value = P11;
                                        break;
                                case 2:
                                        Pin_value = P12;
                                        break;
                                case 3:
                                        Pin_value = P13;
                                        break;
                                case 4:
                                        Pin_value = P14;
                                        break;
                                case 5:
                                        Pin_value = P15;
                                        break;
                                case 6:
                                        Pin_value = P16;
                                        break;
                                case 7:
                                        Pin_value = P17;
                                        break;
                        }                       
                        break;
                case 2:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P20;
                                        break;
                                case 1:
                                        Pin_value = P21;
                                        break;
                                case 2:
                                        Pin_value = P22;
                                        break;
                                case 3:
                                        Pin_value = P23;
                                        break;
                                case 4:
                                        Pin_value = P24;
                                        break;
                                case 5:
                                        Pin_value = P25;
                                        break;
                                case 6:
                                        Pin_value = P26;
                                        break;
                                case 7:
                                        Pin_value = P27;
                                        break;
                        }                       
                        break;
                case 3:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P30;
                                        break;
                                case 1:
                                        Pin_value = P31;
                                        break;
                                case 2:
                                        Pin_value = P32;
                                        break;
                                case 3:
                                        Pin_value = P33;
                                        break;
                                case 4:
                                        Pin_value = P34;
                                        break;
                                case 5:
                                        Pin_value = P35;
                                        break;
                                case 6:
                                        Pin_value = P36;
                                        break;
                                case 7:
                                        Pin_value = P37;
                                        break;
                        }                       
                        break;
                case 4:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P40;
                                        break;
                                case 1:
                                        Pin_value = P41;
                                        break;
                                case 2:
                                        Pin_value = P42;
                                        break;
                                case 3:
                                        Pin_value = P43;
                                        break;
                                case 4:
                                        Pin_value = P44;
                                        break;
                                case 5:
                                        Pin_value = P45;
                                        break;
                                case 6:
                                        Pin_value = P46;
                                        break;
                                case 7:
                                        Pin_value = P47;
                                        break;
                        }                       
                        break;
                case 5:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P50;
                                        break;
                                case 1:
                                        Pin_value = P51;
                                        break;
                                case 2:
                                        Pin_value = P52;
                                        break;
                                case 3:
                                        Pin_value = P53;
                                        break;
                                case 4:
                                        Pin_value = P54;
                                        break;
                                case 5:
                                        Pin_value = P55;
                                        break;
                                case 6:
                                        Pin_value = P56;
                                        break;
                                case 7:
                                        Pin_value = P57;
                                        break;
                        }                       
                        break;
                case 6:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P60;
                                        break;
                                case 1:
                                        Pin_value = P61;
                                        break;
                                case 2:
                                        Pin_value = P62;
                                        break;
                                case 3:
                                        Pin_value = P63;
                                        break;
                                case 4:
                                        Pin_value = P64;
                                        break;
                                case 5:
                                        Pin_value = P65;
                                        break;
                                case 6:
                                        Pin_value = P66;
                                        break;
                                case 7:
                                        Pin_value = P67;
                                        break;
                        }                       
                        break;
                case 7:
                        switch(Pin_num)
                        {
                                case 0:
                                        Pin_value = P70;
                                        break;
                                case 1:
                                        Pin_value = P71;
                                        break;
                                case 2:
                                        Pin_value = P72;
                                        break;
                                case 3:
                                        Pin_value = P73;
                                        break;
                                case 4:
                                        Pin_value = P74;
                                        break;
                                case 5:
                                        Pin_value = P75;
                                        break;
                                case 6:
                                        Pin_value = P76;
                                        break;
                                case 7:
                                        Pin_value = P77;
                                        break;
                        }                       
                        break;
        }
        printf_com1("%d", Pin_value);
}

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

积分
771
发表于 2024-3-19 13:36:30 | 显示全部楼层
大概看了下,以下代码可以试下,应该满足你的要求
switch(Pin)
{
    case 0:
        Pin_value=(P0>>=Pin_num);
        Pin_value&=0x01;
        break;
    case 1:
        Pin_value=(P1>>=Pin_num);
        Pin_value&=0x01;
        break;
    以下省略...
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-03-26 11:31:32

6

主题

17

回帖

86

积分

注册会员

积分
86
发表于 2024-3-19 14:18:24 | 显示全部楼层
好的,试下!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-3-19 15:48:00 | 显示全部楼层
case GPIO_P0:
        result = (P0 & GPIOPinx) ? Bit_SET : Bit_RESET;
        break;
类似这样?
返回值 result Bit_SET 为高电平,Bit_RESET 为低电平
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-03-19 14:30:05

0

主题

3

回帖

10

积分

新手上路

积分
10
发表于 2024-3-19 16:37:46 | 显示全部楼层
本帖最后由 youyou 于 2024-3-19 16:40 编辑


上述代码的功能是读取特定引脚的电平状态。它首先读取两个参数,分别对应引脚的端口号和引脚号,然后根据这两个参数的值从相应的端口读取特定引脚的电平状态,并打印出来。代码的核心逻辑是使用嵌套的switch语句来找到正确的引脚并读取其值。

为了优化代码并减少其长度,我们可以使用一个二维数组来存储引脚值。这将允许我们用简单的索引访问,从而消除了深层嵌套的switch语句。下面是一个简化后的版本的代码示例:

void ShowPinLevel() {
    S32 value1, value2;
    U8 pin, pin_num;
    U8 pin_value;
    U8 pins[8][8] = {{P00, P01, P02, P03, P04, P05, P06, P07},
                      {P10, P11, P12, P13, P14, P15, P16, P17},
                      /* continue filling in for all pins */
                     };

    value1 = ReadPara();
    value2 = ReadPara();

    PrintString("\r\n探测引脚电平 ");
   
    if(value1 < 0 || value1 > 7 || value2 < 0 || value2 > 7) {
        PrintString("\r\n参数错误!");
        return;
    }
   
    pin = (U8)value1;
    pin_num = (U8)value2;
    pin_value = pins[pin][pin_num];
    printf_com1("%d.%d: %d", (S32)pin, (S32)pin_num, pin_value);
}
注意:在这个优化版本中,我假设P00, P01, ..., P77已经定义为合适的值。这个代码段还假设ReadPara,PrintString和printf_com1等函数的实现是正确的,并且它们的使用在这个上下文中是恰当的。上述代码实现了与原始代码相同的功能,但显著减少了代码行数。

点评

有一种GPT的味道啊  发表于 2024-3-20 10:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-03-26 11:31:32

6

主题

17

回帖

86

积分

注册会员

积分
86
发表于 2024-3-21 10:42:13 | 显示全部楼层
实测不行,编译通不过

编译错误

编译错误
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-3-21 11:19:57 | 显示全部楼层
你可以直接打印那个寄存器的, 比如说P0 的u8 或者P1 的u8 然后你就知道对应的每一位了
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 15:41 , Processed in 0.115077 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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