반응형

Embedded 18

[STM32] STM32H7B3I-DK를 사용하여 LVGL 예제 프로젝트 설정하기.

LVGL이란? LVGL은 무료 오픈 소스 그래픽 라이브러리로써 임베디드 시스템에서 사용자 인터페이스(UI)를 사용하고자 할때 사용하는 그래픽 라이브러리중 하나입니다. LVGL 공식 사이트에서 LVGL에 대한 설명을 구체적으로 볼 수 있습니다. https://lvgl.io/ LVGL - Light and Versatile Embedded Graphics Library LVGL is the most popular free and open source embedded graphics library targeting any MCU, MPU and display type to build beautiful UIs. It's boosted by a professional yet affordable drag and d..

Embedded/ST Series 2023.10.18

[C] 가변 인수 (2) : 가변 인수 함수를 꼭 써야 가변인수를 사용할수 있는걸까?

일반 함수 매개변수의 주소값과 가변인수함수의 주소값을 살펴보았습니다. 그 두가지의 주소값 할당은 비슷한점이 많았습니다. 그럼 아래와 같이 가변인수함수를 사용하지 않아도 가변인수의 값을 가져올 수 있지 않을까요? #include int sum(int i, ...); void main() { printf("\n%d\n", sum(3, 1, 2, 3)); } int sum(int i, ...) { int sum = 0, j; int *p = &i + 1; for (j = 0; j

[C] 가변 인수 (1) : 가변 인수 함수의 주소는 어떻게 될까

일반적으로 가변인수를 사용하는 방법은 아래와 같습니다. #include #include //가변 인수를 사용하기 위한 헤더파일 int sum(int i, ...); void main() { printf("\n%d\n", sum(3, 1, 2, 3)); } int sum(int i, ...) { int j, t, sum = 0; va_list sp; //가변 인수들의 주소를 저장할 지역변수 va_list. Type은 char* va_start(sp, i); //가변 인수 바로 앞에있는 고정매개변수를 받는다. 이 함수의 매개변수에서 가변인수(...) 앞에는 int i 이므로 i를 넘긴다. for (j = 0; j < i; j++) { t = va_arg(sp, int); //int형으로 참조하여 값을 가져온..

[C] 선언한 배열의 index 이상을 접근하면 어떻게 될까?

길이가 10인 1차원 배열이 있다고 하겠습니다. 그럼 index의 범위는 0 - 9 입니다. 만약 이를 초과한 10에 접근하면 어떻게 될까요? 우리의 컴파일러는 친절하게도 문제가 있다는것을 밑줄로 알려줍니다. (Debug Mode에서는 프로그램을 실행하면 메모리 접근 에러가 납니다. 정말 친절해서 너무나 고마운나머지 Test는 Release Mode에서 진행했습니다. ) 그런데 에러가 아닌 경고가 메시지가 발생합니다. 컴파일도 아주 잘 되죠. 동작시키면 쓰레기 값이 나오지만요 ^^ 그럼 배열범위를 벗어난 메모리 값을 초기화를 해버리면 어떻게 될까요?? 결과는 에러없이 아주 잘 동작합니다. 경고는 존재하지만요. 이를통해 알 수 있는것! 1. 배열의 크기를 10으로 지정한다고 해서 10만 쓸수 있는것은 아니..

[C] Typedef 손쉽게 이해하기.

C언어에서 Typedef 는 자료형을 재정의 할 수 있도록 하는 아주 유용한 키워드입니다. typedef (자료형이름) (재정의할 자료형 이름) 로 되어있는 아주 쉬운 구조이죠. 사용방법을 간략하게 예를들면 아래와 같습니다. typedef int INT32; //int를 INT32로 재정의해서 사용할거에요! INT32 a = 1000; // int a = 1000 이랑 같은 뜻! 사실 위와같은 케이스에 대해 이해하는건 정말 쉽습니다. 그런데 이에 대하여 처음 접하거나 익숙하지 않은 경우 간혹 헷갈리는것들이 있습니다. typedef void (*fun)(int,int); //함수포인터 자료형! typedef int (*arr)[10]; //포인터 배열 자료형! 위 두개는 함수포인터의 자료형과 포인터 배열의..

[C] 매크로 함수 이해하기

아래와 같은 코드가 있습니다. #include int add_int(int x, int y); float add_float(float x, float y); #define fun( name0, name1, x, y )name0##_##name1(x,y) #define out( name0, name1, data )out_##name1(name0, name, data) #define out_int(name0, name1, data)printf(#name0"_"#name1 ": [ %d ]\n", data) #define out_float(name0, name1, data)printf(#name0"_"#name1 ": [ %f ]\n", data) void main() { int ia = 200, ib = 3..

[C] 매크로 함수에서 do~while(0)을 쓰는 이유

매크로 함수를 보다보면 do~while(0) 형태로 되어있는것을 보게 됩니다. #define add(a,b,c) do{a = a + b; }while(0) 왜 이렇게 사용하는지 한번 알아볼께요. 아래는 일반적인 매크로 함수 입니다. #include #define add(a,b,c) {a = a + b; \ c = a + b;} void main() { int a = 300, b = 200, c; if (a > b) { add(a, b, c); //if에 { } 를 사용! } else { printf("Test"); //else에 { } 를 사용! } printf("[ %d %d %d] \n", a, b, c); } 위 코드를 컴파일 해보면 정상적으로 동작합니다. 자 이제 if와 else의 소괄호를 없애고..

STM32을 개발하려면 필요한 Reference 자료..

ST사의 홈페이지에 가서 사용할 chip 또는 보드를 검색하면 대부분 나온다. 1. Data sheet Data sheet는 핀맵, 기능, 특성등이 있는 문서이다. H/W를 설계하거나 해당 디바이스에서 사용되는 기능이나 핀들을 간단하게 보고자 하면 이 문서를 참조하면 된다. 2. Reference manual Reference manual은 디바이스가 제공하는 기능에 대하여 상세하게 설명하며, 이를 사용하기 위한 SFR(Special Function Register)에 대한 설명을 가지고 있는 문서이다. 해당 기능을 사용하기위한 코드를 작성할 때 필수적으로 참조하야 하는 문서이다. 3. Programming manual STM32에 사용되는 Cortex-Mx의 레지스터, 인터럽트, 타이머, 명령어(Ins..

Embedded/ST Series 2016.11.22
반응형