본문 바로가기

펌웨어27

[C언어/API] 변수의 비트 수 체크하기 C언어 함수 중 필요한 것들을 정리해서 올려보려 합니다. ​ 이번 함수는 변수 내에 있는 비트 수를 체크하는 함수입니다. ​ 변수 A에 0x03 값이 들어 있는 경우, 이진수로 표현 시 0000 0011 = 0x03 위와 같습니다. 1로 써진 비트 수는 2개이고, 비트 연산을 많이 쓰는 경우 비트 개수를 체크할 때가 많습니다. ​ 예를 들면 여러 스위치의 값이 변수 1개에 각 비트별로 OR 처리하는 경우, 1번 스위치는 0번 비트 자리에 2번 스위치는 1번 비트 자리에 들어가도록 OR를 하면 몇 개의 스위치가 눌러졌는지 체크하는 일이 있습니다. ​ 비록 최적화는 신경 쓴 소스는 아니지만 코딩에 많은 도움이 되었으면 합니다. //해당 데이타에 비트 '1'이 2개이상이면 TRUE, 1개 이하면 FALSE u.. 2021. 8. 1.
[C언어/API] 버튼 입력 채터링 관련한 팁 펌웨어나 GPIO 관련한 프로그램을 짤 때, 스위치나 버튼 관련된 입력이 생각보다 힘든 부분이 있다. 출력은 한 번만 하면 되지만, 사용자의 입력을 받는 입력은 노이즈가 튈 가능성이 있기 때문이다. (빠르게 누르고 땐다거나, 마구 누르거나 보드 자체 노이즈가 들어가거나...) 그래서 입력을 처리할 때는 채터링 또는 디바운스라해서 단순히 한 번만 핀/포트 읽는 것으로 처리하지 않고 수차례 읽어서 처리하곤 한다. for(cnt=0,i=0;i 7) BUTTON_IN = 1; else BUTTON_IN = 0; 보통 위와 같이 심플하게 여러 번 읽어서 처리하는데, 이는 제품마다 편차가 있을 수도 있어서 튜닝을 해야 하는 코드이다. 또, 입력이 여러 개인 경우, 그만큼 처리가 복잡해지기도 한다. 내가 작업했던 어.. 2021. 8. 1.
1분코딩강좌 #08 최적화와 volatile에 대한 강좌 | 어셈블리어 코드분석 안녕하세요 코저씨입니다. 오늘은 volatile 에 대해 알아 보겠습니다. volatile 정의 volatile로 선언된 변수가 있는 소스코드는 최적화 하지 않게 하는 역활 컴파일러는 최적화 옵션이 활성화되면, 프로그램 크기를 줄이기 위해, 속도를 향상시키기 위해소스코드를 최적화 합니다. 이 과정에서 개발자가 의도하지 않는 동작이 나옵니다. 그 동작을 제한하기 위해 volatile을 사용합니다. 자세한 것은 아래 영상을 통해 확인 바랍니다. 강좌영상 정리 첨부 영상에 있는 소스에서 volatile 을 선언해서 실습해보시기 바랍니다. 본 음성은 인공지능 성우 서비스 타입캐스트에서 제작되었습니다. 인공지능 성우 - 재훈 https://typecast.ai 2021. 5. 9.
1바이트를 n배수로 증가시켜 리턴하는 함수 이번엔 생각외로 머리쓰며 만든 함수이다. 1바이트를 n배만큼 증가하여 배열로 리턴시켜주는 함수... 이 녀석은 생성된 이미지를 원하는 크기만큼 Enlarge 시켜주기 위한 함수로 만들었다.. 소스는 다음과 같다.. 메인 함수는 ByteXNum함수이고 0x81을 2배하면 0xC0 03 3배하면 0xE0 00 07 이 나온다. 개발환경때문에 1~16배 까지만 된다. // test_qr.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include unsigned char buf[20]; unsigned char rotate_shift(unsigned char shift_n,un.. 2021. 4. 16.
EFR32 USART / LEUAR 시리얼 통신비교 EFR32의 시리얼통신은 2가지가 있는데 일반 USART와 다른 하나는 저전력 LEUART 이다. LEUART는 에너지모드 lv2 (슬립모드) 에서도 wake up 이 되기 때문에 저전력을 유지해야 하는 경우 필수가 된다. LEUART의 클럭은 32.768khz 크리스탈 또는 내부 32.768khz 오실레이터에서 받아서 사용이 가능하다. LEUART 초기화 함수 내부 오실레이터로도 LEUART 사용이 가능한데 다만 cpu 상태(온도 등)에 따라 오차가 발생할수있다. 선택가능한 클럭 위 사진은 내부 오실래이터로 LEUART 시리얼통신을 한 경우인데 9600bps 인데도 에러가 중간중간 발생했다. 외부 크리스탈을 쓴 경우는 아주 깔끔하게 데이터를 수신을 받고 있다. ​ 2021. 3. 22.
펌웨어를 위한 C언어 1분코딩강좌 #01 memset과 sizeof 안녕하세요 코저씨입니다. 오늘은 C언어를 개발하면서 실수하기 쉬운 memset과 sizeof에 대해 알아 보겠습니다. ​ memset이나 memcpy 등에서 배열의 어느 사이즈만큼 처리하게 할지 고민될때가 있습니다. ​ 그런경우 char 형인지 아니면 int 인지에 따라 배열의 크기가 바뀝니다. 개발시 실수하기 쉬운 내용이지 참조 바랍니다. 감사합니다. 2021. 3. 22.