분류 전체보기 272

Win32 문자집합 설정

안녕하세요. 오늘은 Win32 유니코드에 대해 알아보겠습니다 문자열을 저장할때 일반적으로 char s[] = "wowon"을 저장하면 아래처럼 공간이 할당됩니다 1바이트에 영문자 1개가 저장됩니다. 한글을 저장할때 2byte를 사용하고 영문자를 저장할때 1byte가 저장된다고 해보겠습니다(UTF-16) 두가지 방식으로 "원원 won"을 저장해보겠습니다 멀티 바이트 문자 집합(MBCS) 한글은 2byte, 영문자는 1byte로 저장됩니다 유니코드 문자 집합 한글이던 영문자던 2byte로 저장됩니다. c언어에서 유니코드를 위한 자료형이 있습니다. wchar_t이고 크기는 2바이트입니다. 멀티 바이트의 장점은 낭비되는 공간이 없습니다. 단점은 글자의 개수와 공간의 크기가 일치하지 않는 것입니다. 유니코드의 장..

아스키코드,EUC-KR,유니코드,UTF-8알아보기

안녕하세요. 오늘은 컴퓨터가 문자를 표현하는 방법에 대해 알아보겠습니다. 사람이 사용하는 문자를 컴퓨터는 0과 1의 조합으로 변환해서 인식합니다. 이런 과정을 인코딩이라고 부릅니다. [문자 => 0,1] 로 변환 : 인코딩 [0,1 => 문자] 로 변환 : 디코딩 인코딩에는 다양한 방법이 있습니다. 1. 아스키코드(ASCII CODE) 아스키코드는 7비트로 이루어져있고 총 128개까지 표현이 가능합니다. 아스키 테이블입니다. 0~31번까지는 제어문자입니다. 예를들어 0번은 NULL이고 10번은 Line Feed입니다. 일반적으로 C언에어서 아스키코드 사용이 가능합니다. 아스키테이블을 보면 A는 65입니다 #include int main() { char c = 'A'; char c2 = 65; printf..

테라텀(Tera term) 매크로 알아보기

안녕하세요 오늘은 테라텀(Tera term) 매크로에 대해 알아보겠습니다. 시리얼통신을 사용할때 매크로를 사용하면 손쉽게 커맨드를 전달할 수도있고 맞나 판단 할 수도있습니다. 테라텀의 매크로는 TTL 확장자를 사용하고 Tera Term Language의 줄임말입니다. 테라텀에서 하는 명령어 입력/출력/판단을 자동으로 매크로를 만들어서 사용할 수 있습니다. 테라텀 매크로의 커맨드들은 아래의 사이트에 자세히 나와있습니다. 커맨드들 중에서 자주 사용하는 커맨드를 알아보겠습니다. 자세한 사항과 다른 기능들은 아래의 사이트에서 찾아서 사용하면 됩니다. https://ttssh2.osdn.jp/manual/4/en/macro/command/ UART로 테스트하고 RX랑 TX를 연결해서 보내고 바로 받게 했습니다. ..

뽑기 슬라임LED 알아보기

안녕하세요. 오늘은 문방구같은곳 앞에서 뽑을수 있는 슬라임LED에 대해 알아보겠습니다. 가격은 1,000원이였고 다양한 LED장난감 디자인에 100%나오는 뽑기였습니다. 아래와 같이 LED가 깜빡입니다. * 구성품 부품은 단순하게 1.5V/30mAh 배터리3개 , LED, 스위치, 케이스가 있습니다. * 사용시간 전원의 크기는 4.5V/30mAh입니다. 전원 4.5V에서 소비전류를 측정해 보니 대략 10mA정도 나옵니다. 그럼 대략 3시간정도 사용 가능합니다. (사용하면서 배터리전압이 낮아짐에따라 소비전류가 변하는 건 고려하지 않았습니다) * LED 점멸 일반적으로 LED에 전원을 유지하면 위의 LED와 다르게 깜빡이지 않고 특정한 색으로 켜져 있습니다. 그러나 위와 같이 전원을 넣으면 색이 변하는 LE..

회로이론/활용 2023.05.01

ARM 명령어 아키텍처

안녕하세요. 오늘은 ARM 명령어 아키텍처에 대해 알아보겠습니다 * Instruction Set Architecture(ISA) 소프트웨어와 하드웨어 사이에서 합의된 규칙입니다. 명령어 집합, 명령어 형식을 지정합니다. 컴파일러 개발자는 이러한 규칙을 가지고 C와같은 고급언어에서 기계어로 번역하는 컴파일러를 설계합니다. 하드웨어디자이너는 이러한 규칙을 따라 프로세서를 만듭니다. ISA에는 RISC(Reduced Instruction Set Computer)와 CISC(Complexe Instruction Set Computer) 두가지 범주로 구분할 수 있습니다. 모바일, 임베디드에서는 주로 RISC를 사용하고 데스크탑, 서버에서 사용되는 x86은 CISC를 사용합니다. RISC프로세서는 일반적으로 간단..

MCU지식 2023.04.23

FreeRTOS-undefined reference to `vTaskList'에러

안녕하세요. 오늘은 FreeRTOS의 vTaskList함수를 사용하려할때 발생하는 undefined reference to `vTaskList' 에러에 대해 알아보겠습니다. vTaskList함수를 사용하려면 vTaskList함수를 사용할수있게 매크로를 설정해야합니다. FreeRTOS.h에 있는 configUSE_TRACE_FACILITY와 configUSE_STATS_FORMATTING_FUNCTIONS을 1로 설정하면 됩니다. (https://www.freertos.org/a00021.html) * vTaskList함수 사용할수있게 설정 #define configUSE_STATS_FORMATTING_FUNCTIONS 1 #define configUSE_TRACE_FACILITY 1 * 태스크생성 if ..

FreeRTOS 2023.04.02

엔디안이란?(빅엔디안, 리틀엔디안)

안녕하세요 오늘은 엔디안에 대해 알아보겠습니다. 엔디안이란 데이터에 여러 바이트가 있는 경우 바이트 순서를 정하는 규칙입니다. 빅 엔디안(big endian)과 리틀 엔디안(little endian)두가지 방법이 있습니다. 리틀 엔디안은 숫자의 하위 바이트가 메모리의 최하위 주소에 저장되고 상위 바이트가 최상위 주소에 저장됨을 의미합니다. 빅 엔디안은 숫자의 상위 바이트가 최하위 주소에 저장되고 하위 바이트가 최상위 주소에 저장됨을 의미합니다. STM32는 일반적으로 리틀 엔디안 형식입니다 실제로 빌드된 STM32의 메모리값을 보겠습니다. 볼 메모리 값은 _estack입니다 _estack은 ORIGIN(RAM) + LENGTH(RAM)이므로 0x20005000입니다. .bin파일을 HxD에디터로 열어봤습..

MCU지식 2023.03.26

ATMEGA128을 STM32코드 형식(HAL 라이브러리) 으로 바꾸기

안녕하세요. 오늘은 ATMEGA128코드를 STM32 코드 형식(HAL 라이브러리)으로 바꿔보겠습니다. 먼저 "아트메가/이론 ATMEGA128 주솟값으로 제어하기" 글 참고바랍니다. https://wowon.tistory.com/280 GPIO A,B,C출력/입력만 테스트 해보겠습니다. 먼저 제어할 레지스터가 PORT, DDR, PIN입니다. 데이터들은 1바이트씩이고 PIN다음에 DDR이 나오고 다음에 PORT가 나옵니다. 먼저 GPIO 주소의 시작점을 define해줍니다. #define GPIOA_BASE (0x39) #define GPIOB_BASE (0x36) #define GPIOC_BASE (0x33) 그리고나서 PIN,DDR,PORT 구조체를 만듭니다 typedef struct { volati..

아트메가/이론 2023.03.01

ATMEGA128 주솟값으로 제어하기

안녕하세요. 오늘은 ATMEGA128의 PORTA를 데이터시트에 나와있는 주솟값으로 제어해보겠습니다. 주솟값으로 제어하는 테스트를 하는 이유는 다른 32bit mcu를 사용할 때 (STM,NXP등등) 주솟값으로 제어하는 방법을 알면 좋아서 먼저 비교적 간단한 8bit mcu인 ATMEGA로 해보겠습니다. 목표는 DDRA와 PORTA를 사용하지 않고 데이터시트에 나와있는 주소로 DDRA와 PORTA를 제어하는 것입니다. 먼저 DDRA 선언을 따라가보겠습니다. #define DDRA_SFR_IO8(0x1A) #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *..

아트메가/이론 2023.02.25