본문 바로가기
윈도우시스템프로그래밍_02.윈도우에서의 문자셋(SBCS/MBCS/WBCS)(아스키코드,유니코드 등) 오늘은 윈도우에서사용하는 문자셋관련하여 블로그를 작성하려고합니다.참고로 윤성우저자님의 윈도우시스템프로그래밍 2장을 공하고 작성했습니다. 문자셋은 크게 3가지로 나눌수 있습니다. 1. SBCS(Single Byte Character Set) - 문자를 표현하는데 1바이트만 사용하며 대표적인 예로 아스키코드가 있습니다.2. MBCS(Multi Byte Character Set) - 문자를 표현하는데 1바이트와 2바이트를 모두 사용하며 대표적으로 한글은 2바이트 영어는 1바이트를 사용하는 우리가 C언어를 공부하면서 사용하는 char 이 있습니다. 예제1을 보면 ABC는 각각 1바이트씩 3바이트 한글은 2바이트씩 4바이트를 사용합는 것을 볼 수 있습니다. 3. WBCS(Wide Byte Character Set.. 2017. 1. 18.
윈도우시스템프로그래밍_01.컴퓨터구조의 이해 컴퓨터구조에서 하드웨어 구성 컴퓨터 구조의 하드웨어 구성은 크게 CPU, 메인메모리, 버스IO로 구성되어있습니다. 아래그림을 보면서 5단계로 설명드리겠습니다. 1.하드저장된 실행파일을 실행시키기 위해 버스IO를 거쳐 메인메모리에 넣습니다. 2. 그리고 메인메모리에 저장된 실행파일의 명령어들을 버스IO를 통해 CPU로 옮깁니다. ( Fetch ) 3. 메인메모리에서 받은 명령어를 CPU의 레지스터에 담고 하나씩꺼내서 컨트롤유닛에게 줍니다. 4. 컨트롤 유닛은 이 명령어가 무엇인지 해석하고 ALU에게 그에 해당하는 연산처리를 시킵니다. ( Decode ) 5. ALU는 연산을 처리합니다. ( Excution ) 위의 5단계를 하나 하나 해석해보겠습니다. 1.하드저장된 실행파일을 실행시키기 위해 버스IO를 거.. 2017. 1. 16.
ARM데이터시트_SysTick Timer 레지스터(STK_CTRL/STK_LOAD/STK_VAL) SysTick Timer(STK)란 24비트 시스템 타이머로 다운카운트되어 0이될때 인터럽트가 발생합니다. STK_CTRL래자스터입니다. STK_CTRL레지스터는 설정하는 레지스터입니다. 16비트에 있는 COUNT FLAG 는 24비트 타이머가 1씩 감소하다가 0이되면 1을 리턴 0이아닌 값일때는 0을 리턴합니다. 2번비트인 CLKSOURCE는 systick의 Clock source를 칩의것을 그대로 사용할것인지 8로나눠서 사용할 것인지 설정하는 비트입니다. 즉 0으로 설정하면 AHB/8 1로 설정하면 AHB 클락을 그대로 사용합니다. 1번비트인 TICKINT 는 24비트 타이머가 1씩 감소하다가 0이되면 인터럽트 요청을 할 것인지 말것인지 설정합니다. 0으로 설정하면 카운트가0이되도 인터럽트를 발생하지.. 2016. 12. 18.
ARM데이터시트_Systick 우선순위 및 발생 시점 Systick exception는 0이 될때 exception이 발생 한다. 우선순위는 15번으로 사용자가 지정하여 사용하는 인터럽트(16~83번)보다 높다. 2016. 12. 18.
ARM실습_SPL를 이용하여 GPIO를 해보자 #include "stm32f10x.h" void main(void) { // GPIO구조체 선언 GPIO_InitTypeDef GPIO_InitStructure; // APB2_GPIOF를 ENABLE 참고 http://munshark.tistory.com/100 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); /* GPIOF포트의 6번핀과 7번핀을 50MHz의 속도와 push-pull로 설정 후 초기화 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPI.. 2016. 12. 14.
ARM데이터시트_GPIOx_IDR 입력(input)제어 GPIOx_IDR 레지스터를 이용해 INPUT 제어를 해보려고합니다. 이번에 waveshare사의 Open103Z Standard, STM32F1 Development Board를 사용해서 (stm32f103ZET6) 해보려고합니다. 회로도를 보면 PG6에 스위치가 연결된걸볼 수 있습니다. 따라서 PORTG의 6번핀을 입력으로 받아와야합니다. INPUT 제어를 하기위해서는 먼저 핀을 INPUT으로 사용할건지 OUTPUT으로 사용할건지를 결정해야하는데 이는 GPIOx_CRL/GPIOx_CRH 레지스터를 이용해서 결정할 수 있습니다. 6번핀은 GPIOx_CRL을 설정해야하며 아래처럼 INPUT PULL-UP은 CFN1-1/ CNF-0/MODE1-0/MODE0-0 로 설정해야 합니다. 참고) http://mu.. 2016. 12. 11.
ARM실습_GPIOx_IDR 레지스터를 이용한 스위치 입력 LED출력하는 실습은 다음을 참고하기바라며 http://munshark.tistory.com/97 이번에는 GPIOx_IDR 레지스터를 이용해 스위치입력을 받아 LED를 ON/OFF하는 실습니다. ------------------------------코딩------------------------- #include "stm32f10x.h" int main(void) { RCC->APB2ENR = 0x00000180; // APB2 PORTF/PORTG 활성화 // APB2ENR설정참고->http://munshark.tistory.com/100 GPIOF->CRL = 0x30000000; // 출력포트 설정 GPIOG->CRL = 0x08000000; // 입력포트 설정 // GPIOx_CRL설정참고 ->.. 2016. 12. 11.
ARM데이터시트_GPIOx_BSRR/GPIOx_BRR GPIO출력제어는 ODR레지스터와 BSRR레지스터 두가지가 있다. ODR레지스터는 전체비트를 SET또는 RESET제어하는 반면 BSRR레지스터는 각각의 비트를 SET/RESET제어 한다. (BRR레지스터는 각각의 비트를 RESET제어) ODR레지스터는 이전 포스팅을 참고하고 http://munshark.tistory.com/99 이번에는 GPIOx_BSRR/GPIOx_BRR레지스터에대해 알아보자 1. GPIOx_BSRR GPIOx_BSRR 레지스터의 0~15비트를 1로 설정하면 0~15핀을 SET해준다. 예를들어 아래와 같이 설정하면 GPIOx->BSRR = 0x00000002; 1번핀을 SET하겠다는 것이다. GPIOx_BSRR 레지스터의 16~31비트를 1로 설정하면 0~15핀을 RESET해준다. 예.. 2016. 12. 8.
ARM데이터시트_RCC_APB2RSTR ARM은 모든 포트에 클럭을 공급해주는 것이아니고 지정해준 포트에 클럭을 공급해주어 필요한 포트만 열어서 사용할 수 있도록 되어있다. 이는 모든 포트에 클럭을 공급하는 것보다 상당히 저전력으로 운영할 수 있으나 개발자입장에서는 고려해야 할 사항이 많아진다. 우리는 PC13을 사용해야하기 때문에 GPIOC포트를 열어주어야한다. 아래그림에서보면 GPIOC포트를 사용하기 위해서는 APB2버스를 통해 클락을 공급해야한다는 것을 알수 있다. APB2에 클럭을 공급하려면 RCC_APB2RSTR레지스터를 설정해주어야 한다. 이 레지스터는 16~31번BIT는 사용하지 않고 0~15번 비트만사용하며 GPIOC에 클럭을 공급하기위해서는 4번BIT를 1로 설정해주면된다. 즉, RCC_APB2RSTR레지스터를 0x000000.. 2016. 12. 4.
ARM데이터시트_ODR레지스터 ODR레지스터는 OUT로 설정된 PIN의 출력여부를 결정하는 레지스터이다. 16~31번비트는사용되지 않으며, 0~15번비트만 사용한다. PC13핀의 출력제어를 해보자. 해당비트가 1이면 출력되고,해당비트가 0이면 출력되지 않는다. 따라서 PC13을 제어하려면 13번 BIT를 1또는 0으로 해주면된다. 0x00002000 로할경우 출력 0x00002000 로할경우 출력되지 않는다. 실제 아래와 같이 코딩해주면 PC13핀의 LED가 깜빡깜빡거린다. while(1) { GPIOC->ODR ^= 0x00002000; for( uint32_t i = 0 ; i ODR = 0x00000000; for( uint32_t i = 0 ; i < 7.. 2016. 12. 4.