c 언어 에서 리 턴 함수 의 사용 및 실제 역할 에 대한 상세 한 분석

머리말
오늘 여러분 께 칩/모듈 공장 에서 SDK 가 반드시 사용 해 야 할 기술 인 리 셋 함 수 를 말씀 드 리 겠 습 니 다.
리 턴 함수 라 는 지식 점 은 사실 그리 어렵 지 않 습 니 다.어 려 운 것 은 인터넷 에서 리 턴 함 수 를 설명 하 는 많은 사람들 이 말 하 는 태 학 술 이 화 되 어 조금도 친 민 하지 않 습 니 다.
많은 사람들 이 리 턴 함 수 를 어떻게 쓰 는 지 알 면서 도 실제 제품 에서 무슨 소 용이 있 는 지,언제 사용 하 는 지 전혀 모른다.
그래서 이 수업 은 프로그램 구조의 수 요 를 출발점 으로 하여 리 턴 함수 가 어떻게 이 수 요 를 만족 시 키 는 지 설명 할 것 이다.
여러분 의 이 해 를 편리 하 게 하기 위해 서 이 내용 도 한 편의 문장 에 대응 하 므 로 여러분 은 무한 단편 기 프로 그래 밍 을 찾 아서 얻 을 수 있 습 니 다.
1.이 과정 을 통 해 다음 과 같은 지식 을 습득 할 수 있 습 니 다.
프로그램 구조의 핵심 이념 이나 수 요 를 파악 하 다.리 셋 함수 의 역할 을 파악 하고 리 셋 함 수 를 파악 하 는 프로그램 을 작성 하여 리 셋 함수 가 제품 에서 의 응용 을 파악 합 니 다.
2.프로그램 구조의 핵심 이념 과 수요
많은 사람들 이 좋 은 프로그램 구 조 를 말 할 수 있 습 니 다.코드 가 치밀 하고 실행 효율 도 높 습 니 다.
사실 이 말 은 매우 단편 적 이 고 완전히 옳지 않다.이것 은 단지 너의 프로그램 알고리즘 이 잘 썼 다 는 것 을 설명 할 수 있 을 뿐,구조 가 반드시 잘 되 는 것 은 아니다.
즉,구조 이다.그것 은 당연히'대국'을 중시 하 는 것 이다.사 고 는 현재 의 제품 기능 에 국한 되 어 서 는 안 되 고 앞으로 기능 의 증가 와 재단 도 고려 해 야 한다.그러면 싱글 칩 마이크로컴퓨터 개발 에 있어 저 는 좋 은 프로그램 구조 가 적어도 다음 과 같은 요 구 를 달성 해 야 한다 고 생각 합 니 다.
하드웨어 층 과 응용 층 의 프로그램 코드 가 분리 되 고 상호 간 의 제어 와 통신 은 인 터 페 이 스 를 사용 하 며 공유 되 지 않 는 전역 변수 나 그룹 입 니 다.
여기 서 저 는 이 요구 에 대해 이 요 구 를 얕 보지 마 세 요.왜냐하면 이 요구 에는 많은 학문 이 담 겨 있 기 때 문 입 니 다.예 를 들 어 전문 적 으로 이식 성,확장 성 이 라 고 부 릅 니 다.
그러면 우 리 는 보통 싱글 칩 마이크로컴퓨터 코드 를 쓰 는 방식 을 상상 해 봅 시다.51 시 에 기본적으로 c 파일 로 해결 합 니 다.레지스터 설정,제품 기능 을 포함 합 니 다.

이런 것 은 바로 구조 가 없 는 프로그램 이다.그리고 우 리 는 STM 32 라 는 싱글 칩 마이크로컴퓨터 로 진화 한 후에 프로그램 이 커 졌 고 프로젝트 파일 에 몇 개의 폴 더 디 렉 터 리 를 추가 하여 하드웨어 층 과 응용 층 코드 를 분리 할 것 이다.
그래서 우 리 는 Led,버튼,직렬 등 외부 기능 코드 를 각각 다른 c 파일 에 쓴 다음 에 함수 인터페이스 로 호출 할 것 이다.

예 를 들 어 LED 조명 을 제어 하고 led.c 파일 에 led 등 상 태 를 구동 하 는 함 수 를 써 서 외부 에 호출 하면 됩 니 다.

그러면 우 리 는 이러한 Led 의 제어 함수 도 프로그램 구조의 수 요 를 만족 시 키 는 것 을 볼 수 있다.하드웨어 층 과 응용 층 코드 가 분리 되 고 응용 층 은 하드웨어 층 이 제공 하 는 인터페이스 로 제어 하 며 하드웨어 층 과 응용 층 이 공유 하 는 모든 변수 나 배열 도 없 을 것 이다.이런 거 쉽 지 않 아 요?
그러면 다른 상황 에 부 딪 혔 는 지 모 르 겠 습 니 다.바로 응용 프로그램 이 하드웨어 층 의 데 이 터 를 수집 해 야 합 니 다.예 를 들 어 직렬 수신 데이터,버튼 수집,ADC 값 수집 등 입 니 다.
이런 하드웨어 층 의 데 이 터 는 어떻게 응용 층 에 알려 서 가 져 오 거나 어떻게 주동 적 으로 그것 을 줍 니까?
우리 가 예전 에 가장 간단 하고 거 친 방식 은 전체 변 수 를 사용 하 는 것 이 아니 었 습 니까?예 를 들 어 하드웨어 계층 의 직렬 포트 가 데 이 터 를 받 았 습 니 다.그러면 우 리 는 데 이 터 를 배열 에 버 린 다음 에 전체 변수 표지 위치 1 을 받 았 습 니 다.
예 를 들 어 전역 변 수 는 RcvFlag 이 고 응용 층 프로그램 은 RcvFlag=1?예.
많은 사람들 이 내 가 이런 방법 으로 도 기능 을 실현 할 수 있 는데 왜 다른 구 조 를 배 워 야 하 는 지 말 할 것 이다.
이렇게 하면 당연히 기능 을 실현 할 수 있 지만 이식 성 이 매우 나 쁜 문제 가 존재 할 수 있다.
예 를 들 어 너희 사장 은 너 에 게 이 직렬 포트 의 하드웨어 층 을 봉 하여 고객 에 게 사용 하 라 고 했 지만 고객 에 게 네가 실현 한 소스 코드 를 보 여주 지 못 하고 인터페이스(함수 명)만 상대방 에 게 사용 하도록 제공 했다.
그렇다면 이 럴 때 고객 에 게 어떤 변 수 를 1 로 판단 한 다음 에 어떤 배열 의 데 이 터 를 이렇게 LOW 하 는 방법 을 알려 주 시 겠 습 니까?
그럼 잘 아 는 고객 이 라면 너희 회사 의 기 술 력 이 초등학생 수준 인지 아 닌 지 의심 할 거 야.
그럼 어떻게 해 야 편리 하고 프로 페 셔 널 할 수 있 을까요?여기 서 우 리 는 반전 함 수 를 써 야 한다.
3.반전 함수 의 역할
그러면 리 셋 함 수 를 말 하기 전에 함수 호출 에 대해 저 는 보통 두 가지 유형 으로 나 눕 니 다.
1.출력 형
C 언어 자체 라 이브 러 리 함 수 를 사용 해 보 셨 는 지 모 르 겠 습 니 다.예 를 들 어 sizeof()에서 데이터 길 이 를 가 져 오 는 함수,memcpy()는 메모리 복사 함수 입 니 다.우 리 는 이 함 수 를 호출 한 후에 해당 하 는 기능 을 완성 할 수 있 습 니 다.
그리고 우 리 는 싱글 칩 마이크로컴퓨터 의 일부 프로그램 함 수 를 바탕 으로 한다.예 를 들 어 LED 의 불 이 꺼 지고 계전기 의 흡수 가 끊 기 며 LCD 구동 등 을 제어 한다.
그럼 이것들 은 요?저 는 보통 출력 형 함수 라 고 부 릅 니 다.
출력 형 함 수 는 우리 가 주도 하 는 역할 입 니 다.우 리 는 언제 그것 을 호출 해 야 할 지 알 고 있 습 니 다.
2.입력 형
입력 형 은 응답 식 함수 라 고도 부른다.
응답 식 함수 가 무엇 입 니까?
예 를 들 어 직렬 포트 의 데 이 터 를 받 으 면 우 리 는 어떤 데이터 가 언제 올 지 모른다.
예 를 들 어 우리 가 버튼 을 눌 러 서 검 측 한 함 수 는 언제 버튼 을 눌 러 야 할 지 모 르 겠 습 니 다.그러면 이것 은 응답 식 함수 로 정의 되 어야 합 니 다.응답 식 함 수 는 리 셋 함수 로 이 루어 질 수 있 습 니 다.
그래서 이 두 가지 유형의 분석 을 통 해 우 리 는 반전 함 수 는 기본적으로 입력 형의 처리 에 사용 된다 는 것 을 알 수 있다.
예 를 들 어 직렬 데이터 가 수신 되면 데 이 터 는 싱글 칩 마이크로컴퓨터 에 입력 되 고 싱글 칩 마이크로컴퓨터 는 컴퓨터 역할 에 있다.
버튼 검사,버튼 상 태 는 싱글 칩 마이크로컴퓨터 에 입력 되 어 있 습 니 다.
예 를 들 어 ADC 값 을 수집 하면 ADC 값 도 싱글 칩 마이크로컴퓨터 에 입력 된다.
그러면 그들 이 입력 한 시간 노드 는 모두 알 수 없 는 것 이 고 이것 은 반전 함수 로 처리 할 수 있다.
구체 적 으로 어떻게 처리 하 는 지 는 코드 로 예 를 들 어 보 겠 습 니 다.
리 턴 함수 의 또 다른 역할 은 코드 를 밀봉 하기 위 한 것 이다.
예 를 들 어 칩 이나 모듈 을 만 드 는 공장 에서 우 리 는 전형 적 인 STM 32 를 예 로 들 면 외부 인 터 럽 트,타이머,직렬 등 인 터 럽 트 함 수 는 모두 리 셋 함수 에 속한다.이런 함수 의 목적 은 수 집 된 데 이 터 를 사용자 에 게 전달 하거나 응용 층 에 전달 하 는 것 이다.
그래서 리 턴 함수 의 핵심 역할 은:
1.데 이 터 를 하나의.c 파일 에서 다른.c 파일 로 전달 하고 전역 변수 로 데 이 터 를 공유 하지 않 는 LOW 방법.
2.이런 데이터 전달 방식 에 대해 리 턴 함 수 는 코드 의 패 키 징 에 더욱 유리 하 다.
4.리 셋 함 수 를 파악 하 는 프로그램 작성
앞에서 개념 적 인 이 야 기 를 많이 했 는데 여러분 도 이해 하기 어 려 울 것 같 습 니 다.리 턴 함 수 는 결국 함수 포인터 로 이 루어 집 니 다.
그럼 저 는 아 날로 그 버튼 의 예 를 통 해 함수 조절 을 통 해 어떻게 처리 하 는 지 보 여 드 리 겠 습 니 다.
다음은 우리 의 c-free 프로젝트 입 니 다.이 걸 로 편리 함 을 모 의 하 겠 습 니 다.

모듈 화 프로 그래 밍 의 사상 을 보면 전체 공정 은 2 개 부분 으로 나 뉘 는데 응용 층 main.c 파일,하드웨어 층 key.c 와 key.h 파일 이다.
아무리 복잡 한 프로그램 이라도 우 리 는 먼저 main 함수 에서 한 걸음 한 걸음 아래로 파 야 한다.main 함수 코드 는 다음 과 같다.

int main(int argc, char *argv[])
{
KeyInit();
KeyScanCBSRegister(KeyScanHandle);
KeyPoll();
 
return 0;
}
KeyInit();key.c 파일 의 버튼 초기 화 함수 입 니 다.
KeyScanCBSRegister(KeyScanHandle);key.c 의 함수 포인터 등록 함수 입 니 다.
이 함 수 는 여러분 이 좀 어리둥절 할 수 있 습 니 다.우리 의 리듬 을 따라 가세 요.아래 에서 머리 를 태 우기 시작 하 는 것 도 리 턴 함 수 를 쓰 는 필수 적 인 절차 입 니 다.
이 반전 함수 등록 함 수 를 이해 하려 면 하드웨어 층(key.h)헤더 파일 의 함수 포인터 정의 부터 시작 하여 다음 그림 을 구체 적 으로 보 겠 습 니 다.

함수 포인터 형식 을 정의 하고 두 개의 인삼 을 가 져 옵 니 다.
그리고 키.c 파일 에서 함수 포인터 변 수 를 정 의 했 습 니 다.

중점 이 왔 습 니 다.우 리 는 바로 이 함수 지침 을 통 해 응용 층 의 함수 주소(함수 명)를 가리 키 는 것 입 니 다.
구체 적 으로 어떻게 지향 을 실현 합 니까?함수 포인터 로 함 수 를 등록 하 는 것 입 니 다.

이 함 수 는 main 함수 에서 호출 되 며,이러한 등록 함 수 를 사용 하 는 방식 으로 등록 유연성 도 매우 높 습 니 다.당신 이 원 하 는.c 파일 에서 버튼 기능 을 사용 하면 어디에서 호출 됩 니까?

이 파일 은 하드웨어 계층(key.c)에서 온 데 이 터 를 받 을 수 있 는 함 수 를 정의 해 야 합 니 다.
이 정 의 는 함부로 정 의 된 것 도 아 닙 니 다.사용자 정의 함수 포인터 형식 반환 값,형태 참조 와 일치 해 야 합 니 다.

그리고 이 함수 이름 을 키 ScanCBSRegister 함수 의 형 삼 에 직접 복사 하면 됩 니 다.
이렇게 호출 된 후,우리 key.c 파일 의 pKeyScanCBS 라 는 지침 은 사실 가리 키 는 KeyScanHandle 함수 입 니 다.
즉,pKeyScanCBS 를 실행 할 때 KeyScanHandle 함 수 를 실행 하 는 것 이다.
버튼 을 구체 적 으로 감지 하 는 기능 은 바로 KeyPoll 함수 입 니 다.이것 은 main 함수 에서 호출 됩 니 다.

키보드 에 입력 이 있 는 것 을 감지 하면 최종 적 으로 pKeyScanCBS 를 호출 합 니 다.
최종 적 으로 실 행 된 것 은 main.c 파일 의 KeyScanHandle 함수 입 니 다.
그래서 출력 결 과 를 살 펴 보 겠 습 니 다.

만약 아직도 약간 모호 하 다 면,다음 에 제 가 여러분 께 리 셋 함 수 를 작성 하고 사용 하 는 절 차 를 다시 한번 훑 어 보 겠 습 니 다.
4.567917.사용자 정의 함수 포인터,형 삼 은 하드웨어 층 으로 응용 층 에 전달 할 데이터 입 니 다하드웨어 층 은 함수 포인터 와 함수 포인터 등록 함 수 를 정의 합 니 다4.567917.응용 층 은 함 수 를 정의 하고 반환 값 과 형 삼 은 모두 함수 포인터 와 일치 해 야 합 니 다4.567917.응용 층 호출 함수 포인터 등록 함수,정 의 된 함수 이름 을 형 삼 으로 전달 합 니 다Ok,이것 이 바로 반전 함수 의 사용 입 니 다.
아직 못 읽 으 면 두 번 더 보 세 요.
다음은 이 프로그램 이 간단 하지만 구조 가 괜 찮 은 지 생각해 보 세 요.응용 층 과 하드웨어 층 이 완전히 독립 되 었 습 니까?
총결산
c 언어 에서 리 셋 함수 의 사용 과 실제 역할 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 c 언어 리 셋 함수 의 사용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기