优化代码void portOutput(PortType base, uint16_t pin, uint8_t value) { Siul2_Dio_Ip_GpioType * port = 0; switch(base){ case PTA: if(pin<16){ port = PTA0; }else{ port = PTA1; } break; case PTB: if(pin<16){ port = PTB0; }else{ port = PTB1; } break; case PTC: if(pin<16){ port = PTC0; }else{ port = PTC1; } break; case PTD: if(pin<16){ port = PTD0; }else{ port = PTD1; } break; case PTE: if(pin<16){ port = PTE0; }else{ port = PTE1; } break; } //使能EN引脚 Siul2_Dio_Ip_WritePin(port,pin,value); }
时间: 2024-04-01 14:36:30 浏览: 106
Wsdl.rar_The Competition_WSDL
可以优化的地方有:
1. 将每个 case 内相似的代码提取出来,避免重复代码。
2. 将 PTA0、PTB0、PTC0、PTD0、PTE0 和 PTA1、PTB1、PTC1、PTD1、PTE1 分别存储到两个数组中,可通过位运算等方式计算索引来访问。
3. 可以将 port 和 value 参数的类型改为指针类型,这样可以避免不必要的内存拷贝。
4. 可以使用 enum 代替 PortType,这样可以避免传入非法的参数。
5. 可以使用宏定义代替硬编码的数字,提高代码可读性。
优化后的代码如下:
```c
typedef enum PortType {
PTA,
PTB,
PTC,
PTD,
PTE
} PortType;
Siul2_Dio_Ip_GpioType *port0[] = {PTA0, PTB0, PTC0, PTD0, PTE0};
Siul2_Dio_Ip_GpioType *port1[] = {PTA1, PTB1, PTC1, PTD1, PTE1};
#define IS_PIN_VALID(pin) ((pin) < 16)
void portOutput(PortType base, uint16_t pin, uint8_t *value) {
if (!IS_PIN_VALID(pin)) {
return;
}
Siul2_Dio_Ip_GpioType *port = (pin < 16) ? port0[base] : port1[base];
uint8_t bit = (uint8_t)(1 << pin);
Siul2_Dio_Ip_WritePin(port, bit, *value);
}
```
阅读全文