./../
  I D :    암호 :    ID저장      회원가입    네게(쥔장) 쪽지보내기    메모장    각종계산기    컬러빠렛    이모티콘(프레임, 새창)    보유장비
목록으로 가기..
STM TouchGFX설계할때 View가 main에 접근하는 순서 김종호 | 삭제하기

# LED를 터치에서 제어하는 예제 ### 1. TouchGFX Designer 설정 (이벤트 생성) 1. 화면에 **Button** 추가 2. Interactions 탭에서 **Add Interaction** 클릭 3. Trigger: **Button is clicked** 4. Action: **Call new virtual function** 5. Function Name: **`toggleLed`** 입력 후 **Generate Code** 클릭 --- ### 2. C 언어 영역: 하드웨어 제어 함수 작성 (`main.c`) STM32 HAL 제어 코드는 C++ 영역으로 넘기지 않고 `main.c`에 캡슐화합니다. **`Core/Src/main.c`** ```c /* USER CODE BEGIN 4 */ // TouchGFX에서 호출할 하드웨어 제어 함수 void hw_ToggleLD1(void) { HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_12); } /* USER CODE END 4 */ ``` --- ### 3. Model 영역: 외부 C 함수 연결 및 호출 (`Model.hpp` / `Model.cpp`) `main.h`를 인클루드하지 않고, `extern "C"`를 사용하여 `main.c`에서 만든 함수를 링킹(Linking)합니다. **`gui/include/gui/model/Model.hpp`** ```cpp #ifndef MODEL_HPP #define MODEL_HPP // 1. C 언어로 작성된 외부 함수를 C++ 컴파일러가 인식할 수 있도록 선언 extern "C" { void hw_ToggleLD1(void); } class ModelListener; class Model { public: Model(); void bind(ModelListener* listener) { modelListener = listener; } void tick(); // 2. Presenter에서 호출될 함수 선언 void toggleLed(); protected: ModelListener* modelListener; }; #endif // MODEL_HPP ``` **`gui/src/model/Model.cpp`** ```cpp #include #include Model::Model() : modelListener(0) { } void Model::tick() { } // 3. 외부 C 함수 호출 void Model::toggleLed() { hw_ToggleLD1(); } ``` --- ### 4. Presenter 영역: View와 Model 연결 (`Presenter.hpp` / `Presenter.cpp`) View에서 올라온 명령을 Model로 넘겨줍니다. (화면 이름이 `Screen1`인 경우) **`gui/include/gui/screen1_screen/Screen1Presenter.hpp`** ```cpp #ifndef SCREEN1PRESENTER_HPP #define SCREEN1PRESENTER_HPP #include #include using namespace touchgfx; class Screen1View; class Screen1Presenter : public touchgfx::Presenter, public ModelListener { public: Screen1Presenter(Screen1View& v); virtual void activate(); virtual void deactivate(); virtual ~Screen1Presenter() {} // View에서 호출될 함수 선언 void toggleLed(); private: Screen1Presenter(); Screen1View& view; }; #endif // SCREEN1PRESENTER_HPP ``` **`gui/src/screen1_screen/Screen1Presenter.cpp`** ```cpp #include #include Screen1Presenter::Screen1Presenter(Screen1View& v) : view(v) { } void Screen1Presenter::activate() { } void Screen1Presenter::deactivate() { } // Model의 함수 호출 void Screen1Presenter::toggleLed() { model->toggleLed(); } ``` --- ### 5. View 영역: UI 이벤트 수신 및 전달 (`View.hpp` / `View.cpp`) Designer에서 생성한 가상 함수를 실제로 구현합니다. **`gui/include/gui/screen1_screen/Screen1View.hpp`** ```cpp #ifndef SCREEN1VIEW_HPP #define SCREEN1VIEW_HPP #include #include class Screen1View : public Screen1ViewBase { public: Screen1View(); virtual ~Screen1View() {} virtual void setupScreen(); virtual void tearDownScreen(); // Designer에서 설정한 가상 함수 오버라이딩 virtual void toggleLed(); protected: }; #endif // SCREEN1VIEW_HPP ``` **`gui/src/screen1_screen/Screen1View.cpp`** ```cpp #include Screen1View::Screen1View() { } void Screen1View::setupScreen() { Screen1ViewBase::setupScreen(); } void Screen1View::tearDownScreen() { Screen1ViewBase::tearDownScreen(); } // 버튼 클릭 시 호출되어 Presenter로 명령 전달 void Screen1View::toggleLed() { presenter->toggleLed(); } ```

첨언 달기
이름 : 암호 :
번호    제목...(첨언) 작성일 접속
xxx [공지]자유겔러리 등록 오류 수정 완료 2017-12-22 685172
xxx [공지]자료실 다운로드 오류 처리 2017-12-01 31085
xxx [공지]비난, 광고 게시물을 신고, 차단, 삭제됩니다. 2005-06-26 26850
257 [일반]  VS Code에서 Google AI 사용할때 자동 agree 2026-10-02(금) 39
256 [C#]  asp.net .net core connectionString Encryption 표준 암호화 방법 2026-09-24(목) 51
255 [CPP]  MS Windows 64bit Time Converter 2026-09-23(수) 67
254 [M D]  STM32H747I-DISCO 이더넷(RMII) 및 LwIP 완벽 구현 및 트러블슈팅 가이드 2026-09-17(목) 105
253 [일반]  .net core Web 생성하면 나오는 구조 2026-09-12(토) 81
252 [M D]  STM32 개발 때 다양한 USB CDCs 사용CDC, CP210x, FTDI, CH34x, PL2303) 2026-09-11(금) 86
251 [M D]  STM32H747I-DISCO CP2102 USB Host 트러블슈팅 종합 보고서 2026-09-11(금) 75
250 [일반]  STM32H747I-DISCO에서 STM32CubeMX 템플릿때문에 USB OTG 문제 발생할때 2026-09-10(목) 111
249 [M D]  TouchGFX에서 버튼같은거 삭제 했을때 make: *** No rule to make target.. 오류 2026-08-20(목) 142
248 [M D]  STM TouchGFX설계할때 main에서 View에 접근하는 순서 2026-08-16(일) 119
247 [M D] > STM TouchGFX설계할때 View가 main에 접근하는 순서 < 2026-08-16(일) 165
246 [M D]  MCU Task관리할때 필요한 세마포어(Semaphore)와 뮤텍스(Mutex) 2026-08-09(일) 156
245 [M D]  STM32F 마이컴 공부할때 RAM에 올려서 시험하기.(속도 빠름) 2026-08-08(토) 161
244 [일반]  STM32F767과 FreeRTOS를 이용해 설계할때 Time base Source는? 2026-08-08(토) 150
243 [일반]  VSCode로 STM32 개발할때 printf에서 실수 출력 안되면 2026-07-16(목) 1017
242 [일반]  VisualStudio으로 만든 프로그램 .net 버전 올리기 위해 2026-07-02(목) 1235
241 [C#]  c# winform에서 URL QR생성 2026-06-30(화) 1077
240 [일반]  VC 컴파일할때 솔류션 폴더에 컴파일된 파일이 생성될때 2026-06-29(월) 483
239 [XML]  IIS 8.0 이상 IP 차단 web.config 설정 2026-06-13(토) 181
238 [일반]  C#.net 6이상 빌트할때 TargetFramework 폴더 생기는거 없애기 2026-04-16(목) 525
검색 :
Page : 이전 1  2  3  4  5  6  7  8  9  10  11  12  13  다음




Copyright 2003-2026 ⓒ 김종호. All rights reserved. kimjongho.co.kr kimjongho.kr kimjongho.net kimjongho.com