Hallo, ich schreibe alle einen eingebetteten C-Code auf STM32Fxx Mikroprozessoren mit Keil MicroVision IDE. In meinem Projekt verwende ich 8 Stück Relais. Ich habe jedes meiner Relais mit folgendem Codebeispiel deklariert. #define DO9_Pin GPIO_PIN_14 #define DO9_GPIO_Port GPIOC #define DO8_Pin GPIO_PIN_15 #define DO8_GPIO_Port GPIOC #define DO7_Pin GPIO_PIN_1 #define DO7_GPIO_Port GPIOA #define DO6_Pin GPIO_PIN_0 #define DO6_GPIO_Port GPIOA #define DO5_Pin GPIO_PIN_7 #define DO5_GPIO_Port GPIOB #define DO4_Pin GPIO_PIN_6 #define DO4_GPIO_Port GPIOB #define DO3_Pin GPIO_PIN_5 #define DO3_GPIO_Port GPIOB #define DO2_Pin GPIO_PIN_1 #define DO2_GPIO_Port GPIOB #define DO1_Pin GPIO_PIN_4 #define DO1_GPIO_Port GPIOA #define DO0_Pin GPIO_PIN_3 #define DO0_GPIO_Port GPIOA
Wie kann ich meine Funktionseingänge mit chracter array ändern?
Danach habe ich den Relais-Status ("GPIO PIN STATUS") mit gut mit HAL-Funktionen bekannt angepasst. Zum Beispiel in jedem cylce setze ich den Status meines 9-Relais mit den Mikrocontrollern Pins für diesen Ich bin mit diesem Codeblock `
void prsSetResetRelays(unsigned char coilNo,char status){
if(coilNo==0){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO0_GPIO_Port,DO0_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO0_GPIO_Port,DO0_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==1){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO1_GPIO_Port,DO1_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO1_GPIO_Port,DO1_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==2){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO2_GPIO_Port,DO2_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO2_GPIO_Port,DO2_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==3){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO3_GPIO_Port,DO3_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO3_GPIO_Port,DO3_Pin,GPIO_PIN_RESET);
}
}else if(coilNo==4){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO4_GPIO_Port,DO4_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO4_GPIO_Port,DO4_Pin,GPIO_PIN_RESET);
}
}else if(coilNo==5){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO5_GPIO_Port,DO5_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO5_GPIO_Port,DO5_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==6){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO6_GPIO_Port,DO6_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO6_GPIO_Port,DO6_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==7){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO7_GPIO_Port,DO7_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO7_GPIO_Port,DO7_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==8){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO8_GPIO_Port,DO8_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO8_GPIO_Port,DO8_Pin,GPIO_PIN_RESET);
}
}
else if(coilNo==9){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO9_GPIO_Port,DO9_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO9_GPIO_Port,DO9_Pin,GPIO_PIN_RESET);
}
}
}
`.
Meine Frage ist. Gibt es eine Möglichkeit für mich, diesen Code in kürzerer Form zu reduzieren? Kann ich einen for cycle verwenden, statt dessen alle Anweisungen. Zum Beispiel würde Ich mag einen Code wie schreiben: `für mich
for(int i=0;i<10;i++){
if(status=='s' || status=='S'){
HAL_GPIO_WritePin(DO[i]_GPIO_Port,DO[i]_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(DO[i]_GPIO_Port,DO[i]_Pin,GPIO_PIN_RESET);
}
}
`
Gibt es eine Möglichkeit zu tun, diese Art der Notation in c-Programmiersprache. Danke im Voraus.
Vielen Dank für Ihre Zeit und Mühe –