http://seoltang.com/396

위사이트 참조 하면됨

결론 : atmega의 XTAL1핀에 전원을 공급해줬다 땠다를 몇번하면됨

참고 : 원래 500 ms 단위로  On, Off 하는 프로그램을 작성해서 붙이는것이 정석.

 

XTAL1  : 입력 단자이며 발진기의 증폭기가 인버팅 되어서 입력된다.

XTAL2 : 출력 단자이며 발진기의 증폭기가 인버팅 되어서 출력된다.

갖고 싶었던 Poker X 키보드가 드디어 내손에 들어왔다. 기계식 키보드를 처음 써보는.. 아.. 키감이.. ㄷㄷ 맴브레인 꺼져! 소리가 나올라구 하넹.. ㅋㅋ 후기 를 작성 해 본다.

레오폴드라는 인터넷 몰을 통해서 구입 했으며, 원 수입원은 IO매니아 에서 하는 것 같다.

 우선 배송 되어진 박스 책상이 좀 지저분 하넹 .. ㅎㄷㄷ

암튼 키보드가 작다고 생각 했는데 배송되어진 박스는 엄청 커서 놀랬지만...

 

박스를 뜯어보니.. 

요롷게 뽁뽁이로 돌돌돌 말려 있었다는... ㅋㅋ 포장은 잘 해서 배송 해주는 것 같다.

 실제 Poker X 의 박스이다. 상당히 작다

 

 이렇게 봉인 되어 있어요!

 봉인지를 살포시 자르고 안을 들여다보면 이렇게 키보드가 들어있음 안에 펑션키 와 스위치 모드간의 도움 종이 한장과 키보드 그리고 케이블, 키켑을 분리하는것 이렇게 들어있다.

 구성 품들

 원래 쓰던 키보드와의 사이즈 비교 상당히 비교가 많이된다.. 내 손으로 한뼘 하고 조금더 긴 포커엑스!

 

 케이블 연결하는 부분

 키 알하나를 빼 보았다. 넌클릭 모델로 갈축 갈색 스위치가 보인다.

 캡스락과 방향키 사용을위해 Fn+스페이스바 하면 캡스락, 스페이스바, 방향키(윈도우, 문서, 오른쪽 컨트롤, 쉬프트) 키가 불이들어오는것을 볼 수 잇다.

아직 펑션 조합키 쓰는것이 서투르지만 서서히 편해져 가고 있으며 펑션키를 잘이용하다보니 손을 키보드에서 벗어나지 않으면서 키보드의 모든 기능을 다 사용 할 수 있을거 같고, 또 vol + - 등 기존에 쓰던 키보드에 없던 단축키도 있어서 훨신 편한 것 같다 그리고 키보드가 작아서 공간 차지를 아주 적게 하고, 타이핑 할 때 마다 맴브레인 식 키보드와 확연히 다른 키감이 있다. (치는 맛이 있다고 해야할까..?) 그렇게 시끄럽지는 않아서 여러 사람이 있는 곳에도 쓸만하지만 솔직히 도서관 에서는 조금 무리가 있을 지도 몰르겠다. 주변에 해피 해킹 키보드를 쓰시는 분이 있어 키감을 비교 해보면 확실히 해피 해킹이 좋긴 좋넹 .. ㅠㅠ 비싼건 다르긴 달라.. ㄷㄷ @.@ 포커 엑스가 해피해킹보다 약~~간 더 작은 사이즈다 ㅎ 그래도 기계식 처음 써보는 사람으로 이건 확실히 신세계이긴하다.. 이렇게 키 덕이 되는건가.. ㄷㄷ

그리고 오른쪽 윈도우키 = 한/영 키, 오른쪽 컨트롤 키 = 한자 키, 로 사용 하고있다.

 설정 방법은 아래의 두 파일을 이용 하는 것인데

오른쪽ALT한영키,_오른쪽CTRL한자키.reg

위 레지스터는 레오폴드 홈페이지에 가면 있는 파일이며 레오폴드 사이트에서 제공하는 파일이다. 오른쪽 알트키와 오른쪽 컨트롤 키를 각각 한영키, 한자키로 만들어 주는 레지스터 파일이다 한자키 까지는 좋지만 자세히 찾아보면 포커엑스에 오른쪽 알트키가 없다.. 덜덜... 어쩌나 싶어서 인터넷을 더 뒤져보니까 아래와 같은 어플리케이션이 한개더 존재 한다. 아래의 파일은 맥 키보드를 사용하는 유저들이 오른쪽 맥 키를 한/영키로 사용하 는 파일인데 오른쪽 윈도우키를 한/영 키로 바꿀 수 있다.

mackeybind.exe

 

위의 레지스터 파일을 먼저 실행하고, 그 후에 아래의 실행파일을 실행후 2개의 항목을 지정하는 것이 나오는데 위에것만 설정하고 세팅 해버리면 된다. 위에 것을 한글 로 선택 후 세팅하고난다음 컴퓨터를 재시작 하면 포커엑스의 오른쪽 윈도우키는 한/영 키, 오른쪽 컨트롤 키는 한자키 로 사용 할 수 있다.

이상.. 다음에 돈벌면.. 더 좋은 키보드를 장만하기를.. 바라며.. ㅋㄷ

'About me > ^^' 카테고리의 다른 글

레오폴드 FC700R Tenkeyless  (0) 2012.07.11
첫 블로그의 시작  (0) 2012.03.29

Monitor 를 이용한 상호 배제의 문제를 생산자-소비자(한계 버퍼) 문제에 적용하여 baci툴을 이용하여 구현한 것.

목표 및 내용

수업 시간에 배웠던 Monitor를 이용 상호 배제가 되도록 구현을 하는것 입니다. Monitor는 세마포어를 이용한 정확한 프로그램의 작성이 어렵기 때문에 고안된 것입니다. 기능은 세마포어와 동일하나 세마포어보다 제어가 더 쉽습니다. baci툴에서는 Hoare 의 방법이 이용됩니다. Monitor 의 구성요소는 C 언어에서의 구조체와 비슷하고 객체 언어에서는 클래스의 개념과 유사합니다. 구성 순서는 지역변수와 하나이상의 procedure 그리고 초기화 하는 문장의 순서대로 작성이 됩니다.  

모니터는 한 번에 하나의 프로세스만 모니터 내에 존재하게 하고, 공유데이터 보호를 위해서 모니터 구조 내에다가 공용변수를 둠으로써 상호 배제를 보장합니다. 모니터는 조건 변수를 통해서 조건이 만족될때 까지 대기하고 조건이 만족하여 가용 상태가 되면 대기 프로세스가 일을 수행 할 수 있도록 재진입 하게 됩니다.

조건변수에 적용하는 변수 두개는 wait연산과 signal연산이 있는데 baci 툴에서는 waitc, signalc 로써 사용 합니다.

 

소스코드

const int N = 10; //버퍼 변수 갯수를 정하는 변수

const int TRUE = 1; //참값

const int FALSE = 0; //거짓 값

monitor monSemaphore{ // baci cmimi ppt 의 예문을 토대로 작성을 하였습니다.

int buffer[N]; //공용변수

int nextin; //변수를 쓰고난 다음 변수를 지정하는 변수

int nextout; //사용한 변수를 나타내는 변수 사용하고나면 다음쓸변수로 값이 증가.

int count; //버퍼의 갯수를 세어서 공용버퍼가 비었는지 가득 찼는지를 비교 할 때 사용 하는 변수.

condition notfull; //조건변수 가득 찼음을 알리는 변수

condition notempty; //조건변수 비었음을 알리는 변수

void monP(int x) //생산자

{

if(count == N) //버퍼를 사용한 갯수가 버퍼의 크기랑 같으면

{

waitc(notfull); //대기상태로 빠트림

cout<<"-- buffer is full --"<<endl;

}

else //버퍼가 가득차지 않으면 else를 수행

{

buffer[nextin] = x; //외부에서 인자 값으로 보낸 값을 변수에 넣음.

cout<<nextin<<" buffer input "<<x<<" item"<<endl; //출력문

nextin = (nextin+1)%N; //다음 변수로 증가 %연산자는 버퍼를 환형으로 사용하 //기 위함

count = count+1; //한칸 생생했으므로 카운트를 증가시킴

signalc(notempty); //혹시 버퍼가 비어서 잠들어있는 소비자가 있을경우 깨움.

}

}

void monV(int x) //소비자

{

if(count == 0) //버퍼가 비어 있다면 생산자가 버퍼에 값을 넣을때 까지 대기상태로 빠짐.

{

waitc(notempty);

cout<<"-- buffer is empty --"<<endl;

}

else //버퍼가 빈 상태가 아니면 소비를 진행함.

{

x = buffer[nextout]; // 버퍼에 있는 값을 x에 담음

cout<<nextout<<" buffer consume "<<x<<" item"<<endl; //출력문

nextout = (nextin+1)%N; //이 역시 환형 변수로 사용하기위해 %연산자를 이용.

count = count-1; //하나를 소비하였으므로 카운트 값을 하나 줄여줌.

signalc(notfull); //혹시 버퍼가 가득차서 대기중인 생산자가 있으면 깨워줌.

}

}

init //모니터 안의 변수 초기화 문.

{

nextin = 0;

nextout = 0;

count = 0;

}

}

void producer(void) //생산자 스fp드

{

int x = 0; // x의 값을 제품번호의 개념으로 인자 값으로 넘겨줌.

while(TRUE)

{

monP(x);

x = x+1;

}

}

void consumer(void) //소비자 스레드

{

int x;

while(TRUE)

{

monV(x);

}

}

void main()

{

cobegin //생산자와 소비자를 병행 수행

{

producer();

consumer();

}

}

결과화면

 

'Study > OS' 카테고리의 다른 글

Semaphore 구현하기  (2) 2012.05.04
Test-And-Set  (0) 2012.04.27
Bakery 알고리즘  (1) 2012.04.22
Peterson 알고리즘  (0) 2012.04.22
jBACI 사용법  (0) 2012.04.15

+ Recent posts