안녕하십니까 Keil MicroVision IDE가있는 STM32Fxx 마이크로 프로세서에 임베디드 C 코드를 작성하고 있습니다. 내 프로젝트에서 나는 릴레이 8 조각을 사용하고있다. 다음 코드 샘플을 사용하여 각 릴레이를 해제했습니다. #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
커 텍터 배열을 사용하여 함수 입력을 변경하는 방법
그런 다음 HAL 기능으로 잘 알려진 릴레이 상태 ("GPIO PIN STATUS")를 조정했습니다. 각 cylce 예를 들어 나는이에 대한 마이크로 컨트롤러 핀 내가
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);
}
}
}
`.
내 질문은 이것이다`이 코드 블록을 사용하고 내 9 릴레이의 상태를 설정하고있다. 이 코드를 더 짧은 형식으로 줄이기 위해 저를 그렇게 할 수있는 방법이 있습니까? 이 모든 명령문 대신에 for 문을 사용할 수 있습니까? 예를 들어 내가 좋아하는 코드를 작성하려합니다 :`
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);
}
}
`
이는 C 프로그래밍 언어로 표기 이런 종류의 일에 나를 위해 어떤 방법입니다. 미리 감사드립니다.
시간과 노력에 감사드립니다. –