반응형

출처: http://blog.daum.net/bluebread/2

분명히 이걸 아는 사람이 있을텐데 올려놓은 사람은 없군요.



설정방법
 
1. Project의 base을 open한다.
    DoNoting() 이라는 macro를 만들어 추가한다. 진짜로 아무일도 하지 않는 걸로.
macro DoNothing()
{
}
2. Option > Key Assignment 을 선택한다.
 

 


 
3. Macro: DoNothing 선택후에 Assign New Key를 누르고 다음의 키조합을 입력한다.
Shift + 한/영 (황당한 조합이지만 먹힌다.)
4. 화면에 "shift+ " 로 표시되면 들어간 것이다.
 
5. 완료!!

이후로 아무 것도 해줄 필요가 없다.

그냥 메모장 쓰듯이 한글입력하면 된다. 쌍자음 그냥 입력해도 안 깨진다.

 
 
주의
"어 안되잖아?" 하시는 분이 있을까봐...
 
txt 파일에서 시험해보면 확실히 아무런 문제가 없는데, c 파일에서는 커멘트나 따옴표 블럭 밖에서는 한글이 깨진것처럼 보일 것이다.
정확한 이유는 알수 없지만 깨진게 아니고 잘못 보여주는 것이다. (syntax highlight 때문이라고 생각한다.)


아래 그림에서 보듯이, 마우스로 블럭선택해보면 멀쩡한 글자들이 보인다.

그리고 커멘트내에서는 안 깨져 보인다.

 c 파일에서 커멘트나 따옴표 외부에 한글쓸 일은 어차피 없으니 안심하자.

 


 
배경지식
 
Source Insight 로 한글입력시 shift 때문에 깨진 파일을 헥사 에디터로 보면 0xe5가 들어가면서 한글이 깨진다는 것을 알 수 있다.
그런데 0xe5가 뭐냐하면...
 
VK_PROCESSKEY (0xE5)
Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
 
그니까 소스인사이트는 IME에서 내려오는 virtual key code중에서 ctrl 이나 alt 같은 실제로 문자입력이 아닌 값을 유효한 문자인 줄 알고 처리하고 있는 것이다.
 

그래서 이걸 가로챌 방법을 생각하다가 macro hot key로 assign 해보니까.. 통했다.


be happy!!

반응형

CCITT(지금은 ITU-T)에서 정한 통신 기준의 하나인 것 같다.

ITU-T (International Telecommunications Union - Telecommunication Standardization Sector)http://www.itu.int/net/home/index.aspx

ITU-T[아이티유 티]는 통신장비 및 시스템의 조합표준을 육성하기 위한 제일의 세계적인 조직체이다. 전에는 CCITT로 알려져 있었으며, 스위스 제네바에 본부를 두고 있다.

 

참고 싸이트 :
http://www.menie.org/georges/embedded
http://blog.naver.com/elkiss?Redirect=Log&logNo=140047858434
http://tong.nate.com/cadmus4u/46246280
http://www.sanity-free.org/133/crc_16_ccitt_in_csharp.html
http://cafe.naver.com/iwillgosu.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=153

'통신 > 에러 체크' 카테고리의 다른 글

STOP BIT  (1) 2009.05.12
에러검출(parity bit, checksum, CRC)  (1) 2009.05.12
반응형

'language > C' 카테고리의 다른 글

extern  (0) 2009.07.02
BCD(binary Coded Decimal)  (0) 2009.06.23
continue 와 break 차이  (0) 2009.05.13
const와 static  (0) 2009.05.05
#define와 const 차이점  (1) 2009.05.05
반응형
반응형

for( i = 0 ; i < 7 ; ++i )

{   

    if( i == 3 )     continue;

    if( i == 5 )     break;

    printf( "%d\n", i )

}

 

i = 0 : 0 출력

i = 1 : 1 출력

i = 2 : 2 출력

i = 3 : continue를 수행하므로, 출력없이 가장 위로 올라가서 ++i에 의해 1이 증가

i = 4 : 4 출력

i = 5 : break를 수행하므로, for 문 탈출

 

그래서 결과적으로 출력은

0

1

2

4

 

'language > C' 카테고리의 다른 글

BCD(binary Coded Decimal)  (0) 2009.06.23
gcc설치하여 vim으로 편집하기  (0) 2009.05.19
const와 static  (0) 2009.05.05
#define와 const 차이점  (1) 2009.05.05
#ifdef와 defined() 차이점  (0) 2009.05.05
반응형

Asynchronous serial communication

From Wikipedia, the free encyclopedia

Jump to: navigation, search

Asynchronous serial communication describes an asynchronous, serial transmission protocol in which a start signal is sent prior to each byte, character or code word and a stop signal is sent after each code word. The start signal serves to prepare the receiving mechanism for the reception and registration of a symbol and the stop signal serves to bring the receiving mechanism to rest in preparation for the reception of the next symbol. A common kind of start-stop transmission is ASCII over RS-232, for example for use in teletypewriter operation.

Image:Rs232 8n1.PNG

In the diagram, a start bit is sent, followed by eight data bits, no parity bit and one "stop bit", for a 10-bit character frame. The number of data and formatting bits, and the transmission speed, must be pre-agreed by the communicating parties.

The "stop bit" is actually a "stop period"; the stop period of the transmitter may be arbitrarily long. It cannot be shorter than a specified amount, usually 1 to 2 bit times. The receiver requires a shorter stop period than the transmitter. At the end of each character, the receiver stops briefly to wait for the next start bit. It is this difference which keeps the transmitter and receiver in synchronism.


'통신 > 에러 체크' 카테고리의 다른 글

CRC16 CHECK  (0) 2009.05.25
에러검출(parity bit, checksum, CRC)  (1) 2009.05.12
반응형

3. 에러 검출

 

    데이터가 전송될 때 전송되는 데이터는 근본적으로 에러가 발생한다. 따라서 정확한 데이터 전송을 위해서는 에러를 검출하고 교정하는 과정이 필수적으로 수반되어야하며 이것은 전송하고자 하는 데이터에 얼마간의 정보를 추가로 전송하여 에러를 교정하며 가장 간단한 방법으로는 parity bit가 있다. Packet을 송신하는 경우에도 패킷의 에러를 보완하는 수단이 필요한데 대표적인 방법으로는 체크섬(checksum)CRC(Cyclic Redundancy Checks)가 있다.

 

(a) parity bit  

    Parity bit는 전송하고자하는 데이터의 각 문자에 1 비트를 더하여 전송하는 방법으로 2가지 종류의 parity bit가 있다. even parity는 전체 bit에서 1의 개수가 짝수가 되도록 parity bit을 정하는 것인데 예를 들어 만약 데이터 bit에서 1의 개수가 홀수이면 parity bit 1로 정한다. Odd parity는 전체 bit에서 1의 개수가 홀수가 되도록 parity bit을 정하는 방법이다. 이렇게 parity bit를 정하여 데이터를 송신하면 수신 측에서는 수신된 데이터의 전체 bit를 계산하여 parity bit를 다시 계산할 수 있음으로 데이터에 에러 발생 여부를 알 수 있다. 그러나 parity bit는 에러 발생 여부만 알 수 있지 에러를 수정할 수는 없다.

 

(b) Checksum

    Checksum packet 속의 하나의 field로 구성하며 데이터를 이진수(binary number)의 연속으로 간주하여 그 이진수의 합을 계산하는 방법이다. 예를 들어 16 bits checksum을 사용하는 경우 데이터를 16 bits씩 나누어 16진수로 표현한 다음 그 합을 계산하여 16으로 나눈 나머지에 해당되는 값 checksum으로 사용하는 방법이다. 이 방법의 장점은 우선 checksum의 크기가 작아 checksum 1개로 packet 전체를 조사할 수 있음으로 오버헤드를 줄일 수 있고 덧셈 연산만을 수행함으로 계산이 용이하다.  

  

 
    그러나 checksum은 발생 가능한 모든 에러를 검출할 수 없다는 단점이 있다. 예를 들어 0001001000110001로 표현되는 데이터를 송신하는 도중 0011000000010011로 변형된 경우, 두 경우의 checksum 4 bits씩 나누어 계산하면 같은 값을 가짐으로 에러를 검출할 수 없다.

 

 (c) CRC

    에러 검출의 일반적인 과제는 packet에 보다 적은 양의 정보를 추가하여 보다 많은 에러를 검출하고자 하는 것으로 checksum 보다 많이 사용되는 방법으로 CRC가 있다. CRC shift register라는 전기회로를 사용하여 각 비트에 "Exclusive OR" 연산을 위한 게이트를 설치하여 CRC 값을 구하는 것으로 계산이 빠르다는 장점이 있다. 실제 CRC 구현은 16-bit 혹은 32-bit CRC를 사용한다.

 [출처] 에러검출(parity bit, checksum, CRC)|작성자 도래지오

'통신 > 에러 체크' 카테고리의 다른 글

CRC16 CHECK  (0) 2009.05.25
STOP BIT  (1) 2009.05.12
반응형

질문자 인사 좋은 답변 감사합니다. 많은 도움이 되었습니다.

const - [기본적으로] 무엇이든 상수화 시켜준다!  

int ar[5]={1,2,3,4,5};

 

const int *ptr=&ar[0]; //int를 고정(값 변경 불가 주소 변경 가능)
pi2++;                // 포인터가 다른 대상체를 가리킬 수 있다.
*pi2=0;               // 에러 : 대상체가 상수이므로 값을 변경할 수 없다.
 
int * const ptr=&ar[0];//ptr(포인터)를 고정(값 변경 가능. 주소 변경 불가)
pi3++;                // 에러 : 포인터가 다른 대상체를 가리킬 수 없다.
*pi3=0;               // 대상체의 값을 변경할 수 있다.
 
const int * const ptr=&ar[0];//int와 ptr을 고정(값 변경 불가 주소 변경 불가)
pi4++;                // 에러 : 포인터가 다른 대상체를 가리킬 수 없다.
*pi4=0;               // 에러 : 대상체가 상수이므로 변경할 수 없다.

 

 

[ 요약, 정리]

1. const는 자신의 오른쪽 것에 적용된다.

2. 오른쪽에 적용대상이 없으면 왼쪽에 적용한다.

 

여기서 말하는 적용대상이란 * 또는 형(type)임.

 

 

------------------------------------------------------------------------------

 

2) static (정적변수)

 

    - 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시

      돌아왔을 때 이전 값을 다시 이용 가능

    - 초기화를 생략하면 0으로 자동 초기화

    - 힙(Heap)에 메모리 할당

    - 선언된 위치에 따라 다음과 같이 구분됨

        . 내부정적변수 : 함수 내부에서 선언되며, 함수 내부에서만 사용이 가능. 하지만,

                                       프로그램이 실행되는 동안 존재

        . 외부정적변수 : 함수 외부에서 선언되며, 다른 소스파일에서는 참조할 수 없음

 

== 정리하면

 

static은 함수 또는 파일에서 값을 보존할 필요가 있을 때(예를 들어 어떤 함수를 몇 번 호출했는지 알고 싶을 때 static 변수로 하나 선언해서 호출될 때마다 1씩 더해주면 Counter를 쉽게 만들 수 있습니다) 사용됨.

: 내 블러그 ㅋㅋㅋ

의견 1

'language > C' 카테고리의 다른 글

BCD(binary Coded Decimal)  (0) 2009.06.23
gcc설치하여 vim으로 편집하기  (0) 2009.05.19
continue 와 break 차이  (0) 2009.05.13
#define와 const 차이점  (1) 2009.05.05
#ifdef와 defined() 차이점  (0) 2009.05.05
반응형

'language > C' 카테고리의 다른 글

BCD(binary Coded Decimal)  (0) 2009.06.23
gcc설치하여 vim으로 편집하기  (0) 2009.05.19
continue 와 break 차이  (0) 2009.05.13
const와 static  (0) 2009.05.05
#ifdef와 defined() 차이점  (0) 2009.05.05
반응형

#ifdef 는 정의되있는지를 테스트 하므로, 한번에 여러개를

사용할 수는 없다. 형식이 #ifdef name 처럼,

하나의 토큰이 되어야한다.

여러개가 정의되있는지 테스트 하기위해서는
#if defined(MACRO1) || defined(MACRO2)처럼 사용.

단, #if는 ||로 중첩해서 사용할 수 있다.
형식이, #if expression이므로, C표현이 올수 있다.

#if MACRO1 || MACRO2 처럼 사용해도 된다.

 #if !defined() 의 의미는 #ifndef 와 같다. (if not define)

()안의 내용이 정의되어 있지 않으면 그 아래부분 (#endif까지)을 유효한 소스코드로 인식하고 컴파일 시 적용하라는 의미다.

 그런데 그 괄호안의 부분을 찾을 수가 없다는 것은

EXCLUDE_PGX_SUPPORT 가 아무데도 define되지 않았음을 의미

 정의되어 있지 않으므로 해당 구문 이후의 소스코드는

유효한 코드가 된다.

 #if !defined(...)

 안의 내용은 유효코드

 #endif

 반대로, #ifdef (...)라면

해당 키워드가 정의되어 있지 않으므로

#endif  까지의 코드내용은 전부 무의미해진다.


'language > C' 카테고리의 다른 글

BCD(binary Coded Decimal)  (0) 2009.06.23
gcc설치하여 vim으로 편집하기  (0) 2009.05.19
continue 와 break 차이  (0) 2009.05.13
const와 static  (0) 2009.05.05
#define와 const 차이점  (1) 2009.05.05

+ Recent posts