나빌레라의 블로그

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (5)

5. UART 콘솔 태스크 만들기

나빌로스를 포팅하긴 했으나 아직 RTOS를 써먹고 있지는 않다. 기능별로 태스크를 분리하면서 확장하는 방식으로 펌웨어를 만들 생각이다. 펌웨어 동작을 확인하려고 처음 만든 것이 UART 출력 펌웨어다. RTOS 태스크로 처음 만들기 적당한 재료도 UART다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (4)

  1. HID USB 만들기

HID USB 키보드 펌웨어를 만들기로 했으니까 당연히 제일 먼저 HID USB 코드를 작성한다. 그래서 컴퓨터에 꼽아보고 HID 키보드로 인식되는 모습을 먼저 봐야 동기부여가 될 것이다. 프로그램을 만드는 작업은 일단 작업 내용을 바로바로 눈으로 볼 수 있어야 재미있게 할 수 있다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (3)

  1. 나빌로스에 예제 코드 포팅 (멀티 플랫폼을 반만 고려해서 cortex-m3 삽질한 이야기)

Cortex-m3에 나빌로스를 포팅할 줄은 몰랐던 이야기.

키보드 펌웨어에 RTOS가 필수는 아니다. 하지만 내가 만든 RTOS(나빌로스: https://github.com/navilera/Navilos)가 이미 있으니 한번 실전 경험을 해야 하지 않겠는가하는 생각이 들었다. 그래서 직전에 만든 베이스 코드를 나빌로스에 포팅하기로 결정했다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (2)

  1. UART 예제

처음 키보드를 만들려고 했을 땐 펌웨어까지 만들 생각은 없었다. 공개된 키보드 펌웨어 중엔 널리 쓰이고 검증된 펌웨어가 있었으니까. 대표적인 오픈 소스 키보드 펌웨어는 QMK(https://github.com/qmk/qmk_firmware)와 TMK(https://github.com/tmk/tmk_keyboard)가 있다. QMK도 TMK 기반에 부가 기능을 추가한 것이다. 많은 커스텀 키보드들이 QMK나 TMK를 쓴다. 나도 당연히 아무 고민 없이 QMK를 쓰려했다.

막상 쓰려고 마음 먹고 포팅 작업을 하려 했더니 몇 가지 마음에 들지 않는 부분이 보였다. 그래서 그냥 안 쓰고 내가 처음부터 새로 만들기로 결심했다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (1)

  1. 하드웨어편 (프롤로그)

이 글은 커스텀 기계식 키보드를 하드웨어부터 펌웨어까지 모두 만들어본 이야기다. 첫 번째 이야기. 하드웨어 편.

원래는 그냥 기계식 키보드 하나 새로 사려고 했다. 그런데 기계식 키보드는 종류가 매우 많기 때문에 인터넷 검색질을 하면 할 수록 더욱 고르기 어렵게되는 문제가 있다. 어떤 키보드가 대충 80% 정도 마음에 드는데 다른 키보드는 부족한 20%를 채우고 있지만 나머지는 다 마음에 들지 않는 그런 상황이다. 그래서 생각했다. 그냥 내 마음에 드는 걸로 만들어 보는건 어떨까.

나빌레라의 이미지

윈도우 오픈 소스 한글 입력기를 만들었습니다.

나빌입력기는 윈도우에서 동작하는 오픈 소스 한글 입력기 입니다. libhangul 자체를 윈도우에서 빌드하여 직접 사용하는 한글 입력기입니다. 그래서 한글 오토마타는 리눅스의 ibus, fcitx와 동일합니다. 모두 libhangul을 사용하니까요.

기존에 오픈 소스 윈도우 한글 입력기는 제가 조사한 범위에서는 새나루 입력기(https://kldp.net/saenaru/)가 유일했습니다. 새나루 입력기 역시 KLDP에서 활동하시던 개발자님들께서 만든 작품이지요. 새나루 입력기에 이어서 나빌 입력기는 사실상 두번째로 공개된 윈도우용 오픈 소스 한글 입력기입니다.

나빌레라의 이미지

전 세계에서 저 혼자 사용하는 글자판을 쓰게 된 사연...

* 세벌식이어야 한다.
* 시프트 키를 사용하지 않고 한글 입력이 가능해야 한다.
* 두벌식 자판 사용자가 빠르게 학습 가능해야 한다.

3-18Na 자판은 기존 두벌식 자판 배열을 전혀 수정하지 않고 세벌식 자판을 구현한 자판입니다.

나빌레라의 이미지

임베디드에서 소프트웨어 베이스 메모리 테스트

꽤 오래간만에 KLDP에 글을 올리는 것 같습니다. 먹고 사느라 바쁘군요...^^;
얼마전에 찾은 좋은 문서가 있길래 번역해 봤습니다. 나중에라도 누군가가 필요하면 도움이 되겠지요.

이 글은 http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/software-based-memory-testing.html 의 내용을 제 맘대로 번역한 글입니다. 번역의 품질이 매우 허접하므로 정확한 내용을 원하시는 분은 원문 링크로 들어가서 원문을 확인하시길 바랍니다.

나빌레라의 이미지

나의 삽질 유산 답사기... #2. 멀티 쓰레드에서 정적 객체를 사용할 땐 조심해야 합니다.


2편은 쓸지 안쓸지 몰랐는데 2편도 씁니다. 과연 3편은 쓸지 모르겠습니다. 모이다 보면 어떤 사람들에겐 꿀 팁이 될지도 모르고 어떤 사람들에겐 별것 아닌 글만 올리는 것이 될 수도 있다는 생각이 드네요.

그래도 별것 아닌 삽질이지만 기억해 둘 만한 꺼리라고 생각되어 정리합니다.

동시에 동작하는 멀티 쓰레드 프로그래밍에서 다수의 쓰레드가 하나의 정적 객체에 접근할 때, 특정 상황에서 신경써야 할 부분이 있습니다. 어떤 상황이냐면, 쓰레드의 로컬 데이터를 정적 객체에 던져주고 그 데이터를 정적 객체가 사용할 때입니다.

문장으로 써 놓으니 제가 생각해도 의미 전달이 다 안된것 같군요. 그럼 코드를 봅시다. 코드는 편의상 의사코드로 작성했습니다. 제가 삽질했던 코드를 가져올 순 없는 상황이네요..^^;

나빌레라의 이미지

나의 삽질 유산 답사기... #1. QEMU에서 0x00000000에 이미지를 올리고 싶었습니다.

무슨 바람이 불었는지 삽질하다 말고 삽질 내용을 KLDP에 올리고 싶다는 생각이 들어서 키보드에 손가락을 올려 놓습니다. 별 내용은 아닌데 구글링하다가 답을 못 찾고 직접 삽질한 내용이라 기록을 남기는 의미에서라도 어딘가에 적어 놓고 싶었거든요. 그럴 공간이 제게 KLDP 말고 또 어디가 있겠습니까..

이 글을 시리즈로 올릴 생각은 없는데 그래도 혹시 모르니까 #1 이라고 번호를 붙였습니다. #2는 아마 또 쓸지 안쓸지 저도 모릅니다.

지난번에 제가 올렸던 글에서 밝혔던 대로 저는 요즘 취미 삼아 시간 나는 대로 RTOS를 하나 새로 만들고 있습니다. 타겟 보드는 보다 많은 사람들이 접근할 수 있도록 실물 보드를 쓰지 않고 QEMU를 사용합니다. 훌륭한 에뮬레이터이지요. 게다가 오픈 소스라서 어떤 문제가 생겼거나 원하는 동작을 이끌어 낼 방법을 찾지 못했을 때 마지막 수단으로 QEMU 자체의 소스 코드를 뜯어 볼 수 있어서 좋습니다. 이 글의 내용이 바로 그 QEMU 내부 코드 중 "아주 극히 매우" 일부를 분석해 본 내용입니다.

페이지

RSS - 나빌레라의 블로그 구독하기