본문 바로가기
728x90
반응형

3. 개발 관련191

C :: padding / packing / bit fields 개발의 규모가 커지거나, 정확한 사이즈로 특정 영역을 관리해야 할 때, padding / packing / bit fields 지정 등을 주로 사용 한다. padding struct foobar { int a; // 4 byte char b; // 1 byte } 위 코드의 사이즈는 8 byte 이다. architecture 에 따라 다르나, 일반적으로 word 단위의 memory alignment 로 처리되며, 이러한 사이즈를 컴파일러 수준에서 맞추어 주는 작업을 structure padding 이라 한다. 간략하게 정리하면 아무것도 안하면, 그냥 다 alignment 에 맞게 padding 된다. #pragma pack() attribute packed struct foobar { int a; // .. 2023. 4. 20.
C :: global static variable and local static variable 지역변수와 전역변수는 흔히들 사용되고 익히들 안다. 잘 안쓰는 거라 그런지 개념이 휘발성인가..오래되면 까먹는다 global static variable : file 내에서만 static 으로 사용된다. 기본적으로는 메모리를 점유하며 계속 값이 업데이트/유지된다. 다른 파일 등에서도 사용하려면 당연히 non-static 으로 사용해야한다. local static variable : function/scope 내에서만 static 으로 사용된다. 함수 호출 시에만 값이 업데이트/유지 되는데, 아직까지 필요성을 모르겠다. 다른 분이 함수내에서 static 변수를 사용한다면 심히 불편할듯? extern variable in function : 이 것도 위와 유사하다...왜 땜에? 문제는 함수내 extern 이.. 2023. 4. 20.
Embedded Software 개발 : `schematic to source code` - 1 일이 일이다 보니 회로도를 열어 볼 일이 종종 있는데, 가끔 뉴비분들과 이야기해보면 본적이 없어 모르시는 경우가 있다. 어찌보면 당연하기도 하다. IT가 대세인지 오래고 임베디드/제조는 기피 순위가 높은 듯 하니 뭐... 코드는 봐도 회로나 datasheet 를 볼 일 자체가 없지 않겠나 싶긴하다. 직접 Bring-up 부터 진행하지 않더라도 BSP를 개발 하는 과정에서는 hardware/IP에 따라 설정/추가해야하는 경우 들이 종종 생긴다. 실제 모A P회사의 레퍼런스 보드 제조사에서도 어이없는 문제가 발생하기도 한다(특정 hardware 에 대한 reset pin default disable 등). 최소한 필요한 부분 또는 개발을 하는 방법 등만 한번 정리해보자. 준비물 : 개발을 할 때 반드시 미리.. 2023. 4. 19.
linux - memory barrier (feat. 기묘한 이야기) memory barrier 를 사용하다 발견한 신기한 일. 주로 mb/smp_mb 등으로 사용되는 데 개념적인 내용은 아래와 같다. mb : generic memory barrier wmb : write memory barrier rmb : read memory barrier 주로 사용되는 케이스를 생각하면 아래와 같이 특정 mmio reg 등에 r/w 시의 order 및 mb 이전의 code가 확실히 수행되기를 위함이긴 했다. writel(reg, BIT(15)); wmb(); * reg 의 15번 bit를 set하고 이후의 작업을 수행 전 wmb 를 통한 order를 설정. writel(mmaped_reg, BIT(15)); mb(); // generic type * mapping 된 reg의 14번.. 2023. 4. 19.
bool convert in C 어떠한 header file(stdbool.h) include 또는 define true/false 를 사용하지 않고 boolean 타입에 대한 operation 을 쓰고 싶을 경우에 유용한 방법이다. 사실 driver 또는 kernel code 에 이전 부터 있었는데, 크게 신경 안쓰고 넘어갔던 부분이기도 하다!! int foobar = 0; foobar = arg; if (!!foobar) 어거지이다만 위와 같은 형태로 사용하면 된다. int type 의 foobar 에 arg 라는 미지의 값을 할당하였을 때, 또한 true/false 로만 처리하고 싶을 때, double nagation 을 사용하여 foobar 라는 int 값을 bool type 으로 강제 convert 시킨다고 이해하면 된다. 2023. 4. 19.
Bitwise Operation in C Device Driver 나 low-level system programming 을 건드리다 보면 bit operation 을 자주 쓰게 되는데, 개발자마다 사용하는 방식이나 스타일이 다르다. 음... 이것도 한가지 타입으로 정의해서 쓰면 코드가 더 깔끔해질 것 같긴한데, 우선 선호하는 내용만 정리해본다. 1. Set bit OR 연산자를 "|" 를 사용한다. foobar |= 1UL 2023. 4. 19.
728x90
반응형