Thumbnail
BEST
하드웨어 임베디드 · IoT

ARM Cortex-M 프로세서 프로그래밍 대시보드

(5)
19개의 수강평 ∙  416명의 수강생
154,000원

월 30,800원

5개월 할부 시
지식공유자: 홍영기
총 111개 수업 (15시간 10분)
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유

초급자를 위해 준비한
[임베디드 · IoT] 강의입니다.

CORTEX-M 프로세서를 체계적으로 학습하고 싶으신가요? 임베디드 시스템의 가장 중요한 토픽 2가지 어셈블리어와 인터럽트를 확실히 정리해드립니다.

✍️
이런 걸
배워요!
비정렬 액세스를 써도 좋을까요?
어셈블리어의 중요성
파이프라인의 동작원리
인라인 어셈블러
링커스크립트
NVIC 장치의 동작원리
익셉션 처리 절차 시작부터 종료까지 완벽 분석
클럭제어기
부트 코드 분석

강의 하나로 정리하는 ARM Cortex-M 프로세서 
개념부터 실제 노하우까지 확인하세요.

강좌 주제 📖

ARM Cortex-M

가장 인기있는 임베디드 시스템용 32비트 마이크로 프로세서입니다
대표적인 프로세서로 CORTEX-M3 , CORTEX-M4 , CORTEX-M0 , CORTEX-M33 이 있습니다
소비전력이 적고 가격 경쟁력도 있어서 다양한 분야의 제품에 적용되고 있습니다

출처: ARM

CORTEX-M 프로세서는 드론, 스마트 팩토리, 자율주행차, 우주항공, 의료진단기기, 가전, 사물인터넷, 환경 에너지를 비롯한 다양한 분야의 임베디드 시스템에서 사용되는 가장 인기있고 주목받는 32비트 마이크로 프로세서입니다.

CORTEX-M 프로세서는 성능보다는 가격, 소비전력의 효율을 중시하는 애플리케이션에 적합하고요. 낮은 게이트 수, 낮은 인터럽트 대기 시간 및 디버그 기능을 갖춘 프로세서입니다.
기본 인스트럭션 세트로 THUMB2 명령어를 지원합니다.
NVIC는 프로세서 코어와 밀접하게 통합되어 대기 시간이 짧은 인터럽트 처리를 구현해주고 있습니다.
인터럽트 응답 시간 개선을 위한 '테일 체인' 및 'LATE ARRIVING' 인터럽트를 지원합니다.
원자적 액세스 지원을 위한 비트 밴드 쓰기 및 읽기 작업을 포함하는 비트 밴드를 지원해줍니다.

STmicro 사의 $100 미만의 마이크로컨트롤러 보드를 쉽게 구할 수 있습니다.

개발자

과거 수십 년간 지금만큼 개발자의 가치가 존중받는 때는 없었다고 생각합니다. 장래 희망이 무엇이냐고 청소년들에 물었을 때 의사, 검사라는 대답과 함께 '개발자' 라는 말을 들을 수도 있으니 말입니다.

개발자가 귀해지고 그에 따라 몸값도 올라가니, 덩달아 대학 인기순위에 컴공, 전자공이 상위 랭크되는 것을 보면 영화 제목 '이보다 더 좋을 순 없다' 라는 말처럼 19세기 미국 서부 시대 황금을 찾아 엘도라도로 떠나는 사람들이 오버랩됩니다. 가히 개발자 전성 시대라고 불러도 좋을 것 같습니다.

 

문제 해결 능력을 갖춘 개발자?

2016년 국내 M 사 내부에서 흘러나온 이 멘트가 뉴스에도 오르며 한동안 회자된 적이 있었죠. 그리고, 이런 일이 없었더라도 누구나 한 번씩은 살아오면서 들어보았을 만한 단어입니다. 그런데 문제 해결 능력을 갖춘 개발자라뇨? 이게 왜 이슈가 되었던 것일까요.

제가 이해하는 이 문장의 뜻은 단순한 시각으로 보면 이겁니다. 예를 들어보죠. 이 코드는 분명히 내가 짠 코드입니다. 이 프로그램에는 틀림없이 버그가 있습니다. 나도 그것을 압니다. 그런데 이것을 해결하지 못하는 겁니다. 짧게는 몇시간, 몇일, 길게는 수개월 동안이나요.

진짜 이런 일이 일어날 수 있냐고 물어보신다면, 당연히 이런 상황이 얼마든지 가능하다고 말씀드리고 싶네요. 그러니까 이슈화까지 되었던 거겠죠.

코딩은 약간의 지식만 가지면 누구나 할 수 있습니다. 하지만 문제 해결은 다른 차원의 문제입니다.

임베디드 시스템 개발자

임베디드 시스템에서 작동하는 소프트웨어는 만드는 것도 어렵지만, 드물게 발생하는 까다로운 문제를 해결하는 것은 더더욱 어렵습니다. 왜냐하면 사안에 따라서는 소프트웨어로만 문제의 범위를 좁혀서 생각하면 문제 해결이 안 될 수도 있기 때문인데요. 임베디드 시스템의 구성 요소가 '하드웨어+소프트웨어' 임을 생각해 볼 필요가 있습니다.

지금도 매년 새로운 많은 종류의 실리콘들이 세상에 나오고 있습니다. 또한 이 칩들을 적용한 보다 많은 종류의 하드웨어들이 만들어집니다. 이 모든것이 하드웨어적으로 완벽하다고 믿을 수 있을까요? 

문제 해결에 있어서는 하드웨어 버그의 가능성도 고려하여야 합니다. 어떤 문제가 쉽게 해결되지 않는다면 소프트웨어 개발자는 이것이 하드웨어 문제인가, 소프트웨어 문제인가를 한번 생각할 수 있어야 합니다.

그런데 이것이 평소에 훈련이 되어 있어야 한다는 점이죠. 아무런 근거 없이 "이건 하드웨어 문제야" 혹은 "소프트웨어 문제야"라고 주장하는 것은 누구도 설득하기 어렵습니다.

제가 겪어보았던 적지 않은 소프트웨어 개발자들이 자의든 타의든 하드웨어에 대한 지식이 빈약하고, 심지어는 아예 관심이 없었죠. 그렇기 때문에 문제 해결 능력을 갖춘 개발자는 이 분야에서는 더욱 더 귀하고 중할 수 밖에 없습니다. 

패러다임의 전환

결론은 이미 나온 것이죠. 하드웨어를 이해하려고 해야 합니다.
하드웨어를 이해한다는 것이 꼭 인쇄회로기판에 전자 부품을 납땜해보는 것을 의미하지는 않습니다. LED 나 버튼키를 완벽하게 제어하는 것을 의미하지도 않습니다. 

그보다는 어셈블리어를 공부하면서 임베디드 시스템이 동작하는 기본 원리를 이해해야 합니다. 제가 믿고 이해하는 임베디드 소프트웨어를 풀어나가는 2가지 핵심 키워드는 어셈블리어인터럽트입니다.

어셈블리어는 하드웨어를 이해하기 위해서이며, 인터럽트는 비동기적으로 실행되는 소프트웨어 메커니즘인만큼 시스템의 안정성을 해칠 가능성이 높습니다. 따라서 신뢰도가 높은 소프트웨어를 만들기 위해서 잘 학습해 두어야 합니다.

왜 어셈블리인가

개발자들 사이에서는 어셈블리 언어를 바라보는 다양한 시각이 있습니다. 우선 여기 국내 유명 개발자 커뮤니티 게시판의 글을 한번 읽어보세요

현대 컴파일러는 과거에 비해 더욱 똑똑해졌습니다. 최적화된 코드를 잘 만들어줍니다. 시스템 성능을 좋게 만들기 위해 어셈블리어로 코딩하는 것은 과거의 이야기일 뿐입니다. 그렇다면 제가 어셈블리어를 진심 강조하는 이유는 어디있을까요?

어셈블리어를 우리가 배우는 이유는 임베디드 시스템의 동작 원리를 더 잘 이해하기 위해서라고 봐야하죠. 어셈블리어는 개발자가 임베디드 시스템의 속살을 들여다 볼 수 있도록 도와줍니다

나무를 보지 말고 숲을 보라는 말처럼, 어떤 공부를 하던지 끊임없이 학습 대상의 구조(체계)를 이해하려고 노력해야 합니다. 임베디드 시스템은 '하드웨어+소프트웨어' 임을 다시 한번 생각해 볼 필요가 있습니다. 

2년 이상 개발하였는데도 임베디드 시스템 개발 능력이 비약적으로 향상되지 않았다면, 이제는 당신의 학습 방법을 근본적으로 바꾸어 보세요.

'어떤 분야든 10,000시간을 투자하면 그 분야의 전문가가 된다'는 말이 있죠. 저도 공감하는 말입니다만, 이 문장을 조금 바꾸고 싶네요. 이렇게요. '어떤 분야든 효과적인 방법으로 10,000시간을 투자하면 그 분야의 전문가가 된다'.

어셈블리어 학습의 효과

위에서 언급한 장점 외에도 어셈블리어를 공부해두면 부수적으로 여러 가지 이득이 있습니다.

첫째, 어떤 소프트웨어이던 1~5% 정도의 어셈블리 코드는 무조건적으로 포함됩니다(그 이유는 어셈블리어를 공부해 보시면 압니다). 그 내재된 어셈블리 코드까지 이해하면 해당 소프트웨어의 100% 완전한 통제가 가능하게 됩니다.
둘째, 어셈블리어로 작성되어 있는 부트코드(부트로더 아님)를 이해하고 스스로 코딩할 수 있는 토대를 만듭니다
셋째, 디버깅(문제해결) 도구 사용 능력의 스펙트럼이 넓어지고, 깊어집니다
넷째, 소프트웨어를 질적으로 개선하여 시스템 성능을 좋게 만들고 메모리를 효율적으로 활용할 수 있습니다.
다섯째, 어떤 하드웨어에서 동작하는 소프트웨어를 다른 하드웨어에서도 동작하게 하는 것을 포팅(Porting)이라고 부르는데, 이때 어셈블리어의 사용 능력은 필수적입니다.
여섯째, C언어의 포인터를 쉽게 이해할 수 있습니다.(어셈블리어로 메모리나 I/O 장치를 제어할 때 어드레스라는 개념은 필수입니다)

결론

이 교육(ARM Cortex-M 프로세서 프로그래밍)에서 이 두 가지(어셈블리어, 인터럽트)를 확실히 다룹니다.

나는 어셈블리 언어에 관심없다고 생각하시는 분들은 이 강좌를 무시하고 걸러주세요. 진정한 가치를 이해하시는 분들과만 함께 가고 싶습니다.

오프라인 ARM 프로세서 교육에서는 개인적인 신념으로 수강생 분들에게 이 내용을 줄곧 강조해 오고 있습니다. 이 강좌를 통해 임베디드 시스템을 다른 관점으로 바라보는 시각을 제공해드리고 싶습니다.

다음 내용을 학습합니다 📚

무엇을 배우나요 ✅

  1. 비정렬 액세스를 써도 좋을까요?
  2. 어셈블리어의 중요성
  3. 파이프라인의 동작원리
  4. 인라인 어셈블러
  5. 링커스크립트
  6. NVIC 장치의 동작원리
  7. 익셉션 처리 절차 시작부터 종료까지 완벽 분석
  8. 클럭제어기
  9. 테일체이닝인터럽트 중첩을 실제로 재현해보기
  10. 부트 코드 분석

위의 내용은 모두 이번 강의의 핵심 주제입니다. 자, 세부 내용을 알아볼까요.

첫째, 비정렬 액세스를 써도 좋을까요?

비정렬 액세스를 허용하지 않던 과거 ARM 프로세서와 달리, CORTEX-M 프로세서에서는 기본적으로 비정렬 액세스를 사용할 수 있게 되었는데요. 비정렬 액세스를 사용하는 것의 득과 실을 따져봅니다

둘째, 어셈블리어의 중요성

임베디드 소프트웨어를 개발할 때 하드웨어는 문제가 없다고 미리 단정짓고, 소프트웨어를 개발하게 될 경우 누구나 언제든 예기치 않은 함정에 빠질 수가 있습니다. 이와 같은 문제점을 찾아내고 해결하기 위해선 일정 수준 하드웨어에 대한 이해를 필요로 합니다. 메모리를 포함한 개별적인 하드웨어 장치들은 각각 고유의 동작 특성이 있고, 그것에 대한 이해를 말합니다. 하드웨어에 대한 이해도를 높이기 위해 쉽게 할 수 있는 첫번째 실천 내용은 어셈블리어에 대한 학습입니다. 어셈블리 언어를 통해서 하드웨어를 간접적으로 체험하는 것이 소프트웨어 엔지니어가 하드웨어에 대한 이해를 할 수 있는 시작점임을 다시 한 번 말씀드리고 싶습니다.

셋째, 파이프라인의 동작원리

파이프라인 프로세서가 파이프라인을 지원하지 않는 프로세서보다 더 효율이 좋습니다. 파이프라인 기술을 사용하지 않는 ARM 프로세서를 상상하기 어려운데요. CORTEX-M 프로세서의 파이프라인 동작 원리와 그 의미에 대해서 공부합니다

넷째, 인라인 어셈블러

인라인 어셈블리라고 하는 것은 어떤 것일까요. 간단하게 말씀드리면 어셈블리 코드를 C 함수의 형태를 빌어서 작성하는 것을 의미합니다. 인라인 어셈블리의 외관적인 형태는 C 언어의 함수 모습을 가지고 있으나, 실제 내용은 어셈블리 명령어이죠. 어셈블리 명령어는 C 함수 내 로컬 변수들과 또한 긴밀히 연동됩니다. C 언어로 대체할 수 없는 MSR, MRS 명령어의 경우 인라인 어셈블리어로 구현하여 사용하게 되면 그때 인라인 어셈블리어의 사용 가치는 빛을 발합니다.

다섯째, 링커스크립트

STM32CubeIDE 컴파일러는 많은 소스들을 자동으로 생성해내게 되며, 컴파일 하기 위해 필요한 메이크 파일을 비롯한 다양한 파일들을 자동화 프로세스에 의해 만들어주게 됩니다. 링커 스크립트라고 하는 파일도 또한 자동 생성되는 파일 중에 하나로써 링커는 항상 이 파일을 참조해서 사용자가 원하는 최종적인 실행 파일을 만들어주게 됩니다. 링커의 역할과 링커 스크립트 문법에 대해서 알아봅니다.

여섯째, NVIC 장치의 동작원리

ARM7, ARM9, ARM11 프로세서의 경우와 달리 CORTEX-M 프로세서에서는 인터럽트 컨트롤러 장치인 NVIC를 CORTEX-M 프로세서의 내부에 포함시킴으로 해서 좀 더 밀접하게 연결성을 갖도록 설계되어 있습니다. NVIC의 동작 원리를 이해하는 것은 임베디드 시스템에서 중요한 역할을 담당하는 인터럽트를 이해하는 시작점이기도 합니다.

일곱째, 익셉션 처리 절차 시작부터 종료까지 완벽 분석

하드웨어 인터럽트를 포함한 익셉션이 발생했을 때 익셉션 핸들러가 실행되기까지의 과정. 익셉션 핸들러 코드의 실행 이후 익셉션이 발생되기 직전의 프로그램 코드로 복원되기까지의 전 과정을 설명합니다.

여덟째, 클럭제어기

STM32 CORTEX 프로세서 내부에서 CORTEX-M 코어를 비롯한 AHB, APB 인터페이스 되는 다양한 하드웨어 장치들에 클럭을 공급하는 장치인 클럭 시스템의 동작 원리를 학습하고, 실습 과정을 통해서 직접 시스템 클럭 주파수를 바꾸어 봄으로써 클럭제어에 대한 자신감을 강화합니다.

아홉째, 테일체이닝과 인터럽트 중첩을 실제로 재현해보기

CORTEX-M 프로세서에서는 익셉션 처리 속도의 효율을 기하기 위하여 이른바 '테일 체이닝' 기술을 지원합니다. 이 기술이 인터럽트 응답성 개선에 얼마만큼의 기여를 하는지 동작 원리를 배우고 실습해봅니다. 또한 인터럽트 중첩도 함께 살펴봅니다.

열번째, 부트 코드 분석

어떤 소프트웨어의 부트 코드를 이해하려는 노력은 임베디드 시스템 소프트웨어의 전체적인 구조를 이해하는 데도 큰 도움이 되기 마련입니다. 부트 코드를 실제로 단순히 사용만 하는 것보다는 부트 코드에 담겨져 있는 의미를 해석해봄으로써 우리가 좀 더 발전적인 소프트웨어의 방향을 이끌어낼 수 있습니다. 물론 이는 부트로더나 RTOS 포팅과 같은 작업을 위한 필수 선행 지식의 중요성도 갖습니다.

14년 이상 숙련된 ARM 프로세서 강의 노하우 💡

여러분의 시간을 내 시간처럼 소중히 생각하며 강의를 만들었습니다.

14년동안 총 수강자 수 1000명 이상을 대상으로 ARM 프로세서 현장 강의를 해오면서 쌓은 경험으로, 더 많은 학습자들과 만남을 갖기 위해서 이렇게 온라인에서도 강의를 만들게 되었습니다. 현장 강의 기준 5일 분량의 내용을 15시간 내로 최적화한 온라인 강의로 여러분을 찾아갑니다. 


이런 분들께 추천합니다! 🔑

임베디드 시스템
입문자

이미 CORTEX-M을
사용하고 있지만
체계적인 정리를
필요로 하는 분

임베디드 소프트웨어에
대한 이해도를 높이려는
하드웨어 개발자

성공적인 RTOS 포팅 및
운용을 위한
마이컴 지식을
필요로 하는 분

이외에, 이런 분들도 배우면 좋습니다!

  • 👉 시스템 안정성, 신뢰성 높은 제품 개발을 원하시는 분
  • 👉 ARM 어셈블리 언어를 학습하려는 분
  • 👉 인라인 어셈블리, 링커스크립트, 부트코드 학습을 필요로 하는 분
  • 👉 오프라인 수업에 참여할 시간적인 여유가 없으신 분

📢 선수 지식을 확인해주세요!

  • 학습을 위한 선수 지식으로 C언어를 알고 있어야 합니다.

이 강의만의 특별한 점 ✨

  • 특징 1. 영상을 110여개 소챕터로 쪼개, 나중에 찾아보기에도 도움이 되게끔 구성했습니다.
  • 특징 2. 2D 애니메이션을 적극 활용해 이해에 도움이 되도록 만들었습니다.
  • 특징 3. 수강생이 직접 현장에서 실습에 참여하는 것과 같은 체험이 될 수 있도록 했습니다.
  • 특징 4. 불필요한 내용은 과감히 버리고, 더욱 핵심에 집중할 수 있도록 돕습니다.
  • 특징 5. 데이터북과 같은 개발자 매뉴얼을 보지 않고도  영상만으로 학습할 수 있도록 최대한 신경썼습니다.

강의에서 사용된 400여 개의 슬라이드로 구성된 교재(pdf)가 함께 제공됩니다.

사용 툴을 확인하세요 🧰

  • 컴파일러: STM32CubeIDE
  • 실습 보드: STmicro사 공식보드 STM32F429I-DISC1
  • 실습 예제 및 교재파일: CMPro_tutorials.zip (s102_실습환경구축 STM32CubeIDE 시작하기에 있습니다 )
  • 강의에서 사용한 보드는 STM32F429I-DISC1 입니다.

강의를 만든
지식공유자를 소개합니다 ✒️

홍영기(가일스쿨)

주요 이력

  • 1994년: 68HC11 MCU 기반 셋톱박스 시스템 소프트웨어 개발
  • 1995년: 68020 셋톱박스 시스템 소프트웨어 개발
  • 1997년: MPC860 VoIP 게이트웨이 시스템 소프트웨어 개발
  • 2001년: ARM720T 휴대용 MP3 플레이어 개발
  • 2003년: ARM920T 휴대용 MP3 플레이어 개발
  • 2008년~현재: ARM 프로세서 구조 및 활용 실무 현업 강의

기타

  • BLOB 오픈소스 기반 USB 다운로딩 지원 부트로더 개발
  • libjpeg 오픈 소스를 펌웨어로 포팅
  • YAFFS 낸드 플래시 드라이버 포팅
  • miniGUI 포팅
  • FatFs + SD card 포팅
  • 유튜브 채널깃허브

예상 질문 Q&A 💬

Q. C언어를 모르는 사람이 수강해도 좋을까요?

C언어를 모르시면 수업 중 실습과 관계된 부분에 대해서는 이해하기 어려우실 수도 있습니다.

Q. 중급자도 이 강의를 수강해도 좋을까요?

임베디드 시스템 개발에 입문하시려는 분들은 물론, 이미 CORTEX-M 을 사용하고 계시는 중급자 분들까지도 커버할 수 있도록 강의를 기획했습니다. 14년간 삼성전자, SK하이닉스, 한컴아카데미, 한국전파진흥원, KEA, 모토롤라반도체, 폴리텍(인천) 등에서 ARM 프로세서 강의를 한 경험으로 나름대로 ARM 프로세서 내장 프로그래밍에서 특히 까다로운 부분, 중요한 주제들을 심도있게 다루고 있습니다.

Q. 실습을 위한 STM32 보드 종류가 다양한데, 아무거나 상관없나요?

영상에선 현재 STM32F429I-DISC1 보드 기준으로 수업을 진행합니다.
추가적으로 NUCLEO-F103RB,  NUCLEO-F401RE 보드도 지원합니다. 이외 보드 추가 지원 계획 없습니다. 이 교육을 위해 보드를 새로 구매하실 분은
 STM32F429I-DISC1 보드를 강력히 추천합니다.

📢 수강 전 확인해주세요! (라이센스)

  • 강의에서 사용된 프리젠테이션 자료는 PDF 문서 형태로 수강생에게 무상 제공됩니다.
  • 함께 제공되는 문서는 인프런 내에서 강의 영상의 보조 자료로써 개인적인 사용 목적으로만 이용되어야 합니다. 책 내용의 일부 또는 전부를 복제(홈페이지나 인쇄 매체에 전재하는 것, 전자 파일로 복사하는 것도 포함함)할 때는 한국 저작권법 제27조에 규정한 사적 사용을 제외하고, 영리목적 여부와 상관없이 한국 저작권법 제42조에 따라 저작권자인 지식공유자 홍영기의 허락을 요구합니다.

다른 강의 함께 보기 🔍

이런 분들께 추천드려요!

🎓
학습 대상은
누구일까요?
임베디드 시스템 입문자
임베디드 시스템의 최적화를 고민하고 계신 분
이미 CORTEX-M 을 사용하고 있지만 체계적인 정리를 필요로 하는 분
임베디드 소프트웨어에 대한 이해도를 높이려는 하드웨어 개발자
성공적인 RTOS 포팅 및 운용을 위한 마이컴 지식을 필요로 하는 분
ARM 어셈블리 언어를 학습하려는 분
인라인 어셈블리, 링커스크립트, 부트코드 학습을 필요로 하는 분
임베디드 시스템 소프트웨어의 전문적인 디버깅 기법을 필요로 하는 분
📚
선수 지식,
필요할까요?
C 언어

안녕하세요
홍영기 입니다.
홍영기의 썸네일

인하대학교 공과대학에서 전자공학 학사 학위를 받았으며 임베디드 시스템용 소프트웨어 개발자로써 수년간의 경력을 쌓았습니다. 임베디드 시스템 및 프로그래밍을 위한 전문 강사로도 활동 중입니다. 아이폰 3GS 등장과 같은 시기에 맥(북)에 입문하였고, 그때부터 맥(북) 자동화에 관심을 갖게 되었습니다. '맥(북)에서 사용할 수 있는 시리 리모트', '키보드마에스트로를 이용한 구글번역기' 같은 오픈 소스를 깃허브(https://github.com/guileschool) 에 두고 개발 및 유지보수하고 있습니다. 오픈 소스 하드웨어 '비글본블랙' 에도 많은 관심을 가지고 있습니다. 맥(북) 자동화를 이용하여 생산성을 높일 수 있는 컴퓨터를 사용하는 모든 분야에 관심을 가지고 있고, 이를 필요로 하는 사람들을 돕고 있습니다.

강의 요청 및 기타 문의사항은 guileschool@gmail.com으로 보내주세요 :)

커리큘럼 총 111 개 ˙ 15시간 10분의 수업
이 강의는 영상, 수업 노트, 첨부 파일이 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요.
섹션 0. CORTEX-M 프로세서 시작하기
s101_강좌소개 미리보기 08:35
s102_실습환경구축 STM32CubeIDE 시작하기(교재/실습예제 다운로드) 08:22
섹션 1. CORTEX-M 프로세서 구조
s201_CORTEX-M4 프로세서의 특징 미리보기 06:55 s202_LED 점멸해보기 미리보기 05:09 s203_STM32F429I 디스커버리 보드 소개 미리보기 09:03 s204_STM32F42x 프로세서의 구조 미리보기 13:46 s205_THUMB2 명령어 미리보기 09:00
s206_프로세서 레지스터와 스택메모리 16:26
s207_핸들러모드와 쓰레드모드 11:21
s208_프로그램 카운터 레지스터 06:43
s209_파이프라인과 플래시 메모리 08:40
s210_LR 레지스터와 함수호출 28:57
s211_AAPCS 14:29
s212_데이터 타입과 ADD 명령어 04:14
s213_레지스터 기본 구조 06:39
s214_xPSR 레지스터 27:54
s215_특수 레지스터 26:43
s216_빅엔디언과 리틀엔디언 03:14
섹션 2. 어셈블리 프로그래밍
s301_CORTEX-M 명령어 06:27
s302_비교와 분기 명령어 11:51
s303_CONDITION CODE 14:27
s304_IT 명령어 10:03
s305_쉬프터와 비트 연산 명령어 14:21
s306_루프문 만들기 06:58
s307_다양한 로드 스토어 명령어 15:20
s308_메모리 복사(LDR,STR) 예제 07:43
s309_어셈블리 언어를 알아야 하는 이유 06:41
s310_PUSH POP 명령과 컨텍스트 09:13
s311_함수 리턴 주소를 스택에 저장하는 이유 02:05
s312_블럭 전송 명령어 03:47
s313_메모리 복사(LDM,STM) 예제 05:44
s314_하드웨어를 이해한다는 것 05:42
s315_CBZ 명령어와 루프문 03:40
s316_유용한 BYTE 스왑 명령어 03:52
s317_REV 명령어 05:09
s318_CLZ 명령어 04:01
s319_RISC 프로세서의 단점(feat. Branch) 11:12
s320_로컬레이블과 전역레이블 03:13
s321_데이터 프로세싱 명령어 05:03
s322_ADR 과 레이블 01:26
s323_비트 연산 명령어 05:52
s324_비교 명령어 09:27
s325_BRANCH 명령어 04:19
s326_쉬프트 명령어 06:31
s327_곱셈 명령어 02:53
s328_포화 연산 명령어 11:49
s329_PACK, UNPACK 01:35
s330_나눗셈 명령어 03:57
s331_병렬 연산 명령어 02:49
s332_다양한 데이터 프로세싱 명령어 11:14
s333_특수 명령어 05:40
s334_LDR, STR 명령어 16:25
s335_LDR 명령어의 주소 해석법 06:12
s336_비정렬 액세스의 득과 실 13:25
s337_인라인 어셈블러 21:49
섹션 3. 메모리 맵
s401_AMBA 와 메모리 맵 05:36
s402_메모리 맵 IO 05:11
s403_소프트웨어의 논리적인 메모리 구조 05:34
s404_메모리 맵 IO 사례 버튼 키 05:18
섹션 4. 예외처리와 하드웨어 인터럽트
s501_인터럽트 방식의 버튼 키 05:30
s502_NVIC 09:20
s503_예외처리 벡터 테이블 10:47
s504_인터럽트 마스킹 06:02
s505_인터럽트 펜딩 04:10
s506_EXTI 와 외부 인터럽트 06:26
s507_소프트웨어 트리거 인터럽트 03:08
s508_레벨 vs 펄스 인터럽트 04:31
s509_인터럽트 레이턴시 02:57
s510_CORTEX 의 다양한 익셉션들 05:35
s511_익셉션 핸들러 03:42
s512_익셉션 활성화와 비활성화 02:24
s513_SYSTICK TIMER 13:41
s514_소프트웨어 리셋 02:14
s515_메모리 REMAP 02:48
s516_BOOT 핀과 부트동작 01:09
s517_벡터 테이블 재배치 01:49
s518_선점 우선순위와 서브우선순위 10:07
s519_익셉션과 우선순위 09:51
s520_SYSTICK 인터럽트 분석 19:10
s521_시스템 컨트롤 블록 SCB 20:16
s522_익셉션 사례 분석 09:22
s523_테일 체이닝 03:36
s524_테일 체이닝 사례 분석(feat. 버튼키) 07:02
s525_지연 도착 01:36
s526_인터럽트 선점 02:06
s527_인터럽트 중첩 02:32
s528_인터럽트 중첩 사례 분석(feat. 버튼키) 08:20
s530_임베디드 소프트웨어에서의 printf 사용 08:05
s531_익셉션 리턴과 스택 프레임 09:40
s532_익셉션 리턴 사례 분석(feat. 버튼키) 12:37
s533_SVC 시스템 호출 05:37
s534_SVC 시스템 호출의 실제 구현 15:26
s535_THUMB 모드 주의사항 01:30
s536_THUMB 모드와 폴트 사례 I 10:42
s537_THUMB 모드와 폴트 사례 II 03:58
s538_THUMB 모드와 폴트 사례 III 03:49
섹션 5. 클럭시스템과 리셋
s601_클럭시스템 06:13
s602_클럭의 생성과 변경-실습 14:24
s603_Dhrystone과 벤치마킹 02:58
s604_Dhrystone 실습 03:03
s605_CORTEX-M의 다양한 리셋 유형 04:32
s606_소프트웨어 리셋 02:46
섹션 6. CORTEX-M 프로세서에서의 소프트웨어
s701_비트 밴딩 07:30
s702_LED을 제어하는 다양한 방법 10:40
s703_비 원자적 액세스의 위험성 GPIO_ODR 08:14
s704_원자적 액세스의 필요성 GPIO_BSRR 04:21
s705_LED 제어로 알아보는 원자적 액세스 02:58
s706_소프트웨어의 논리적인 메모리 구조 13:39
s707_링커 스크립트 파일 분석 29:07
s708_소프트웨어를 램에서 실행하기 05:19
s709_임베디드 소프트웨어의 부트 동작 분석 23:22
강의 게시일 : 2022년 06월 14일 (마지막 업데이트일 : 2022년 12월 04일)
수강평 총 19개
수강생분들이 직접 작성하신 수강평입니다.
5
19개의 수강평
5점
4점
3점
2점
1점
VIEW 추천 순 최신 순 높은 평점 순 낮은 평점 순 평점 순 높은 평점 순 낮은 평점 순
Embedded June thumbnail
5
※ 1줄 요약: 아무 걱정 마시고 그냥 무조건 들으세요. 수강료가 100만 원이 돼도 무조건 들어야 합니다. <임베디드스케치>, <임베디드레시피> 책을 읽은 뒤 ARM 내용을 정리 & 실습하기 위한 목적으로 홍영기 선생님의 강의를 결제 후 완강까지 7일 소요됐습니다. ◆ 장점 - 너무 잘 설명해주셔서 이해하기 쉽습니다. - 말과 말 사이 간격 편집, 기다리는 과정 편집, 보드 영상 편집 등으로 수강하기 너무 편합니다. - 특히 마지막 챕터 링커스크립트와 부트로더 한 줄 한 줄 설명해주시는 게 가장 좋았습니다. ◆ 팁 - 질문에 정말 친절하게 답해주시고, 추가로 읽으면 좋은 자료도 소개해주십니다. 한 강의 수강하실 때마다 질문게시판 확인하세요. - PM0214, RM0090 두 datasheet 열어놓고 강의 들으시면 좋습니다.
2023-01-06
지식공유자 홍영기
완강하셨네요 ^^. 영상을 끝까지 봐주셔서 감사드리고, 수고하셨습니다. 부족한 점도 많을텐데 강의에 대한 좋은 평가도 감사드립니다. 적어주신 자세한 수강평 내용은 앞으로 이 강의 수강을 검토하시는 많은 분들에게 좋은 참고가 될 것입니다. 임베디드 쥰님 새해 복 많이 받으시고 꼭 소원 성취하세요 :-)
2023-01-07
현정호 thumbnail
5
Cortex-M에 대한 체계적인 정리가 됩니다. M0/M4/M7 모뚜 적용 가능할 뿐만 아니라 어셈블리어를 통한 디버깅을 이용해 다중 인터럽트 사용시 펌웨어가 어디서 꼬였는지 확인이 가능해서 고급 펌웨어 설계자한테는 필수가 되는 기초강의 입니다.
2024-01-01
Taewan Sung thumbnail
5
"임베디드의 인프라 기술, ARM 동작원리를 쉽게 알고 싶은 분들에게 추천하고 싶은 강의입니다. 컴파일 에러가 뜨면 심리적으로 위축되고, 그게 C 문법이 아닌 처음 보는 이상한 명령들이라면 더욱 더 스트레스를 받습니다. 이 강의를 수강하면서 그런 에러들을 좀 더 여유있게 처리할 수 있게 되었습니다. 핵심 내용을 짧게 나눠서 실습과 함께 설명해 주시기 때문에 이해하기 쉽습니다. 실무에서 ARM 명령어를 직접 다루지 않더라도 강의에서 배운 프로세서의 기반기술을 알고 있기 때문에 문제 해결을 좀 더 다양한 관점에서 접근할 수 있을것 같습니다. 강의를 만들어 주셔서 감사합니다^^
2022-12-27
지식공유자 홍영기
안녕하세요. Taewan Sung 님! 이 강의가 도움이 되셨다니 제가 더 감사한 일입니다. 앞으로도 더욱 유익하고 다양한 강의 제작에 힘쓰겠습니다. 강의에 대한 좋은 평가 감사드려요 :-)
2022-12-27
yoonhj thumbnail
5
임베디드 소프트웨어를 사용하고 있었지만 어셈블리어는 낯선 영역이라 배워야한다고 생각은 하면서도 쉽게 엄두가 나지 않았습니다. 강사님의 강의를 통해서 조금은 자신감이 생긴 것 같습니다. 유익한 강의 감사합니다!
2023-12-19
김대환 thumbnail
5
유익한 강의입니다
2023-12-14