2009. 2. 5. 23:30
개발을 위한 첫단계로 XCODE를 설치했다.

이제 한걸음 나아갔다.


2009. 2. 5. 00:57
이런 귀중한 자료가~ ㅋ 무료라고 한다. 링크에서 받자~



2009. 2. 3. 22:07

얼마전에 iPod Touch 2 세대를 사고 나서 보니

App store 많은 무료 어플들이 있는데 기존에 있는 Apple(mac.com) 계정으로 로긴하니

한국밖에 안되는데다 무슨 결제 정보를 넣으라고 나온다...ㅡㅡ;;

뭐 말하자면 신용카드 번호 같은 말이다. 뭐 그밖에 페이팔 같은 것들도 있긴 했다(관심밖)


그래서 장장 한시간에 걸쳐 여러번의 시도끝에 결제 정보가 필요없는 무료계정을 만도는 정말 쉬운 방법을 찾아냈다.

이미 인터넷에 올라왔던 여기저기 들르고 할 필요도 없고 정말 간단하다. 따라해 봅시다~!!


1. iTunse를 실행한 다음 왼쪽 메뉴에서 STORE 아래 iTunes Store를 선택한다.
    그럼 밑에 보는 그림과 오른쪽 화면의 왼쪽 편에 보면 App Store라고 있다.
   (바로 이것이 iPod Touch용 App을 파는 곳이다.)


2. 이제 스크롤을 좀 내리자. 그러면 오른쪽 하단에 Top Free Apps라고 있다.
    이중 아무거나 클릭하자.



3. 그러면 아래와 같이 화면이 뜨고 잘 보면 Get App 라는 버튼이 있다 이걸 클릭하자.
   나는 바로 전에 보인 원숭이 모양의 App(게임으로 보인다.)를 클릭했고 아래와 같은 화면이 나온다.
   (부분캡쳐한 화면이다. 장님이 아닌 이상 누구나 찾을 것이다.^^)



4. 그러면 아래와 같이 계정 로그인 및 생성 관련 팝업이 뜰 것이다.
   그 다음 기다리고 기다리던 새로운 계정 생성을 클릭하자.
   (물론 그전에 iTunes Store에 다른 계정이 로그인되어 있으면 안된다. 오른쪽 상단에 iTunes Store Search 아래쪽에 보면 로그인 여부를 알 수 있다.)



5. 환영하는 화면이 나오고 그다음엔 대충 뭐 동의하라는 거 나온다. 대충 체크하고 넘어가자
   (사실 다 읽는 사람이 얼마나 될까?)


6. 다음으로 넘어가면 Account(ID) 설정하는 화면이 나온다.
   자신이 쓰고자 하는 아이디와 암호를 설정하고 질답도 적당히 적어둔다.
   여기서 아이디는 진짜 사용중인 메일주소로 해야한다. 왜냐하면 이 메일 주소로 최종 확인 메일을 보내고
   그 메일안에 있는 링크를 클릭해야만 최종적으로 Account activation이 된다.



7. 자 다음으로 넘어가면 짜잔~ 저 None이란 글자가 보이는가. 낼름 체크하자.
   밑의 redeem code는 무시하자.
   자 중요한 주소는 미국이면 미국 주소 한국이면 한국주소를 입력해야 한다.
   어차피 확인은 어렵고, 실제 사는 주소가 아니어도 된다.
   (뭐 사실 무료계정 만드는 이유는 대부분 미국계정이고 미국쪽 App Store에 무료어플이 많기 때문이다.)


2009. 2. 2. 13:14
나는 에디터 하면 처음 떠올리는 것이 VIM이다.

사실 접한거야 대학 때지만, 그 어떤 에디터보다도 매력적이다.
(사실 필요없지만, 그다음은 UltraEdit, EditPlus, notepad)

Mac의 운영체제는 얼마전부터 Unix/Linux 기반으로 바뀌었다.

대부분의 Unix 환경에서 사용하는 것들은 대부분 사용가능하다. (심지어 iPod Touch도 Unix/Linux 기반이다.)

VIM도 기본 내장이다.

그런데 문제는 이 기본내장이 정말 기본에만 충실해서 윈도우에서 쓰던 gVIM 이나
리눅스에서 사용하던 VIM 하고는 좀 차이가 날 정도로 불편하다는 것이다. 게다가 GUI 인터페이스도 없고..
터미날 띄워서 사용하기엔 좀 불편하다.

오늘 찾았다. MacVIM

2009. 2. 2. 13:07
우연히 돌아다니다가 발견한 허브다.

완전 멋지다...ㅋㅋ

별다른거 없지만 HUB로 캐릭터를 표현했다는...


별 필요없어도 사고 싶어지는...선물하기도 좋고...이거 괜찮은 아이템이다!




사려면 아래 링크로

http://www.gmarket.co.kr/challenge/neo_goods/goods.asp?goodscode=155156742&pos_shop_cd=RC&pos_class_cd=111111111&pos_class_kind=T
2009. 2. 1. 14:21


정말 운이 좋아서 좋은 상태의 Macboock을 중고로 구하게 되었다.

중고라는 흔적은 어디에든 있는거지만 정말 깨끗하다. 

사양은 이렇다.

Model : MacBook MA700KH
CPU : Intel Core 2 Duo (T7200) 2.0 GHz
RAM : 2GB (업그레이드)
Hard : 80GB
Video : Intel GMA 950
Display : 13.3” Widescreen (1280 x 800)
ODD : 6X DL “SuperDrive” (DVD+R DL/DVD+-RW/CD-RW)
Airport: 802.11a/b/g/n
Bluetooth: 2.0+EDR
USB: 2 (2.0)
Firewire : 1 (400)

이 얼마나 괜찮은 스펙인가~ 2.4만 되도 가격이 훌쩍 올라가버린다. 사실 노트북이 이미 있는 입장에서 새거 사긴 그렇고
정말 괜찮은 성능에 괜찮은 가격으로 좋은 사람한테 산것 같다.

이제 정말로 이걸로 하고 싶은 걸 좀더 해보게 되었다.




2009. 2. 1. 14:06
I2C Bus Interface
  - 1. Introduction

-------------------------------------------------------------------------------------
1. I2C, I2C(IIC) Bus Interface

  간단히 말해 통신방식의 하나로서, 주로 주변장치(Peripheral)와 통신/제어 용으로 많이 사용합니다.
  SCLK, SDATA 두개의 line을 사용하는 동기식 직렬통신(Synchoronous Serial Communication)의 하나입니다.
  비슷한 방식 통신 방식에는 UART, SPI 등이 있습니다.

  사실 별 신경쓰지 않고 있는 IIC, I2C 이 이름은 Inter-IC의 약자이다. IC는 Intergrated Circuit의 약자이다.
  어느 사이트에서 이 이름의 발음을 나름 쉽고 재미있게 표현했다.
  "eye-squared-see" 물론 이것은 발음상의 이야기이다

  통신 방식의 하나이지만, 앞서 말한 Inter-IC에서 보듯이, 주 목적이 제어입니다.
  
  여담으로 말하자면, 처음 고안한 회사가 Philips(현 NXP) 입니다.
  실제 이 회사 사이트에 가면 i2c specification을 얻을 수 있습니다.
  다음 링크를 참조하세요
  http://www.nxp.com/acrobat_download/literature/9398/39340011.pdf

2. 기본적인 구성 및 통신 방식 
   * 기본적인 구성
     - SCL : Serial Clock
     - SDA : Serial Data
     - 이 두 SCL, SDA로 Send, Recieve를 모두 수행합니다.

   *  Transferring bit/bytes

   * 기본적인 특징 및 통신 방식
     - Master Slave Relationship
       모든 I2C 장치들은 Master와 Slave간의 통신입니다.
       사실 이둘을 어떻게 구분하느냐는 것은 간단히 Clock generation을 누가 하느냐라고 보면 됩니다.

     - Single Master, Multiple Slave
       하나의 Master에 여러개의 Slave가 연결될 수 있습니다.
       이런 특징과 더불어 Slave device는 device고유의 Slave address를 가지고 이를 통해 각각의 Slave와 통신합니다.

     - Communication Protocol
       ▷ Slave Address를 지정
       ▷ I2C의 구성에서 보듯이 Read/Write에 대한 전용 line이 없고 통신 프로토콜 상에서 Read/Write를 결정.
       ▷ ACK(Acknowledgement), NACK(Non-Acknowledgement)
         [Slave Address][R/W][NACK/ACK]  [DATA][NACK/ACK]



--------------------------------------------------------------------------------------------------------
출처 : 직접 작성
2009. 1. 21. 10:00

이 에러는 얼마전 내가 겪었던 나름대로 당혹스러웠던 에러였다.

다른데서 잘 동작하는 게 갑자기 링크에러를 내다니...

결국은 내가 무지한 탓이었지만...


직관적으로 ARM 사이트(http://www.arm.com)에서 찾아보면 다음과 같이 나온다.
http://www.arm.com/support/faqdev/1240.html


그냥 봐선 저 내용 잘 이해가 안될 것이다.
저 내용만 보고 이해를 하려면, ARM link시에 사용하는 몇몇 옵션들에 대해서 이미 잘 알고 있다는 전제하에서 가능하다.

그럼 차근차근 저 내용을 풀어 보도록 하겠다.


  What does "Error: L6248E: cannot have address type relocation" mean?
  실제 에러는 이렇게 나오지는 않고, 이 의미를 포함해서 나온다.
  처음에 제일 당황스러운 부분이다. 왜 주소를 가질수 없다는 걸까? 
  분명히 코딩 상의 문제는 아니다.



 This linker error can occur when trying to build "Position Independent" code. Consider a small example like:
#include <stdio.h>
char *str = "test";
int main(void)
{
    printf ("%s",str);
}

 그냥 보면 이 코드는 전혀 문제가 없어 보인다. 정말 단순하기 짝이 없지만 크게 문제될 부분으로 보이지는 않는다.
실제로 gcc로 컴파일 해보자. 아무 에러 안나고 잘 실행될 것이다.
중요한 것은 링크 옵션에 있다.


when compiled and linked with:
armcc -c -apcs /ropi pi.c
armlink -ropi pi.othe linker will report a message of the form:


Error: L6248E: pi.o(.data) in ABSOLUTE region 'ER_RW' cannot have address/offset type relocation to .constdata in PI region 'ER_RO'.


For the code above, the compiler generates a global pointer "str" to the char string "test". The global pointer "str" will need to be initialized to the address of the char string "test" in the .constdata section.
However, absolute addresses cannot be used in a PI system, so the link step fails,
because of the ABS32 relocations to (position independent).constdata.

자 드디어 보여지는 링크 옵션. 강조해 놓은 저부분에 아무런 문제도 없어 보이는 코드에서 링크에러를 보여주는 원인 제공자이다. 
 눈에 띄는 옵션 들이 있다. -apcs /ropi
 Error 부분을 보면 낯선 구문이 보인다. PI region 'ER_RO' 이걸 이해하는데 키워드중 하나가 바로  PI region이다.

* PI region
  - Position Independent Region 의 약자이다.
     ARM Manual에는 간략하게 이런 설명이 있다.
     One or more of the position-independent regions is automatically moved to a different address.
     이 이야기는 load 시, 즉 프로그램이 실행되어 data 영역이 ram 에 로드될때 PI region에 속한 data 영역은 absolute하지 않고 relative 하다, 다른 말로 different address를 가진다는 이야기이다.

* Error 부문을 해석해 보면
  ABSOLUTE region ER_RW 에 있는 pi.o(.data)(-- 이것은 data영역 즉 변수에 대한 영역이다.--) 는 PI region ER_RO에 속한 .constdata 에 대한 address를 가질수 없다라는 뜻으로 해석된다. 
  좀더 쉽게 접근하자면,  absolute region에서 relative region의 address를 참조할 수 없다라고 이해하면 된다.
  (어떻게 보면 정말 당연한 이야기이기도 하다.)
  Position Independent region이라는 것이 absolute address를 가지는 것이 아니라 pc-relative address를 가진 다는 의미이다.

 * 그렇다면 갑자기 PI region이라는 것은 어디서 튀어나온 것일까?
   그렇다, 이것은 옵션에 지정되어 있다. 
      /ropi, -ropi

  이 두 옵션에 대해 ARM manual에서는 다음과 같이 설명하고 있다.
* -ropi
---------------------------------------------------------------------------------------------------------
This option generates (read-only) position-independent code. /pic is an alias for this option. If this option is selected the compiler:
 - addresses read-only code and data pc-relative
 - sets the Position Independent (PI) attribute on read-only output sections.
Note
The ARM tools cannot determine if the final output image will be Read-Only Position Independent (ROPI) until the linker finishes processing input sections. This means that the linker might emit ROPI error messages, even though you have selected this option.
---------------------------------------------------------------------------------------------------------

* 다시 Error 밑 쪽의 설명을 참조하여 풀어보면
  compiler는 global pointer 변수 str를 만들고, 코드에 이에 대한 초기값이 지정되어 있으므로 이 초기값으로 str 변수 값을 초기화한다. 이 때 "test" 이 값은 const data 형태로 생성하고, 이는 ro 영역, read only 영역에 속한다. 
그런데 컴파일과 링크 옵션에서 지정했다시피 ro 영역은 PI region으로 지정하였다. 이 이야기는 "test"에 대한 address가 load시마다 달라질 수 있다는 의미이다. str이라는 변수는 compile 시 초기값이 결정되어야만 하고, 이 초기값으로 사용되는 "test"에 대한 address는 load시에 결정된다. 결국 compiler는 global pointer 변수 str의 초기값으로 load시 마다 달라질 수 있는 address를 넣을 수 없기 때문에 이런 에러를 보여주는 것이다.

 

To resolve this, you must re-write the code to avoid the explicit pointer. Two possible ways are shown below:

1) Use a global array instead of a global pointer:

#include <stdio.h>
const char str[] = "test";
int main(void)
{
printf ("%s",str);
}

2) Use a local pointer instead of a global pointer:

#include <stdio.h>
int main(void)
{
char *str = "test";
printf ("%s",str);
}

Please note that if you are using a list with multiple elements, such as:

char * list[] = {"zero", "one", "two"};

You will get a separate link error for each element in the array. In this case, the recommended solution is:

char list[3][5] = {"zero", "one", "two"};

with the print instruction being (for example):

printf("%s", list[1]);

Note that you will need to declare a two dimensional array for the list, with the first dimension as the number of elements in the array, and the second dimension as the maximum size for an element in the array.

 
 ARM 사이트에서 제시하는 이런 에러에 대한 해결 방안이다.
 결국 코드를 바꿔야 한다. 이런식의 코드를 Position Independent code라고 부른다.

 이 예제의 내용은 비교적 이해하기 어렵지 않다.
 1) 같은 const 영역 ro 영역에 두는 것이다. 물론 같은 ro 영역이니 상관없다.
 2) global로 쓰지 않고 local variable로 사용하는 것이다.

 마지막의 두 array에 대한 예제는 크기를 지정하지 않은 경우와 지정한 경우에 대해 차이가 있고, 이 차이에 의해 이 에러를 일으킬 수 있다는 점을 설명하고 있다.
  좀 더 다르게 이런식의 접근도 가능하다.
   char *list[]   ==> 배열 포인터, 즉 global pointer variable이다. 결론적으로 처음 설명한 것과 같은 논리이다.
   char list[3][5] ==> 사이즈와 값이 결정된 array이다. 
  이둘의 차이는 하나는 포인터를 가지는 변수고, 하나는 값을 가지는 변수라는 점이다.

 이 에러의 초점은 주소 참조 이다. 그러니 address를 참조하지 않는다면 아예 해당되지 않는 이야기인 것이다.


참조
http://www.arm.com
2009. 1. 11. 08:57
요즘은 serial port를 생략(?)하고 나오는 경우가 종종 있다.

그러다보니 나와같은 사람들한테는...ㅡㅡ 영 불편하다.

아니 불편한게 아니라 불만이다.

각종 확인 및 테스트 , 디버깅을 serial로 하는데 이게 안되면 어쩌란 소린가.


이럴 경우 유용한 어댑터이다. 찾기도 디따 힘들다.
serial 공인 속도 뿐만 아니라 비공인 최고 속도까지도 지원한다. 물론 써본거라 보장하고
다른 개발자들도 애용하는 어댑터이다.

US232R-10, US232R-100

제품 홈페이지 : http://www.ftdichip.com/Products/EvaluationKits/USB-Serial.htm
국내판매처 : http://www.ezdaq.com/main/index.php

2009. 1. 9. 00:14

* 한글 설정
  locale 파일을 찾아 default값을 변경해도 되고  /etc/default/locale 파일이다.
  다음과 같이 export 명령을 사용해서 locale을 변경해도 된다.
    > export LANG="ko_KR.EUC-KR"

* 커널 버젼 확인
    > uname -a