소개
인하대학교 공과대학에서 전자공학 학사 학위를 받았으며 임베디드 시스템용 소프트웨어 개발자로써 수년간의 경력을 쌓았습니다. 임베디드 시스템 및 프로그래밍을 위한 전문 강사로도 활동 중입니다. 아이폰 3GS 등장과 같은 시기에 맥(북)에 입문하였고, 그때부터 맥(북) 자동화에 관심을 갖게 되었습니다. '맥(북)에서 사용할 수 있는 시리 리모트', '키보드마에스트로를 이용한 구글번역기' 같은 오픈 소스를 깃허브(https://github.com/guileschool) 에 두고 개발 및 유지보수하고 있습니다. 오픈 소스 하드웨어 '비글본블랙' 에도 많은 관심을 가지고 있습니다. 맥(북) 자동화를 이용하여 생산성을 높일 수 있는 컴퓨터를 사용하는 모든 분야에 관심을 가지고 있고, 이를 필요로 하는 사람들을 돕고 있습니다.
강의 요청 및 기타 문의사항은 guileschool@gmail.com으로 보내주세요 :)
강의
전체5수강평
- 정말 유익한 수업이었습니다!!
김수현
2024.05.02
1
- 좋은 수업입니다.
박상준
2024.03.22
1
- 기초부터 심화까지 포함된 거 같아서 알찹니다.
김찬우
2024.03.12
1
게시글
질문&답변
2024.05.20
Timer Interrupt, Task 우선순위
안녕하세요. 최지선님! LCD에서 UI 터치 되면 모터 제어 Timer 동작 시켜보았습니다. 모터 제어 timer interrupt가 동작 된 후, task가 먹통 되는 증상이 있는데 timer interrupt가 task 보다 우선순위가 높아서 timer가 동작 된 이후로는 task가 동작하지 않는 걸까요? (모터의 제어 주파수가 비 연속적으로 바뀌고 설정한 거리만큼 움직이고 스스로 인터럽트를 종료하는 모터 제어 방식입니다.) 질문이 3가지입니다. 1) Timer Interrupt 실행 시 Task보다 우선순위가 높아 Task가 동작하지 않는 것인지요? > 타이머를 포함한 하드웨어 인터럽트들은 태스크보다 우선순위가 높습니다. 하드웨어 인터럽트 때문에 태스크가 실행되지 않는 것을 염려하신다면 충분히 가능한 일입니다. 인터럽트 핸들러 내에서 긴 처리 시간이나 대기 시간을 포함시키는 것은 바람직하지 않습니다. 이는 시스템의 응답 시간과 신뢰성에 부정적인 영향을 미칠 수 있습니다. 디버깅 해보시죠. 단, 브레이크 포인트를 이용한 디버깅 보다는 LED 을 토글시키는 코드나 printf 을 태스크 함수내에 넣어서 태스크가 실행이 되는 지를 확인하는 방법이 이 경우에는 더 효과적입니다. 2) 비 연속적으로 제어되는 방식이라면 모터 제어와 완료 후에 Task가 동작 할 수 있게 하는 방식은 어떤 식으로.. 처리해야 하는지 궁금합니다. 3) 만약 Timer Interrupt(모터 동작)의 선점으로 Task가 동작하지 못한다면, LCD Touch 인식을 체크하는 Task는 Timer Interrupt는 끝나고(모터 움직임 완료) 동작해야 하는 것인가요..? > 2번, 3번 질문은 사실 제가 답변드릴 수 있는 범위를 넘어선 질문이십니다. 왜냐하면 개발하고 계신 프로젝트에 대해 저는 전혀 알지못합니다. 그리고, 알아야 할 이유도 없습니다. 저라면 TOUCHGFX 튜토리얼 예제 하나를 찾아서 분석해보겠습니다. 코드를 완벽히 분석할 필요는 없습니다. 버튼을 눌렀을 때 사용자가 원하는 액션이 실행되는 원리만은 꼭 파악해야 합니다. 그렇게 해야만 내가 작성하고 있는 코드를 완전히 장악하여 마음대로 요리? 할 수 있습니다. 그리고, 거기에 타이머 제어및 인터럽트 코드를 하나씩 추가하면서 확인합니다. 좋은 결과 있으시기를 빕니다.
- 1
- 1
- 20
질문&답변
2024.05.18
STM32 LCD 제어 프로그램
안녕하세요, 최지선님! freertos + touchgfx + 타이머 어플리케이션 만들기는 touchgfx designer 을 설치하신 후 이용할 수 있는 템플릿 프로젝트들을 활용하시면 좋습니다. touchgfx 튜토리얼도 참고해보세요 https://support.touchgfx.com/ko/docs/tutorials/tutorial-01 템플릿들 모두 freertos 을 기반으로 구현되어 있죠. 또한 stm32cubeIDE 도 지원합니다. 아래 buttonClicked 함수는 사용자가 화면속 버튼을 누르면 실행되는 함수입니다. 사용자 코드와 touchgfx 라이브러리는 이런식으로 인터페이스 됩니다. 태스크를 어떻게 작성해야할지도 여러개의 템플릿 예제속에서 찾으실 수 있습니다. void MainView::buttonClicked() { // 타이머 시작 HAL_TIM_Base_Start_IT(&htimX); }
- 1
- 2
- 37
질문&답변
2024.05.08
8kHz로 반복되는 고부하 작업을 처리하는 방법
안녕하세요. 박성재님! 저보다 인공지능이 먼저 답글을 달았네요. 참 부지런합니다. 핫핫~ 우선 DFI 을 이용하는 방법은 성재님이 적어주신 그대로(1~4번) 하시면 됩니다. 8KHz 이라면 틱(TICK) 주기보다 빠른 인터럽트를 사용하고 계시군요. 이는 CPU에 많은 무리가 가기는 합니다. 그렇다고 그것이 그렇게 또 큰 문제가 되는 것은 아닙니다. DFI 을 이용하였을 때 그 효과를 보셨다면 그냥 사용하시면 됩니다. 다만, DFI(deferred interrupt)가 어떤 문제든지 해결해줄 수 있는 만능 치트키는 아니라는 것입니다. 만약 DFI 로도 해결이 안된다면, 평균 CPU 사용량을 측정 후 CPU 클럭 스피드를 올리는 선택을 해야 할 수도 있습니다.
- 2
- 2
- 128
질문&답변
2024.04.26
라운드 로빈 강의 중 이해되지 않는 부분이 있습니다.
안녕하세요. 미미미미님! 라운드 로빈(Round Robin) 은 비선점형 알고리즘 이 맞습니다. 이는 프로세스가 할당된 시간 동안 CPU를 완전히 사용할 권리가 있고, 해당 시간을 다 채우지 못하더라도 다른 프로세스로 강제로 전환되지 않기 때문입니다
- 1
- 1
- 74
질문&답변
2024.04.11
Nucleo-H743ZI2 보드에서 FTP server 기능 porting 요청 가능?
안녕하세요. 권혁준님 Nucleo-H743ZI2 보드에서 즉시 사용 가능한 FTP 서버 예제 코드나 자료를 제공하는 것은 다소 어렵습니다. 다만, 다음과 같은 자료에서 출발해 볼 순 있습니다. https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP-IP_FAT_Examples_ST_STM32F407.html
- 1
- 1
- 60