http://terms.naver.com/entry.nhn?docId=3532979 디자인 패턴중에 매우 사용도가 높고 매우 효율적인 State 패턴은 공부를 하다보면 좀 헷갈리는 디자인 패턴입니다. 대부분의 패턴은 if 문과 같이, 유지보수나 버그를 양산하기 쉬운 코드를 없애고 쉬운 확장을 목적으로 구조를 만듭니다. State 패턴은 각 상태가 바뀔 때 마다 늘어나는 if문을 없애는 패턴입니다. 즉, 상태들 끼리 서로의 상태를 바꿔가며 동작하기 때문에 유지보수도 쉽고 확장도 용이합니다. 그러나 상태변화에 대한 명확한 이해와 구조를 어떻게 할지에 대한 고민이 필요합니다. 다소 생소하고 복잡하게 보일지 모르지만 한번 구현해 보도록 하겠습니다. 예제는 단순한 Light를 On/Off하는 기능을 State 패..
IAR 9.20.1 버전 이후 에 overriding 되어 있는 fputc() 은 더 이상 동작하지 않습니다. 자세한 내용은 아래 URL을 참조하시기 바랍니다. https://www.iar.com/kr/knowledge/support/technical-notes/compiler/migrating-projects-with-the-custom-fputc-function/ 사용자 정의 fputc() 함수로 프로젝트 마이그레이션 사용자 정의 fputc() 함수로 프로젝트 마이그레이션 기술노트 220216 아키텍처: Arm 컴포넌트: compiler 업데이트: 2022-07-05 오전 12:10 개요 사용자 정의 함수 fputc()가 있는 일부 프로젝트가 EWARM 9.20.1 이 www.iar.com 위의 Ap..
CubeIDE에서 Formatter를 이용하여, Code를 일관성 있게 만들어 봅시다. 아무런 설정을 하지 않을 경우 들여쓰기는 Tab, Braces는 Same line으로 되어 있습니다. 취향이기 한데, 저는 아래와 같이 세팅합니다. 1. 들여쓰기 - Spaces only indentation size - 2 tab size - 2 들여쓰기를 Tab으로 할 경우에, 다른 사람이 제코드를 보면 조금 다르게 보일 수 있습니다. 그건 Tab의 사이즈가 서로 다르기 때문에 나타나는 현상입니다. Spaces only 로 두면 들여쓰기는 항상 Space로 구성되어 있어 어디서나 동일한 모습으로 보입니다. (심지어 Word에서도 일관성있게 보입니다.) 들여쓰기 size는 2로 구성했습니다. 아무래도 가로로 ..
this는 객체지향 언어에서 class instance 자신을 나타냅니다. 자기 자신이기 때문에 별도의 이름을 갖는 다는 것도 좀 이상하기 때문에 this라는 키워드는 정말 잘 정한 것 같습니다. C언어 에서 this라는 것을 활용해서 사용해보도록 하겠습니다. 다음과 같은 main.c 코드가 있습니다. uart 드라이버 포인터를 얻어와 uart를 open하고 read, write, close하는 일을 절차적으로 진행하고 있습니다. /* main.c */ void main(void) { driver_t *uart = set_uart(); char value; uart->open(); uart->read(0, &value); uart->write(0, &value, 1); uart->close(); } 사용..
Java 같은 객체지향 언어에서 객체지향, 디자인패턴, Interface을 빼놓고는 설명할게 별로 없습니다. 이중 Interface는 객체지향의 근간이 되는 패턴으로 Interface를 이용해 언제든지 교체 가능한 모듈 형태의 프로그래밍과 더불어 외부 프로그램을 적절하게 통제 할 수 있습니다. 이러한 Interface의 필요성에 대해서는 따로 설명하지 않겠습니다. 우리는 C언어로 Interface를 만들어 보겠습니다. 이번에 만들 Interface는 UART입니다. UART는 MCU와 외부 Device간의 시리얼 통신으로 많이 사용됩니다. 예를 들면 MCU+GPS Module, MCU+RS232(PC)등에서 사용되며 Interface를 설명하기에 적합합니다. 아래 코드는 UART Interface의 원형..
C언어로 자바의 Class를 만들 수 있을까요? 완벽한 Class를 만들 수는 없지만 비슷하게 만들 수 있습니다. 기능적으로는 Class와 동일한 역할을 할 수 있지만 동적으로 할당/해제에는 제한이 있습니다. C언어에서 typedef와 structure그리고 함수 포인터를 이용하면 class와 같은 기능을 할 수 있습니다. 왜 C언어로 Class를 만드는 다소 복잡하고 이해하기 쉽지 않은 구조를 만드냐고 물어보신다면, 우리가 앞으로 만들 디자인 패턴에서 반드시 사용되는 기법이기 때문입니다. 즉, 좀 더 효율적인 프로그램을 가능하게 합니다. 이번 예제는 다소 극단적인 C언어 Class입니다. 실제로 이렇게까지 사용하는 경우는 별로 없을 것 같습니다만 여러분들이 보시기에 알고 있거나 더 좋은 방법이 있다며 ..
"8비트 가격으로 32비트 MCU를 구매할 수 있는 기회를 놓치지 마세요. 곧 신제품이 출시됩니다. " 위의 문구처럼 극강의 가성비 32비트 MCU가 나온다. Your next 8-bit MCU is a 32-bit. It’s called STM32C0! - STMicroelectronics 다음 8비트 MCU는 32비트입니다. STM32C0이라고 합니다. 그리고 시리즈가 확장되고 있습니다. ST의 가장 저렴한 32비트 마이크로컨트롤러인 STM32C0은 모든 개발자가 32비트 기능에 액세스할 수 있도록 해줍니다. 현재 STM32C0 시리즈는 16~32KB의 플래시 메모리와 8~48핀 범위의 패키지를 제공하는 마이크로컨트롤러를 제공합니다. 2024년에 STM32C0은 최대 64핀 패키지로 제공되는 최대 2..
Cortex®-M7 프로세서의 MPU(메모리 보호 장치)를 사용하면 영역별로 Level 1(L1) 캐시 속성(Attributes)을 수정할 수 있습니다. 캐시는 캐시 제어 레지스터에 의해 전역적으로 제어되지만 MPU는 캐시 모드와 영역에 대한 액세스를 캐시할 수 있는지 여부를 지정할 수 있습니다. 경우에 따라 캐시된 시스템은 공유 데이터를 처리할 때 코어와 주 메모리 간의 데이터 일관성을 보장해야 합니다. 이 애플리케이션 노트는 레벨 1 캐시 동작을 설명하고 L1 캐시를 사용할 때 STM32F7 시리즈 및 STM32H7 시리즈에서 데이터 일관성을 보장하는 방법을 보여주는 예를 제공합니다. MPU 및 메모리 유형 및 캐시 정책에 따라 메모리 속성을 설정하는 방법에 대한 자세한 내용은 http://w..