포인터란 무엇인가.

큰 의미는 없다.

주소만 알면 직접 찾아가서 물건을 전달하거나 받아오는 오토바이 택배?

& > 주소연산자 가 뜨면 택배기사에게 갈 주소를 알려주고.
* > 별 연산자가 뜨면 택배 기사 출발! 물건을 전달하거나 받아오는 것.

아이들에게 강의했을 때 이 비유로 설명했던게 이해하기 편한 설명이었던 것 같다.

이 이야기로 더블이 되었든 따따블 포인터까지도 걍 설명이 되니 말이다.

호스팅 연장 기념 첫글은 이상!
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/26 02:16 2008/08/26 02:16
Posted by TylorSTYLE™
뭐 팁이라고 하기엔 큰 건 아니지만 팁일 수도 있다.

DDE(Dynamic Data Exchange)  를 이용하는 방법도 있지만 지원하는 에디터도 별로 없고, IAR 이 크게 지원하는 것도 없어 Command Line 방식을 사용하기로 한다.

외부 에디터 사용이란 기능이 뭐 대단한 건 아니다.  평소 코딩할 때 프로젝트 파일 트리 창에서 파일을 더블클릭 하면 자신이 사용하는 에디터를 사용하여 편집할 수 있도록 자동 실행해 준다.

편하면 쓰고 불편하면 안쓰는 기능이다.

해당 기능 설정은 다음 위치에 있다.
Tools > Option > External Editor > Use External Editor 체크 > 설정사항 입력.

* UltraEdit 를 사용하는 방법.
UltraEdit 는 DDE 를 이용할 수 있지만 별로..........
일단 IAR 에서
Type : Command Line
Editor : UltraEdit 의 경로와 실행파일 선택.
Arguments : $FILE_PATH$

* Source Insight 에서 사용하는 방법.
Type : Command Line
Editor : UltraEdit 의 경로와 실행파일 선택.
Arguments : -i +&CUR_LINE& $FILE_PATH$

Source Insight 에서는 -i 옵션을 붙이지 않으면 새로 프로그램을 실행하여 보여준다.
+$CUR_LINE$ 을 붙여야 오류 라인 추적이 가능하다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/11/28 01:37 2006/11/28 01:37
Posted by TylorSTYLE™
어제 저녁부터 황당했던걸 쓰고자 한다.

일단은 바쁜 관계로 포스트를 꾸준히 올리지 못한거... 내 자신에게 미안해 죽겠다.
작업 기록을 남겨야 하는데....

일단 형변환...

타입 케스트라고도 한다.

컴파일러마다 고유의 특성이 있다.  그 중 형변환에 관련해서 약간씩 틀리다.

자동화가 잘 되어있는 Delphi 나 VC++ 의 경우 정수간의 타입 케스트는 컴파일러가 알아서 한다.

물론 100 % 는 아니다.  컴파일러라는 프로그램도 사람이 만들었으니까......



C나 C++ 의 경우 타 언어에 비해 프로그래머의 자유도가 높은 언어이다.

하지만 그 자유도가 버그를 만들어 내는 경우가 있고, 프로그래머의 의도와 다르게 움직여서 오류를 만들어내는 경우가 있는데, 어제 그걸 당했다는 것...

물론 내 실수다.  C 언어 코딩에서 중요한건 컴파일러에게 확실하게 지시해야 만일의 문제도 피해갈 수 있다는 것이고, 많은 C 언어 서적에서 중요시 하는 부분이다.

물론 코딩에서 명확하게 지시한다면 그 코드를 보는 자신이나 다른이들에게도 도움이 된다.

어제 낸 버그를 간략하게 예제로 나타내 보겠다.
참고로 컴파일러는 IAR 사의 C 컴파일러 이다.

unsigned short Value_A;
unsigned short Value_B;
unsigned long Result;
Value_A = 770;
Value_B = 960;
Result = Value_A * Value_B / 1000;

주_ unsigned short : 2 Byte 정수형. 0 ~ 65535 까지 표현가능.
주_ unsigned logn  : 4 Byte 정수형. 0 ~ 4294967295 까지 표현가능.

Result 값은 18 이 나왔다. 재차 확인하고 디어셈 코드 보다가 여기저기 콜 하고 점프 하길래 퇴근했다. (-_-)

그리고 오늘 아침 출근.... 좌석 버스에서 졸았다... 눈 떴더니 내릴 정류장이더라....
5 분만 늦게 일어났어도 안양 가있을 뻔 했다....
( 굴비 : 900 원의 차비를 더 들여서 빠르고 편하게 갈 수 있는 강화 - 구로 - 안양 노선 강화운수 3 번 좌석 버스를 알려준 혜진이누나에게 감사를 표시한다. )

일단 졸면서 문득 생각이 난거.... 형.변.환...

그렇다. 

바보 컴파일러에게 내가 어떤 정수형을 사용할 것인지 안알려 준 것.
결국 엄하게 연산해서 범위를 넘기고 나누어주는 센스를 발휘하여 결과로 1818181818181818 한거다.

다음과 같이 수정해서 한방에 끝...

unsigned short Value_B;
unsigned long Result;
Value_A = 770;
Value_B = 960;
Result = (unsigned long)Value_A * (unsigned long)Value_B / 1000;

결과 값 = 739  .... OK!!!

조심하자.  그리고 바보 컴파일러에게는 하나하나 자세히 알려주자.  명심할 것!!!
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/09/22 12:52 2006/09/22 12:52
Posted by TylorSTYLE™

비트 필드는 잘 사용하면 메모리를 아주 효율적으로 사용할 수 있도록 해주는 방법이다.
특히 가용 자원이 넉넉하지 않은 시스템에서는 큰 효과를 볼 수 있고, 클럭(처리속도)를 절약할 수도
있다.

사용방법은 다음과 같다.
struct [구조체 형] {
byte a:1;
byte b:2;
byte c:3;
byte d:2;
} [구조체 명];

struct 다!! C 좀 해봤다는 사람들은 써봤을 것이다.  하지만 선언 뒤에 콜론숫자 가 붙어있다.

일단 byte형 의 8 개 비트를 쪼갠 것인데 쪼갤 때 다음의 규칙만 지켜준다면 전 혀 문제없다.

* 쪼갤 형은 하나로 통일
내가 봐도 이해하기 어렵게 적은 타이틀이다.  무슨말이냐면, 저 위에 보면 byte 로만 선언되어있다.
그렇다! 하나로 통일해야 한다.

* 나눈 비트의 총 갯수는 변수형과 같아야 한다.
byte(1Byte) 형의 경우 나눈 비트들의 총 갯수가 8 개.
word, short Int (2Byte) 형의 경우 나눈 비트들의 총 갯수가 16 개.
Long Int, dword (4Byte) 형의 경우 나눈 비트들의 총 갯수가 32 개 가 되어야 한다.

일단 장점은 비트 연산할 때 좋고, bool 형이 없는 C 의 경우엔 비트 필드를 이용해 메모리를 절약할 수 있다.
  물론 bool 형 처럼 if 문에 조건으로 사용할 수 있다는 장점도 있다.
>> if ([구조체 명].a)

응용편
union ByteBitField
{
byte All;
struct
{
byte a: 1;
byte b: 1;
byte c: 1;
byte d: 1;
byte e: 1;
byte f: 1;
byte g: 1;
byte h: 1;
};
};

나는 이렇게 놓고 쓴다.  변수처럼 모두 접근도 가능하기에....
union 에 대해서는 인터넷에 자료 많으니 검색하시길...

이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/08/28 14:05 2006/08/28 14:05
Posted by TylorSTYLE™

BLOG main image

카테고리

전체 (72)
SAMSUNG MCU (14)
Embedded Linux (5)
Mac OS X (4)
신변잡기 (28)
디지털 회로 (1)
Programming (8)
무선 네트워크 (7)
Computer (2)

글 보관함

Total : 23834
Today : 61 Yesterday : 90