분류가 모호한 글2008. 12. 19. 09:56
무선설비기사 자격증 공부 하는데 머이리 잡다하게 많이 알아야 볼 수 있는지 ㄱ-

아무튼 불 대수는 우리가 사용하는 10진수에서 적용되는 대수와는 조금 다르다



연산자

AND / OR / XOR / NOT / NAND / NOR / NXOR 이 있으며 아래와 같은 진리표를 가진다.

AND

A

B

O

0

0

0

0

1

0

1

0

0

1

1

1

OR

A

B

O

0

0

0

0

1

1

1

0

1

1

1

1

XOR

A

B

O

0

0

0

0

1

1

1

0

1

1

1

0

NOT

A

O

0

1

1

0

NAND

A

B

O

0

0

1

0

1

1

1

0

1

1

1

0

NOR

A

B

O

0

0

1

0

1

0

1

0

0

1

1

0

NXOR

A

B

O

0

0

1

0

1

0

1

0

0

1

1

1

표 모양은.. 티스토리에게 항의를 하도록.. OTL


표기법
A AND B = AB = A·B
A OR B = A + B
NOT A = A' = Ā

공리
A+0=A
A+1=1
A·0=0
A·1=A
A+A'=1
A·A'=0
 A+AB=A
->  A(1+B)
->  A(1)
->  A

 X+X'Y=X+Y
->  X'(X'Y)'             <- 드 모르간 법칙 X'Y를 묶어서 적용
->  X'(X+Y')
->  X'X+X'Y'
->  0+X'Y'               <- 드 모르간 법칙 적용
->  X'Y'                  <- 드 모르간 법칙 적용
->  X+Y


교환법칙
A+B=B+A
AB=BA

분배법칙
A(B+C)=AB+AC

드 모르간 법칙
A+B = (AB)'
(AB) = (A+B)'

연산자 우선 순위
() > NOT > AND > OR


'분류가 모호한 글' 카테고리의 다른 글

확장자 sgm  (2) 2009.04.03
mp3 ID3 tag  (0) 2009.04.02
MD(Mini Disc) / UMD(Univeral Media Disc)  (0) 2009.03.03
이미지 포맷별 차이점  (8) 2009.02.24
gray code  (0) 2008.12.22
Posted by 구차니
Microsoft/Windows2008. 12. 18. 14:04
회사에 새로 오신분이 계셔서 TG 에버라텍 4600 을 샀는데...

오피스 깔고 패치 하고 나서 프린터 잡을려고 SAMBA 서버에 접속해서 파일을 복사 하는데

갑자기 블루 스크린...


이거 뭥미 -ㅁ-!?






오늘 다시 출근 하셔서 하시는 말씀이

"애들이 어제 쥬니버에서 게임하고 그랬는데 갑자기 블루 스크린이 떳다"



그래서 에버라텍과 비스타 블루 스크린을 검색하니 의외로 도움 되는 내용은 없었다.

아무튼 dump 파일을 보니 두개(덧. c:\windows\minidump 가 crash dump 파일 기본 위치임)

하나는 어제 발생한 것이라서 파일 명이 Mini121708-01.dmp인데 Mini112808-01.dmp는 뭐지 -ㅁ-?
최초 설치 하고도 삼보에서 한번 죽었는데 그걸 그냥 판건가? -ㅁ-!


아무튼 덤프 파일은 WinDbg 를 이용하여 분석하면 된다고 해서 MS 사이트에서 받아서 돌렸는데
결과는

Mini112808-01.dmp
Probably caused by : dxgkrnl.sys ( dxgkrnl+3d8b )

Mini121708-01.dmp
Probably caused by : NETIO.SYS ( NETIO+835b )


아마도 2008년 11월 28일은 삼보에서 제조 하면서 설치 중에 발생한 듯 하고,
이름만 봐서는 directX 관련 오류 인데..

2008년 12월 17일 오류는 조금 검색을 더 해보니
NETIO.SYS 관련 hotfix가 있다고 한다. [hotfix download]
[출처 : http://forum.soft32.com/windows/Netio-SYS-Errors-ftopict341619.html]


결론은.. 뽑기 운이 안 좋은 것 일려나..




Posted by 구차니
Programming/C Win32 MFC2008. 12. 18. 13:41
아래는 frhed 프로그램의 레지스트리 등록 부분의 소스이다.

    case IDM_CONTEXT:
        if (MF_CHECKED == GetMenuState(hMenu, IDM_CONTEXT, 0))
        {
           //WinNT requires the key to have no subkeys
            RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed\\command");
            RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed");
        }
        else
        {
            HKEY key1;
            LONG res = RegCreateKey(HKEY_CLASSES_ROOT,
                "*\\shell\\Open in frhed\\command",
                &key1);
            if (res == ERROR_SUCCESS)
            {
                char cmd[MAX_PATH];
                int len = sprintf(cmd, "%s %%1", _pgmptr);
                RegSetValue(key1, NULL, REG_SZ, cmd, len);
            }
        }
        break;
    case IDM_UNKNOWN:
        if (MF_CHECKED == GetMenuState(hMenu, IDM_UNKNOWN, 0))
        {
            HKEY hk;
            //WinNT requires the key to have no subkeys
            RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed\\command");
            RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed");
            if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk))
            {
                RegDeleteValue(hk, NULL);
                RegCloseKey(hk);
            }
        }
        else
        {
            HKEY key1;
            LONG res = RegCreateKey(HKEY_CLASSES_ROOT,
                "Unknown\\shell\\Open in frhed\\command",
                &key1);
            if (res == ERROR_SUCCESS)
            {
                char cmd[MAX_PATH];
                int len = sprintf(cmd, "%s %%1", _pgmptr);
                RegSetValue(key1, NULL, REG_SZ, cmd, len);
            }
        }
        break;
    case IDM_DEFAULT:
        if (MF_CHECKED == GetMenuState(hMenu, IDM_DEFAULT, 0))
        {
            HKEY hk;
            if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk))
            {
                RegDeleteValue(hk, NULL);
                RegCloseKey(hk);
            }
        }
        else
        {
            RegSetValue(HKEY_CLASSES_ROOT, "Unknown\\shell", REG_SZ, "Open in frhed", 13);
        }
        break;


notepad2의 아쉬운점이 컨텍스트 메뉴를 지원하지 않는 다는 점이었는데, 이 부분을 응용하여 적용하면
notepad2의 효용이 200배는 증가 할 듯 하다.
Posted by 구차니
Linux2008. 12. 18. 11:24
CALL source or . (dot operator) "include" another script

[출처 : http://tldp.org/LDP/abs/html/dosbatch.html]



In the last syntax ./ means current directory, But only . (dot) means execute given command file in current shell without starting the new copy of shell, The syntax for . (dot) command is as follows
Syntax:
. command-name
[출처 : http://www.freeos.com/guides/lsst/ch02sec01.html]




간단하게 환경변수를 쓰기 위해 만든 스크립트를 단순하게
실행하면, 별도의 쉘이 생성이 되어 실행되므로 현재 쉘에 적용이 되지 않는다.

그런 이유로 일반적으로 환경 변수로 사용하기 위한 스크립트를 실행 할때는 반드시
source [script.file] 로 실행을 한다.

source [script.file]와 동일하게
. [script.file] 을 실행해도 된다.
Posted by 구차니
embeded/80512008. 12. 18. 00:04
TIMER/COUNTER는 숫자가 클럭 마다 1씩 증가 한다.
8051의 경우에는 입력 클럭을 1/12 로 분기 해서 사용하므로
11.0592Mhz로 할 경우에 1초당 921,600 연산이 가능하다.
(반대로 이야기 하자면 921,600 카운트가 진행되면 1초라는 의미이지만,
16bit 카운터로는 65536이 한계이므로 0.07초 70ms가 측정 가능한 최고 시간이다)

일단 타이머와 카운터는 인터럽트나 이런것의 영향 없이 독립적으로 증가 하므로,
정확하게 시간을 측정할 수 있는데

내가 원하는 시간을 재기 위해서 어떻게 카운터를 설정하냐는 것이 문제였다.
(물론 알고 나니 그럴 고민 조차 의미가 없었지만 ㄱ-)

prescaler를 설정해서 1clock에 증가하는 숫자가 1이 아니어서 원하는 횟수를 돌고(원하는 시간후에)
timer/counter overflow interrupt를 발생시키는 것으로 알고 있었는데..

8051에는 일단 timer/counter에 대한 prescaler가 존재 하지 않는다.
(prescaler를 잘못 이해 한것인지는 모르겠지만..)

즉, 원하는 시간을 클럭으로 계산후에
Timer/counter의 초기 값을 설정해주고, 그 값이 overflow 되기를 기다리면 되는 것 이었다.

예를 들어 1ms 를 원한다면
1초 = 1000ms 이므로
대략 921.6 clock 후에는 overflow가 되도록 설정을 해야 하고
256을 넘어 서므로 16bit 카운터로 설정하여
16bit 카운터의 최대 값에서 원하는 시간을 뺀
"65536 - 921 = 64615 = 0xFC67" 을 타이머에 설정을 해주면
원하는 시간인 1ms 후에 overflow가 발생하게 된다.

그리고 overflow 이후에는 0으로 리셋되므로
overflow ISR(Interrupt Service Routine)에는 매번 타이머/카운터를  설정을 해주어야
주기적으로 시간을 측정할 수 있게 된다.

'embeded > 8051' 카테고리의 다른 글

keil compiler - memory type (code,xdata,idata)  (0) 2009.04.14
Keil compiler - Error : Segment too large  (0) 2009.04.13
Keil evaluation Limitation  (0) 2008.12.07
KEIL Cx51 - Warning L5: CODE SPACE MEMORY OVERLAP  (0) 2008.12.01
8051에 관하여  (0) 2008.11.28
Posted by 구차니
개소리 왈왈2008. 12. 17. 16:28
지인들이 어떻게 그걸 까냐고 하는 법을 모르겠다고 할 때 마다 해주는 말이 있다.


"아니 왜 그걸 못깔아? 잘 봐"

"다음"

"다음"

"확인"

"OK"

"설치"


오케바리?


참~ 쉽죠?








Posted by 구차니
프로그램 사용/GIMP2008. 12. 16. 17:55
GIMP를 쓰면서 불편했던 점은, 매번 곤혹을 치루게 했던 Smooth edge / Hard edge 옵션을
매번 클릭해서 바꾸어서 써야 한다는 점이다.

그런데 생각해보니까.. GIMP 환경 설정은 들어 가본적도 없었다 -ㅁ-!

부랴부랴 찾아 보니 설정 저장에 대한 항목은 있지만
기본 값은 '자동저장 하지 않음'

그런 이유로 매번 설정을 해주는 문제가 발생했던 것이다!


step 1. 편집 - 기본 설정을 살포시 누질러 준다.



step 2. 도구 옵션 항목에 "마칠 때 도구 옵션 저장" 을 확인해주고 겸사겸사
          "도구 옵션 저장" 버튼을 눌러 내친김에 저장하자!


Posted by 구차니
Linux2008. 12. 16. 17:35
굳이 파일이 존재 하는지 확인을 하려면

1. fopen()의 리턴값을 확인한다.
FILE *fopen(const char *path, const char *mode);
FILE 포인터로 리턴을 하는데 open 실패시 NULL을 리턴하며, errno에 에러를 기록함.

2. access()로 확인한다.
int access(const char *pathname, int mode);
리턴값을 바로 확인하면 됨.

3. fstat()의 리턴값을 확인한다
int fstat(int filedes, struct stat *buf);
리턴값을 바로 확인하면 됨.

구차니즘을 털고 2008.01.06일 테스트
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <time.h>
int main()
{
        int ret = 0;
        clock_t before;
        clock_t after;
        double res;
        FILE *fp;
        struct stat st;

        before = clock();
        fp = fopen("test.txt","rb");
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = access("test2.txt",F_OK);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = stat("test3.txt",&st);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        return 0;
}

로 테스트 하는데, 전부 0 tick이 나온다 ㄱ-
결론은 어느걸 쓰던지 현존 시스템에서는 지장이 없다는 의미인데, 임베디드에서 쓰기 위해서는
조금 더 자세히 조사를 해봐야 할 듯 하다.

dmesg | grep CPU
CPU0: Intel(R) Pentium(R) 4 CPU 3.40GHz stepping 0a

$ time ./a.out
0 - 0 = 0 tick
0 - 0 = 0 tick
0 - 0 = 0 tick

real    0m0.001s
user    0m0.000s
sys     0m0.001s

이래저래 측정이 안되는건 마찬가지 ㄱ-




fopen(open) / access / fstat 에러 모음은 아래 클릭!


'Linux' 카테고리의 다른 글

ls 명령어의 file type  (0) 2008.12.19
쉘 스크립트 명령어 . (meaning of dot in sheel script)  (0) 2008.12.18
execl() - excute a file  (0) 2008.12.08
fork : Not Enough Memory  (2) 2008.12.08
mkfs - ext2 & ext3  (4) 2008.11.21
Posted by 구차니
프로그램 사용/GIMP2008. 12. 15. 17:36
 
 

GIIMP의 도구 상자인데, 주의해야 할 부분은 아래의 부드럽게 하기 , 가장자리 딱딱하게 라는 녀석이다.
이녀석이 기본으로 선택되어 있으므로 의도하지 않은 부분까지도 선택이 된다.
그리고 선택 영역의 점선 표기도 Adobe Photoshop과는 다르게 기본 선택 영역만 점선으로 둘러 쌓인다.
포토샾의 경우에는 흐리게 선택되는 부분까지 점선이 표기 되는데, 이러한 표기법의 차이로 인해서 의도하지 않은
부분까지 한픽셀씩 벗어 나거나 분명히 점선 밖의 영역인데 색이 칠해지는 이해 하지 못할 현상이 발생이 된다.

위의 이유로 인해서 발생한 모습


점선의 우측이 선택된 영역인데 불구하고, 선택 영역이 아닌 좌측 영역 일부에 붉은색이 칠해 진것이 보인다.
위의 부드럽게 선택으로 인해서 약간은 근처까지 선택이 되는 문제인데, 조금은 심각한 버그라고 느껴질 정도이다.


이러한 것을 방지 하기 위해서는 선택과, 칠하는 녀석을
부드럽게 하기는 끄고 가장자리 딱딱하게는 켜고 사용하기 바란다.

Posted by 구차니
개소리 왈왈2008. 12. 14. 13:06
아부지는 60살이 다가 오시는 구세대이고
나는 이명박 안티에 삼성 안티에 노무현을 옹호(지지까지는 아니더라도) 하는 좌빨에 빨갱이에 반공분자이다.

TV에서 머가 나왔는지 모르겠지만 뜬금없는 이 써글넘의 뉴스로 인해서
집안 제2차 대전이 발발하게 되었다.


머.. 지금까지 횟수로 따져보면 2차를 넘어 가서 한 5차는 될 듯 하지만 말이다.
결론은 머 잠시 휴전..




에효오~ 그냥 아빠 오거든 정치 이야기는 패스 하자 응?
Posted by 구차니