74164 (Renesas SN74HC164N) / 8-BIT PARALLEL-OUT SERIAL SHIFT REGISTERS

 10여년 전 AVR 한다고 책 사놓고 함께 사두었던 IC 들이 몇가지 있어서 부품들을 하나씩 테스트 해보기로 합니다. 그중 첫 번째, Shift Register 입니다.

용도

 아두이노로 제어할 모듈들도 많은데 거기에 LCD 까지 붙여놓고 나면 GPIO 핀이 모자른 경우가 있습니다. 그래서 이런 부분을 충족 시킬 수 있는게 Shift Register 라고 들었기에, 정말로 이게 가능한지 함 해보도록 하겠습니다.

이름

 SN

  이건 뭐 회사에서 앞에 붙이는 이름이겠지요. SN 은 RENESAS 회사에서 주로 붙이는 것 같습니다.

 74

  74XX 시리즈 패밀리라는 얘기이지요. 예전 부터 TTL (Transistor - Transistor Logic)으로 불리우던 로직 IC 들에 붙는 이름입니다. 74 시리즈는 밑의 URL 가보시면 엄첨 많습니다. 전에 아는 분 책상에 TTL IC Spec 책자가 엄청 두꺼운게 놓여있었던걸 본게 기억나네요. 74 시리즈는 비교적 저전력으로 작동됩니다.

http://en.wikipedia.org/wiki/List_of_7400_series_integrated_circuits

 HC

 Highspeed CMOS 의 약자입니다. MOSFET 이 발명되고 나서 N / P 타입 MOSFET을 함께 구성하여 만든 회로가 CMOS 인걸로 알고있습니다. 이전의 Transistor 방식에 비해 훨씬 전력소모가 작지만 더 큰 전압을 제어할 수 있는걸로 알고있습니다. 요새는 그래서 대부분 HC 방식으로 나옵니다. LS 방식 (Lowpower Shotky)도 있지만 TTL 방식 대비 속도는 빨라도 전력 소모가 커서 요새는 HC 이네요.

속도도 TTL 만큼 나오고 (Highspeed) 전력 소모가 더욱 적으니 좋은놈이죠. 그리고 HCT 방식이 있는데요, 이건 HC 에  TTL 호환성을 가지는 녀석입니다. 그래서 TTL IC 들을 그대로 교체할 수 있고 함께 회로에 섞여있어도 잘 동작한답니다.

164

 이건 뭐 다 아시다 시피 모델 번호죠. 164 는 8-bit parallel-out serial shift register with asynchronous clear 라고 되어있네요. 즉, 8Bit Shift Register 입니다.

8Bit

 Shift Register 는 Flip-Flop 회로로 만들어집니다. 이 회로 1개는 1비트를 Holding 할 수 있습니다. 즉, HIGH 또는 LOW 상태를 저장할 수 있고, 이런걸 "메모리"라고 부르죠. 이게 8개 즉, 8Bit = 1Byte 있다는 이야기입니다. 1Byte 의 데이터를 저장할 수 있다는 이야기 이죠. 물론 전원이 계속 들어와 있는 상태여야 합니다.

Serial In / Parallel Out

 아두이노가 데이터를 Serial 하게 보내고 이걸 8Bit 로 Parallel 하게 나누어서 출력할 수 있다는 이야기 입니다. 이 74164 의 경우는 2 개의 Input 을 받아서 8개의 Output 을 만들어 냅니다. 그래서 아두이노에서는 선 2개만 있으면 됩니다.

Non-Latched 

 이 164는 Latch 가 있다는 말이 없다. 그러면 없는것이다. 이게 단점이 될 수 있는데, 가령, 00000001 을 표현하려고 하면, 처음에 Data 를 HIGH 를 주면, 1번 QA 가 우선 켜지고, 다음 Clock 이 주어지면 1 을 하나 Shift 하므로, 01 이 되고, 이런식으로 7번 Clock 을 주면 스크롤 되는것 같이 모든 Output 에 HIGH 가 한번씩 매우 짧게 간 후에야 00000001 이 됩니다.

 Latch 가 있는 IC 는 Data 를 준다고 바로 출력되는게 아니고 별도의 메모리가 있어서 일단 저장 되었다가 Switch 를 Flip 시키면 출력이 됩니다. 그러나 1개의 추가적인 선과 프로그램이 더 필요하게 됩니다.

 LED 를 통해 이녀석을 실험 해 볼텐데, 이렇게 스크롤 되는게 매우 빠르게 보일것입니다. 

PIN ARRANGE


핀은 저렇게 되어있습니다. 총 14개 핀 이고, 4개의 INPUT 핀(A,B,CLR,CLK)과 8개의 OUTPUT PIN (QA~QH),  VCC와 GND 가 있습니다.


 PIN 1,2 는 Serial Input 을 받기 위한 PIN 입니다. 두 핀은 AND Gate 로 되어 있어서, 1 이 입력되게 하려면 둘 다 HIGH 이어야 합니다. 둘 다 0 이면 0이 되는겁니다. 그런데 우리는 아두이노로 제어를 할 것이고 프로그램으로 충분히 HIGH / LOW 를 만들어낼 수 있기 때문에 AND Gate 는 필요 없습니다. 그래서 VCC 로 A 핀을 묶어 주도록 하겠습니다.


74164 의 3,4,5,6 번 PIN 은 첫 4 bit 가 되고, 10,11,12,13 은 그 다음 4비트가 됩니다.

CLR(-) 의 경우, LOW 를 주면 Register 를 모두 Clear 합니다. 나중에 쓰려면 쓰고, 우선은 High 로 주어서 유지합니다.


LED 켜기

 일단 164를 아래와 같이 연결해봅니다.


 74HC164N 의 Output Current 는 SPEC 에 Continuous Output Current 는 +-25mA 로 나와있습니다. LED 8개를 밝게 켜주기에는 무리가 있죠. TR 이 8개가 있어야 하겠네요. 하지만 일단 켜봅니다. LED 2V 전압 강하 예상하고, 20mA 는 8놈에게 나누어 줍니다. 개당 3mA 도 못먹겠네요. 저항이라도 좀 따로 달면 좋겠지만 일단 해봅니다.

연결할게 별로 없으니 심플하고 좋습니다. 의외로 밝기도 괜챦습니다. 잠시 동작하는 동영상을 보시지요.

위 동영상은 순차적으로 HIGH 를 SHIFT 한 예제 입니다. 소스코드는 다음과 같습니다.


다음은 왼쪽과 오른쪽을 깜빡여 봤고, Arduino 의 ShiftOut 함수를 활용해봤습니다.

소스코드는 다음과 같습니다.

결론

 잠깐 동안이었지만 글을 쓰면서 진행 하니 그래도 시간이 꽤 걸리는군요. 

 Shift Register 는 이렇게 채널을 확장하는데에는 필수적인 존재인듯 합니다. 하지만 이 74164 의 경우는 Latch 가 없어서, 처음에는 shiftOut 함수에 0xF0 을 주건 0x0F 를 주건 계속 불이 켜져있는 것처럼 보여서(Delay도 안주고 했더니 더했네요..^^) 참 난감했습니다. 빠른속도로 Shift 하는 잔상이 생겨서(스크롤 현상) 동작하지 않는것으로 느낀정도였습니다.

 앞으로 특수한 목적이나 Pin 이 너무 모자른 경우가 아니면 Latch 가 있는 Register (74594~599) 를 사용하는게 낫겠다는 생각입니다.






 



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

브래드보드에 모든 부품을 올려서 구현을 해봤습니다.

각종 스위치류와 포텐시오미터, 수동모드 전환표시 LED 등 모두 실장을 하고 코딩도 해줬습니다. 코딩은 총 250라인 정도 되네요. 이건 CRC16 체크와 Response 로직까지 추가하면 더 길어지겠습니다. 코드도 완료되는대로 올리도록 하겠습니다.

이제 졸려서 이만 줄이고, 다음 빵판 납땜과 케이스 제작, 윈치제작의 험난한 길을 걸으며 차차 완료해나아가는 모습을 업데이트 하겠습니다.



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,


이번 제어는 UART 로 명령을 받아서 움직이는 "자동" 모드가 포함됩니다. 그래서, 간단하게나마 프로토콜이 필요하게 됩니다. 따라서 급하게 아래처럼 프로토콜을 정해봅니다.

[COMMON] 프로토콜의 구조입니다. HEADER/BODY/TAIL 이고, 심플합니다.

Field | Bytes | Description

## HEADER
STX | 2 | "ST"
DID | 1 | device ID

## BODY
CMD | 1 | Commands
DAT | 2 | Data / BIG-endian
RES | 2 | Reserved / BIG-endian

## TAIL
CRC16 | 2 | CRC16 (0,10)
ETX | 2 | "EX"

<설명>
DID : 0x11 - 창문 개폐기 1호


[COMMANDS]

<Control>

CMD : 0x11 - 창문 열기
DAT : 0x0000 (보드 설정사용), 0x0001 ~ 0x00FF (강제속도)

CMD : 0x21 - 창문 열기 강제 / S1 눌려도 무시하고 계속 모터 진행. !주의!
DAT : 0x0000 (보드설정사용), 
0x0001 ~ 0x00FF (강제속도)

CMD : 0x12 - 창문 닫기
DAT : 0x0000 (보드 설정사용), 0x0001 ~ 0x00FF (강제속도)

CMD : 0x22 - 창문 닫기 강제 / S2 눌려도 무시하고 계속 모터 진행. !주의!
DAT : 0x0000 (보드설정사용), 
0x0001 ~ 0x00FF (강제속도)

CMD : 0x13 - 모터 멈춤(급정거)

CMD : 0x14 - 모터 OFF

<RESPONSE - OK>
CMD : 0x00
DAT : "OK"

<RESPONSE - ERROR>
CMD : 0xF1 - 오류
DAT : 오류 코드
0x0001 - 데이터 오류 (CRC 불일치 / 재전송 요청)
0x0101 - 모터 오류

샘플 데이터 : 5354111100FF0000FFFF4554

위 프로토콜로 PC 와 통신 테스트를 합니다. 프로토콜 테스트는 ARDUINO NANO 를 활용해서 해봤습니다. 쬐그맣고 빵판에 그냥 심어놓고 하면 되기땜에 배선 시간이 줄어서 테스트할때는 이놈으로 합니다. UNO 와 PWM 출력핀 번호도 같아서 Schematic 도 그대로 사용하면 됩니다.




PC에서 속도를 조절해보고, 정/역회전 및 정지를 해봤습니다.

데이터가 깨지거나 맞지 않는 경우를 생각해서 STX/ETX가 안맞으면 패킷을 DISCARD 하도록 하였고 테스트 해보니 잘 동작합니다.

Debug 메시지를 출력중인데, Serial 을 잡고 출력하다보니 나중에 설치하여 동작할때(릴리즈)는 문제가 되겠다 싶어서, debug 출력 제어핀(D12)을 두었습니다.

아두이노 내부의 PULLUP 을 사용해서, 평소 HIGH (릴리즈모드), GND 로 묶을 때 LOW 로 가서 디버그 모드로 돕니다. 이때는 출력을 안하고(나중에 RESPONSE 만 줘야겠죠) 그냥 넘깁니다.


이제 모터 굴리고 UART 로 제어도 되었으니 남은건 CRC16으로 패킷체크 하는것과(뭐 이것까지 필요할까 합니다마는.. ) RESPONSE 주는것, 그리고 제일 큰일인 땜질용 빵판에 옮기는것이 남았습니다. (아.. 요걸 해야하나..)

그리고, DC모터를 제어하면서 문제점이 하나 보입니다. 바로 "정지" 기능인데요, 일반적인 서보모터는 지정 각도에서 딱 멈춰있는 반면, 이노무 "서보형 DC모터"는 그딴 기능이 없네요. 그냥 회전만 하는거라, L293에 브레이크를 먹여도 OFF 한것과 차이가 없이 휙휙 돌아갑니다.

나중에 설치하게 되면 문을 닫았을때는 크게 문제없겠지만, 당기고 있는(열기)때에는 어느정도 힘으로 끈을 붙들고(?)있게 해야겠네요.^^

그럼 또 진행하고 다음편 올라갈래요~


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

조그마항 환기창을 여닫을 목적으로 처음에는 Linear Actuator 를 생각했었으나 비용도 비싸고 기구 제작도 어렵겠다는 판단으로, 간단한 기어드 DC 모터(서보타입)를 활용해보기로 했습니다.

주요 기능은 이렇습니다.

* 정방향/역방향 회전
* 회전 속도 조절
* 문이 닫혔을때/열렸을 때 회전 중지
* 정방향/역방향의 Toggle
* UART 를 통한 명령

아래가 간단하게 그려본 회로도 입니다. 스위치 말고는 거의 쓰는게 없습니다.



온실창문개폐기.fzz


조절부의 용도를 써보면,

- R2 : 서보 속도 제어용 Potentiometer 입니다

- S1 : 정방향 STOP 버튼 입니다. 이게 눌리면 더이상 정방향 운행 안하게 합니다

- S2 : 역방향 STOP 버튼 입니다. 이게 눌리면 더이상 역방향 운행 안하게 합니다

- S3 : 수동모드 전환 슬라이드 스위치 입니다. 수동모드면 불이들어오고, UART 통신은 무시합니다.

- S4 : 수동모드에서 정/역방향 운행 토글 스위치 입니다. S3 의 수동 모드에서 수동으로 창을 열고 닫을 때 사용합니다.

- S5 : 디버그 모드 스위치 입니다. 스위치를 DEBUG 모드로 바꾸면, 내부 디버그 메시지가 Serial 포트로 출력됩니다. (제일 아래 설계도에 있습니다. 급 추가라..^^)


새벽 5시, 애들 자고있을 때 먼저 일어나서, 샤워하고 잠깨고 자.. 우선 빵판에 함 연결하자.. 하고있는데, 이런.. 큰 문제가 하나 생겼습니다. 저 위의 서보모터가 정말 "서보형 DC 모터" 이네요!! 선이 2가닥 밖에 안나와있습니다.. OTL..

급하게 회로도를 변경하고 L293B 를 넣습니다..



온실창문개폐기_DC모터.fzz


새벽에 아까운 30분을 날려버렸네요..ㅠㅠ

이제 출근준비를 해야 하니 나머지는 회사 댕겨와서 써야겠습니다.


빵판에 풀다운 저항을 심다가 자리가 없어서 생각해보니, 아두이노 Digital Pin 에 풀업 저항이 있다는걸 깜빡했습니다. 궂이 저렇게 풀다운을 넣을 필요가 없었는데.. 그래서 다시 또 급하게 한장 더 만들었습니다.


위 설계도가 최종이 될듯 싶습니다. 포트를 너무 많이 쓰고있는 감도 있겠지만 일단 이런저런 옵션을 넣다보니 저렇게 됐습니다.

주요 부품가는

* Arduino NANO : 45,000
* 서보형 DC 모터 : 10,000
* L293B : 2,200
* 잡다 파트들 : 1,000

6만원이 조금 안되는 금액이지만 창문 하나 열고닫겠다고 하는것 치고는 참 비싸다..ㅎㅎ 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

L293B 가 가장 만만하고 자료가 많아서 샀음.

4 Channel 로, 4개 모터 구동이 가능하다.

데이터 시트는 아래와 같고


L293B:E.pdf


적용하는 예제는 또 아래와 같다


MOTOR 는 일반 DC 모터를 다는 경우는 저렇게 보호를 해줘야 하고, 서보나 조금 신경 써서 캐패시터를 달아준 모터는 안달아줘도 된다.

L293B 는 총 4개의 OUTPUT 으로 이루어져 있는데,


위와 같은 PIN Assign 으로 구성되어 있고, Uni-Direction (한방향) 은 4개의 DC 모터를, Bi-Direction (양방향)은 2개의 DC 모터를 구동할 수 있다.

양방향구동이 필요한 경우, 좌/우 채널 별로 DC 모터의 +/- 를 3,6번 핀에 연결하고 아두이노의 Signal 을 2,7 번 핀에 연결하면 된다.

ENABLE1 / 2 에 Digital 회로 쪽(아두이노)의 5V 를 연결해주면 되고, Vs 라고 되어있는 부분은 Motor 용 외부 전력을 입력해주면 된다. L293B 의 최대 출력 전압은 37V 이고, 최대 출력 피크 전류는 2A이므로 이걸 잘 고려해서 모터를 물려주어야 한다.



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

흔히 MUX 라고 부르는 IC 이다.

여러 입력 중에서 1개를 취할 때 쓰인다.


현재 보유중인 녀석은 

* 74LS151

 매우 평범한 1 of 8 MUX 이다. 즉, 8개 중에 1개를 SELECT 한다.


* 14053BCN Triple 2 channel Analog Multiplexer

 이건 2 Channel Analog 입력을 1개로 선택할 수 있게 해주는 MUX 이다. INPUT 전압 3.0 V ~ 18V 까지 사용할 수 있다. 이런놈이 3개 들어있는거다.


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

[부품 구매]

* 모터류
  . 모터뱅크 : www.motorbank.kr - 모터 종류 많이 파는 곳

* 전자부품 종합
  . 엘레파츠 : www.eleparts.co.kr 
  . 디바이스마트 : www.devicemart.co.kr 
  . ICBanQ : www.icbanq.com -
  . 가치창조기술 : http://vctec.co.kr/

* 아두이노 전문
  . 다두이노 : http://www.daduino.co.kr/ - 2015.03.11 오픈한 쇼핑몰. 호환제품 많고 비교적 저렴함.

[각종 까페]

* 네이버
  . 당근이의 AVR 갖고놀기 : http://cafe.naver.com/carroty - 각종 IC 와 관련한 정보들이 많다

 

 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

 이 MySQL 이란 DB 는 제가 IT 생활을 하면서 도대체 몇번을 설치하고있는지 모를 정도로 자주 설치해서 사용하네요. 그만큼 돈없는 회사나 개인, 프로젝트에서는 축복받은 존재이기도 하죠.

 오늘은 이 MySQL 의 설치 과정을 블로그로 남겨볼까 합니다. 그냥 apt 나 yum, rpm 으로 설치하면 재미 없죠. 소스로 컴파일 해서 궂이 root 계정이 아니더라도 운영할 수 있도록 해보겠습니다. 


[준비물]

Ubuntu 13.04 
mysql 5.6 source distribution package


1. 재료 준비

MySQL 소스

 MySQL 다운로드 페이지에서 카테고리를 Source 로 선택하면  "Generic Linux (Architecture Independent), Compressed TAR Archive " 가 보입니다. 다운로드 받으면 됩니다.


 MySQL 도 C 로 개발되었기때문에 glibc (GNU C Library) 에 Dependency 가 있습니다. 현재 Ubuntu 13.04 에 기본적으로 포함된 glibc는 버전이 2.17 입니다. (GLIBC 버전 확인은 getconf -a 로 확인할 수 있습니다. MySQL 5.6.19 버전은 glibc 2.5 이상 버전에 Dependency 가 있는걸로 보입니다.)


cmake 빌드할 때, -DENABLE_DOWNLOADS=1 해서, google_mock 같은 써드파티 라이브러리 소스 함께 다운받아 빌드하도록 옵션 준다.

mysql 의 cmake 빌드 옵션은 아래 URL 참고

http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html


오류났을때는 조치하고, CMakeCache.txt 파일을 지우고 나서 다시 cmake 해야 한다.


[내옵션]

cmake -DCMAKE_INSTALL_PREFIX=/home2/dev/db/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLE_DOWNLOADS=1 -DMYSQL_DATADIR=/home2/dev/db/mysql_data -DWITH_INNOBASE_STORAGE_ENGINE=1 .


make


make install


2013-08-28 15:07:25 26770 [Note] InnoDB: Waiting for purge to start 2013-08-28 15:07:25 26770 [Note] InnoDB: 5.6.13 started; log sequence number 0 2013-08-28 15:07:25 26770 [ERROR] Aborting 2013-08-28 15:07:25 26770 [Note] Binlog end 2013-08-28 15:07:25 26770 [Note] InnoDB: FTS optimize thread exiting. 2013-08-28 15:07:25 26770 [Note] InnoDB: Starting shutdown... 2013-08-28 15:07:27 26770 [Note] InnoDB: Shutdown completed; log sequence number 1600607 2013-08-28 15:07:27 26770 [Note]


mysqld_safe --verbose --help 하면, 마지막에 현재 세팅된 variable 나옴.

그런데 요게 역시나 유저 권한으로 띄우기에는 적합하지 않은 옵션들이 기본값임.

바꿔야할것들이 있음..


[기본]

basedir = /usr 

datadir=/var/lib/mysql/

general-log-file = /var/lib/mysql/chrubuntu.log

language                                                   /usr/share/mysql/

lc-messages-dir                                            /usr/share/mysql/

log-error                                                  /var/log/mysql/error.log

pid-file                                                   /var/run/mysqld/mysqld.pid
plugin-dir                                                 /usr/lib/plugin/
socket                                                     /var/run/mysqld/mysqld.sock

그다음..


지금 생성한 my.cnf 를 기본으로 띄워야 하는데.. 방법은 두가지 ..

1. my.cnf 파일을 ~/.my.cnf 파일로 복사해줌~! 

 /etc/my.cnf 파일이 있거나, /etc/mysql/my.cnf, 같은게 있으면 없애줌~!

 왜냐하면, /etc/my.cnf 있으면, 이걸 먼저 로딩하기 때문임.


2. 모든 mysql 관련 실행파일에 --defaults-file=/경로/my.cnf 를 써줌.


난 1번을 선택했음~!


$ scripts/mysql_install_db

실행해줌.


$ bin/mysqlad_safe & 

해서 띄워보고 에러 나는지 확인


$ bin/mysqladmin -uroot password '내패스워드'

로 root 패스워드 변경함


root 에게 ANY 에서 접속할 권한 주려고..

3가지 방법 존재함.

1. GRANT 쿼리 사용


2. mysql_setpermission 유틸 사용

우선 실행하니 이런 에러 남..


perl 에 DBI 모듈 없어서 그램..


다시 perl 모듈 부터 설치해야하니..

# perl -eshell -MCPAN 

cpan> install local:lib DBI (or how it is called)

요렇게 해주기.. 

다시 cpan 쉘로 들어가려면, 그냥

$ cpan 하면 됨.


그런데, 이게 끝이 아니다.. 그래도 경로를 못찾는다..

CPAN 이랑 perl 이랑.. 뭐이리 복잡함??

http://blog.naver.com/PostView.nhn?blogId=xtjin&logNo=50004217785 

요거 참고해서 차근히 함 해보자.

==> 하고 보니, install DBI 를 CAPN 의 shell 에서 하고 나서,

~/.cpan 디렉토리로 가서 .. => install 로 하지 말고, 그냥 get DBI 하자..

get DBI 해서  ==> 아니야~~!!


[정답은..]

cpan shell 에서..

o conf makepl_arg INSTALL_BASE=~/perl

o mbuildpl_arg --install_base=~/perl

이렇게 해주고 나서, 

.profile 에서,.

export PERL5LIB=$PERL5LIB:~/perl/lib:~/perl/lib/x86_어쩌구.. 

해줘야 함.


그리고, 

cpan> install local:lib 함 해주고

cpan> instal DBI 함 해주고

cpan > install DBD:mysql 하면 에러나는데..

우선 밖으로 나가서,

~/.cpan/build/DBD-mysql-xxx 에서

$ perl Makefile.PL INSTALL_BASE=~/perl --mysql_config=/home2/dev/db/mysql/bin/mysql_config

로 수동으로 빌드 해줘야 함.

뒤에 --mysql_config 옵션에 mysql 설치된 디렉토리에서 bin 디렉토리 보면 mysql_config 라는 파일 있는데 그거 지정해줘야 함.


위처럼 Looks good 이 나와야~~!

그다음

make

make install


드디어 mysql_setpermission 을 쓸 수 있음!~

여기서, root 에 % host 를 추가해줄거이므로, 3번 선택.


3. 직접 user 테이블에 INSERT 하기





[오류]

1. ncurses 라이브러리 못찾는 경우

-- Could NOT find Curses  (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:127 (FIND_CURSES)
  cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)
  CMakeLists.txt:257 (MYSQL_CHECK_READLINE)


-- Configuring incomplete, errors occurred!

요따구로 나오는거..

$ sudo apt-get install ncurses5-dev 

$ sudo apt-get install ncursesw5-dev

로 설치 해야한다~ ! 꼭~ ncurses5-dev 를 설치~ 

ncursesw5 는 다국어 뭐시기란다..


2. CMAKE_CXX_COMPILER 에러 나는 경우


CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

CMake Error: Internal CMake error, TryCompile configure of cmake failed

-- Performing Test HAVE_NO_UNUSED_TYPEDEFS - Failed

-- GTEST_LIBRARIES:gmock;gtest

Warning: Bison executable not found in PATH

-- Library mysqlserver depends on OSLIBS -lpthread;m;crypt;dl

-- Configuring incomplete, errors occurred!


요따구 에러..

g++ 패키지 없어서 그렇것같음.


3. Bison 어쩌구 경고..
-- GTEST_LIBRARIES:gmock;gtest
Warning: Bison executable not found in PATH

$ sudo apt-get install bison
해주기

4. libpthread 의존성 어쭈구..

$ sudo apt-get install libpthread*


 다음에는 MySQL 의 아키텍쳐와 중요한 개념적인 이해에 대하여 써보도록 하겠습니다.


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
오늘 코딩을 하다가, retainCount 값을 찍어보는 테스트 코드를 작성했다.
그런데, 예상하지 못한 결과가 나온다..

코드는 이렇다.

- (IBAction) onTouchUpTest:(id) sender
{
    // NSString Object
    NSString* pString = [[NSString alloc] initWithString:@"Some String"];

    NSLog(@"String ==> %@", pString);
    NSLog(@"Retain : %08X", [pString retainCount]);
    [pString release];
    NSLog(@"Released .. Retain 2 : %d", [pString retainCount]);
    pString = nil;
    NSLog(@"Released .. Retain 3 : %d", [pString retainCount]);
    NSLog(@"Release again");
    [pString release];
    NSLog(@"Second Release OK");
   
   
    //=== 일반 Object
    LHttpCommManager* pManager = [[LHttpCommManager alloc] initWithServerInfo:@"ABC"];
    NSLog(@"Retain for Manager : %d", [pManager retainCount]);
    [pManager release];
    NSLog(@"Retain after release : %d", [pManager retainCount]);
    pManager = nil;
    NSLog(@"Retain after allocating nil : %d", [pManager retainCount]);
}

출력 결과는 참으로 웃긴다.

2010-10-12 23:14:54.331 TestBed[9108:207] String ==> Some String
2010-10-12 23:14:54.332 TestBed[9108:207] Retain : 7FFFFFFF
2010-10-12 23:14:54.333 TestBed[9108:207] Released .. Retain 2 : 2147483647
2010-10-12 23:14:54.334 TestBed[9108:207] Released .. Retain 3 : 0
2010-10-12 23:14:54.335 TestBed[9108:207] Release again
2010-10-12 23:14:54.335 TestBed[9108:207] Second Release OK

2010-10-12 23:14:54.336 TestBed[9108:207] Retain for Manager : 1
2010-10-12 23:14:54.337 TestBed[9108:207] Retain after release : 1
2010-10-12 23:14:54.337 TestBed[9108:207] Retain after allocating nil : 0

결과를 보면, 몇가지 주의해야 할 점들이 보인다.

1. NSString 의 경우, retainCount 가 7FFFFFFF 값으로, 양의 정수 최대치가 들어온다.
2. NSString 을 Release 하더라도, retainCount 가 줄어들지 않는다.
3. nil 을 할당 한 후에도, release 나 retainCount 함수가 nil 인 Object 에 대하여 실행 된다
4. 일반 Object 는 retainCount 가 최초 1이 제대로 들어온다.
5. release 를 한다고 해도, 바로 retainCount 가 줄어들지 않는다.

==> 결론은, retainCount 를 너무 의식하거나, 이를 기반으로 코딩하지 말아야 한다.
==> release 할 Object 가 nil 인지 검사하고 release 를 호출 할 필요는 없다

위 두가지의 값진 교훈을 오늘 얻게 되었다.!
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,


파라미터로 변수명 자체를 받거나 할 때, 유용한 방법으로,

#!/bin/ksh

SOME_VAL=100
STRING="SOME"

REAL=$(eval echo \$${STRING}_VAL)

echo "REAL : " ${REAL}

위와 같이 하면, $(eval echo \$${STRING}_VAL)  <-- 이 부분이 $SOME_VAL 로 변환된다.

반응형

'Software Development > Shell Script' 카테고리의 다른 글

Bash 프롬프트 변경  (0) 2009.11.15
블로그 이미지

Good Joon

IT Professionalist Since 1999

,