본문 바로가기

C언어11

[펌웨어] 키패드 다중 키 처리에 대한 이야기 펌웨어로 키패드 프로그램을 만들 때가 많다. 키 패드를 사용하는 제품은 눌러진 키를 어플리케이션 단에 전달을 해야 하는데 하나만 눌러진 경우와 멀티 키가 눌러진 경우에 따라 처리가 달라지곤 한다. 조건 없이 눌러진 키들을 그냥 전달만 해야 하는 경우는 어려운 것이 없으나, 직접 하드웨어를 컨트롤하는 (호이스트나 모터를 제어하는) 경우에는 키 패드에서도 멀티 키, 다중 키에 대해 처리가 필요하다. 2개 이상 눌러진 경우, 무시 보통 키 패드는 매크릭스 구조로 되어 있는데, 2개 이상 눌러진 경우 보내지 않는 조건으로 어플리케이션이 설계되어 있다면 어려울 것이 없다. 눌러진 키값이 여러 개이면 안 보내면 되기 때문이다. 특정 패턴의 키가 눌러지는 경우만 무시 모터를 제어하는 경우, 반대되는 키들의 조합이 눌.. 2021. 9. 1.
[C언어/API] 버튼 입력 채터링 관련한 팁 펌웨어나 GPIO 관련한 프로그램을 짤 때, 스위치나 버튼 관련된 입력이 생각보다 힘든 부분이 있다. 출력은 한 번만 하면 되지만, 사용자의 입력을 받는 입력은 노이즈가 튈 가능성이 있기 때문이다. (빠르게 누르고 땐다거나, 마구 누르거나 보드 자체 노이즈가 들어가거나...) 그래서 입력을 처리할 때는 채터링 또는 디바운스라해서 단순히 한 번만 핀/포트 읽는 것으로 처리하지 않고 수차례 읽어서 처리하곤 한다. for(cnt=0,i=0;i 7) BUTTON_IN = 1; else BUTTON_IN = 0; 보통 위와 같이 심플하게 여러 번 읽어서 처리하는데, 이는 제품마다 편차가 있을 수도 있어서 튜닝을 해야 하는 코드이다. 또, 입력이 여러 개인 경우, 그만큼 처리가 복잡해지기도 한다. 내가 작업했던 어.. 2021. 8. 1.
1분코딩강좌 #09 enum과 switch문 안녕하세요 코저씨입니다. 오늘은 동영상을 만들기 전에 내용부터 정리할 겸 글부터 올려봅니다. 설명드릴 것은 흔히 C언어를 배우면서 그냥 알고만 넘어가는 enum, 열거형에 대해 알아보겠습니다. 열거형 enum 열거형은 쉽게 말하면 상수에 이름을 지정해주고, 자동으로 이름에 들어가는 값을 계산하여 순차적으로 넣어주는 문법입니다. 1 2 3 4 5 6 7 enum{ ENUM_STATE_IDLE=0, ENUM_STATE_START, ENUM_STATE_STOP }; int iValue = ENUM_STATE_START; cs 위 내용은 ENUM_STATE_IDLE을 0으로 초기화하면서 ENUM_STATE_START에는 1을, ENUM_STATE_STOP에는 2를 넣습니다. iValue에는 ENUM_STATE_.. 2021. 5. 23.
1분코딩강좌 #08 최적화와 volatile에 대한 강좌 | 어셈블리어 코드분석 안녕하세요 코저씨입니다. 오늘은 volatile 에 대해 알아 보겠습니다. volatile 정의 volatile로 선언된 변수가 있는 소스코드는 최적화 하지 않게 하는 역활 컴파일러는 최적화 옵션이 활성화되면, 프로그램 크기를 줄이기 위해, 속도를 향상시키기 위해소스코드를 최적화 합니다. 이 과정에서 개발자가 의도하지 않는 동작이 나옵니다. 그 동작을 제한하기 위해 volatile을 사용합니다. 자세한 것은 아래 영상을 통해 확인 바랍니다. 강좌영상 정리 첨부 영상에 있는 소스에서 volatile 을 선언해서 실습해보시기 바랍니다. 본 음성은 인공지능 성우 서비스 타입캐스트에서 제작되었습니다. 인공지능 성우 - 재훈 https://typecast.ai 2021. 5. 9.
펌웨어를 위한 C언어 1분코딩강좌 #06 포인터 기초 안녕하세요 코저씨입니다. 오늘도 포인터에 대해 알아보겠습니다. 포인터와 배열은 같으면서도 다른 구조를 가지고 있습니다. 아래 영상에서는 포인터와 배열이 어떻게 다른지와 어째서 포인터가 어려운지를 설명하고 있습니다. 많은 시청바랍니다. 감사합니다. 2021. 5. 6.
펌웨어를 위한 C언어 1분코딩강좌 #05 포인터 기초 안녕하세요 코저씨입니다 이번엔 c언어 교재에 맨날 맨뒤에 나오는 포인터에 대해 알아보겠습니다. 사실 포인터가 c언어의 가장 중요하거나 그런 건 아닙니다. 메모리 주소를 직접 제어해서 어려워 보이는 거지 펌웨어라면 레지스터 직접 쓰고 읽는 것과 같습니다 특히 배열과 포인터를 많이 어려워하는데 이번엔 포인터를 왜 쓰는지에 대해 먼저 알아보겠습니다 (내용이 길어져서 1부, 2부로 나누었습니다) 2021. 5. 4.