본문 바로가기

전체 글271

[펌웨어] 시스템 클럭이란? 기본적인 연산 수행 횟수를 말한다. 시스템 클럭인란 1초에 mcu가 몇 hz로 발진하는지를 이야기한다.만약 SystemCoreClock이 48MHz라면, MCU는 1초에 48,000,000번의 클럭 사이클을 실행한다.즉, 기본적인 연산을 1초에 4800만번 시행한다는 이야기다.시스템 클럭으로 타이머 만들기 예시// MCU가 48MHz로 동작할 경우// 1밀리초(ms)를 만들기 위해 필요한 클럭 사이클uint32_t cycles_for_1ms = SystemCoreClock / 1000; // 48000mcu가 1초에 48mhz로 발진 하므로, 1milli 초를 만들기 위해서 0.001을 곱해준다. 48,000,000 * 0.001 = 48,000 mhz따라서 48,000 mhz 마다 1milli 초가 됨을 알 수 있다.이를 활용해서 fo.. 2025. 1. 8.
[펌웨어] if와 #if의 가장 큰 차이는 "실행 시점"이다. #if는 전처리 단계에서 처리된다.컴파일 전에 처리.조건이 거짓이면 해당 코드는 아예 컴파일 되지 않는다.결과적으로 실행 파일의 크기가 줄어든다.실행 시 추가적인 연산 부하가 없다.일반 if는 프로그램 실행 중에 처리된다.코드가 모두 컴파일됨.실행 시점에 조건을 확인조건문 처리를 위한 연산이 필요실행 파일 크기가 더 커짐#if, #else, #endif 는 한 세트이다.#if (조건) //조건이 참일때 실행#else //조건이 거짓일때 실행#endif //#if조건문은 반드시 #endif로 끝나야함.else는 제외될 수 있겠지만,#if로 시작했다면 #endif로 반드시 끝나야한다. 2025. 1. 8.
[펌웨어] FLASH 메모리와 SRAM 이란? 언젠가 한번 보게 되는 메모리 주소개발중 부트로더나 디버그를 진행하다보면, 메모리 주소와 사이즈를 종종 접하게 된다. FLASH 메모리와 SRAMFlash 메모리- 비휘발성 메모리로 (전원이 꺼져도 데이터가 유지) 된다.- 프로그램 코드, 상수, 설정값 등이 저장된다.- 프로그래밍을 통해서만 내용 변경이 가능하다.- 읽기는 빠르지만 쓰기는 상대적으로 느리다.- stm32 에서는 주소가 0x08000000 부터 시작한다. SRAM (Static Random Access Memory)- 휘발성 메모리 (전원이 꺼지면 데이터 삭제)- 실행 중인 프로그램의 변수들이 저장- 읽기 쓰기 매우 빠름- 프로그램 실행 중 자유롭게 데이터 변경 가능- stm32에서는 주소가 0x20000000 부터 시작. SRAM 예시우.. 2025. 1. 8.
임베디드의 c언어 사용시 volatile을 어떻게 사용해야 할까? - 요약 volatile은 미국단어입니다. 그러니 많은 나라의 개발자들이 어색해하는걸 이해합니다. 😒이 단어는 오래전 부터 존재했고, 임베디드에 자주 사용됩니다.다음의 코드를 예로 들어 보겠습니다.a = x;b = x;이 코드는 컴파일러에서 다음과 같이 변형됩니다. = x;a = ;b = ;레지스터에 복사되고 복사본은 후속 작업에 사용됩니다.일반적으로 x가 특별하지 않다면 괜찮지만, 예상치 모한 방법으로 변경될 수 있을때 위험합니다.특히 i/o는 값이 실시간으로 변할 수 있습니다. 따라서 x를 휘발성으로 선언해야합니다.선언은 앞에 휘발성이라는 뜻의 volatile을 붙이면 됩니다.volatile int* pi1 = 0;volatile int* pi2 = 0;위의 코드는 구문적으로는 문제가 없습니다. 단 멀티스레.. 2025. 1. 7.