중국에서 운영중인 사이트 COOCOX 가 있다.

 

여기에는 자채 개발한 디버거, RTOS, 개발환경, 개발툴 등이 있고

 

이중  많은 내용이 공개 되어 있다.

 

특히 디버거 쪽은 정말 관심이 간다.

 

홈페이지 : http://www.coocox.org/colink.htm

 

늘 느끼는 거지만 중국은 참 이런 부분에서 대단한듯 하다.

 

 

 

'공부 > 참고사이트' 카테고리의 다른 글

유니콥터  (0) 2013.08.05
블랙박스용 보조 배터리 장착  (0) 2012.12.27
각종 사이트  (0) 2012.11.15
윤덕용 교수님 홈페이지  (0) 2012.11.15
AC/DC 관련 제품 사이트  (0) 2012.11.14

LPC4357 은 NXP 에서 나온 MCU 다

특이한 점은 Cortex-M4와 M0 가 같이 들어가있는 멀티 코아 MCU 라는 것이다.

ICBANQ에 다음과 같은 기사가 있어서 해당 내용을 확인 하기 위해

http://www.icbanq.com/ELECINFO_NET/Elec_SemiProd_Detail.aspx?number=5577

 

element14에 가보았다.

http://www.element14.com/community/docs/DOC-51065?ICID=knode-nxpmm-space

 

LCD 없는 제품 가격이 108.063원

LCD 있는 제품 가격이 133,000 원

 

훅 땡긴다. 사볼까 고민 중

 

관련자료

 LPC4357_53_37_33.pdf

홈페이지

http://www.nxp.com/products/microcontrollers/cortex_m4/lpc4300/LPC4357FBD208.html

'공부 > 기타MCU' 카테고리의 다른 글

Nuvoton ARM Video SoC  (0) 2013.03.19
NUVOTON 에서 나오는 5V Cortex-M0 MCU  (0) 2013.02.05
FUJITSU 에서 나오는 5V Cortex-M3  (0) 2013.02.05
관심 가는 MCU  (0) 2012.11.15
LPC1850 내용과 자료 회로등  (0) 2012.11.15

 

네트웍을 공부 하다 보면 네트웍 장비 끼리 특정 구조(프로토콜)로 통신을 하고 있다는 것을 알게 된다.

이런 네트웍 프로토콜을 자세하게 확인해 볼 수 있도록 해주는 다양한 Tool 들이 존재 한다.

이번에 소개 하고자 하는 Tool 이 네트웍 패킷분석을 전문적으로 해주는 Wireshark 라는 Tool 이다.

 

관련 사이트 : http://www.wireshark.org/

 

초기에 이 Tool은 Ethereal 이라는 이름으로 나왔다. 물론 현재도 그렇지만 지금도 무료로 배포 되었는데

그 기능이 너무 좋아서 많이 사용을 해왔었다.

이후 Ethereal 을 개발 하던 앤지니어가 어떤이유에서 인지 Wireshark를 만들기 시작해고, 현재는

내가 아는 선에서 가장 좋은 Tool 로 자리 잡았다.

그럼 간단하게 사용 하는 방법을 확인해 보겠다.

첫 아이콘이 분석을 하고자 하는 Network Adapter를 선택 하게 한다. 이 버튼을 누르면

현재 보면 여러 개의 Ethernet Adapter를 확인할 수 있는데 이중 한 개 이상을 선택해서

Start를 누르면 해당 Network Adapter 에서 전송되는 패킷을 캡쳐 하게 된다.

( 내 PC에서 사용되는 Adapter는 Atheros…. 이기 때문에 이것을 선택해서 START 하겠다.)

 

그럼 아래와 같은 내용이 출력되는 것을 확인 할 수 있다.

원하는 DATA를 확인하기 위해서 현재 상태에서 확인도 가능하나 정지하고 하는 것이 보기는 좋다.

정지 방법은 아이콘중 X 표시 되어 있는 버튼을 누르면 된다.

 

사실 Network Adapter 에서 전송되는 패킷의 양은 상상 이상이고 해당 패킷에 대한 내용을 이해 하는

것도 상당한 공부와 내공이 필요 하다.

추후 시간이 난다면 해당 부분에 대한 설명을 해보고자 한다.

한가지만 더해본다면 현재 상태에서 TCP 만 확인해 보겠다.

위 그림처럼 표시 되는 것을 확인해 볼 수 있다.

 

(일부 정보는 혹시나 하는 마음에서 지웠다.)

컴퓨터 복구용 CD , Hiren Boot CD

Hiren Boot CD 는 CD 이미지(iso 파일로 되어 있다.)이다.

이 CD 에는 자동 BOOT가 가능하도록 되어 있고 컴퓨터에 문제가 발생시에

컴퓨터를 복구 할수 있는 각종 TOOL 이 들어 있다.

 

10.6 버전까지는 다수의 상용 프로그램이 들어 있어서 쓰기가 좋았으나

그 이상의 버전에서는 빠진 것이 많이 아쉽다.

그렇다고 최신버전이 사용 불가능 한 건 아니고 나름 쓸만하다.

 

관련 사이트 : http://www.hiren.info/pages/bootcd

 

이미지는 Torrent 등에서 구해야 한다.

요즘은 이 이미지를 USB로 만들어 쓸 수 있는 방법도 나와서

Cd 없이 사용도 가능하다.

 

 

여기는 편의상 스톱워치를 만들었다.

1 -> 프로젝트에 연결된 파일을 표시 합니다.

2 -> GUI 화면을 표시 합니다.

3 -> GUI 화면상에 있는 컴퍼넌트 list 가 대표명으로 표기, 선택 하면 해당 컴퍼넌트가 표시됨

4 -> 선택된 컴퍼넌트의 특성을 표시 합니다.

 

    

마우스를 이용해서 위치 및 크기 등을 조절 할 수 있다.

컴퍼넌트에 마우스 포인트를 이동 후 오른쪽 마우스를 누르면 여러 매뉴가 나타난다.

Generate Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 만든다.

신규 함수 생성시 사용한다. 주의 사항은 함수를 만든 상태에서 소스코드를 입력 하고

다시 만들어 버리면 기존 소스를 지울지 유지할지를 물어보는데 잘못하면 ~~

View Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 보여준다.

타이머를 발생시키기 위해 타이머를 추가 했다.

컴파일이 완료되면 보이지 않는다.

 

소스를 대충 보겠다.

 

변수 선언한다.

#include <ansi_c.h>

#include <cvirte.h>        

#include <userint.h>

#include <utility.h>

#include "test_app1.h"

 

static int panelHandle;

static int flag = 0;    //stop watch 사용용

static int flag1 = 0; // 프로그램 시작 초기화

static int flag2 = 0; //타이머 사용용

static long time_count =0;    //stop watch 사용용

static long time_count2 =0;    //타이머 사용용

char buf[100];

 

Main 함수

int main (int argc, char *argv[])

{

    if (InitCVIRTE (0, argv, 0) == 0)

        return -1;    /* out of memory */

    if ((panelHandle = LoadPanel (0, "test_app1.uir", PANEL)) < 0)

        return -1; //test_app1.uir이 없으면 실행불가

    DisplayPanel (panelHandle);

    RunUserInterface (); //여기서 화면이 표시된다.

    DiscardPanel (panelHandle);

    return 0;

}

 

기능을 선언한다.

int CVICALLBACK panelCB (int panel, int event, void *callbackData,

        int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_GOT_FOCUS:

 

            break;

        case EVENT_LOST_FOCUS:

 

            break;

        case EVENT_CLOSE:

            QuitUserInterface(0); //X 버튼 눌리면 종료

            break;

    }

    return 0;

}

 

버튼이 눌리면 처리하는 함수

int CVICALLBACK COMMANDBUTTON_A (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"아빠 바보");

            flag = 1;

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_B (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"그 바보가 아니라 천재");

            flag = 0;

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_C (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"누구세요 ??");

            flag = 0;

            time_count = 0;

            sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

            SetCtrlVal( panel,PANEL_STRING,buf);

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_D (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_COMMIT:

 

            GetCtrlVal(panel,PANEL_NUMERIC, &info);

            time_count2 = info * 6000 ;

            sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

            SetCtrlVal( panel,PANEL_STRING1,buf);

            flag2 = 1;

            

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_E (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            flag2 = 0;

            break;

    }

    return 0;

}

 

int CVICALLBACK NUMERIC_A (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    

    switch (event)

    {

        case EVENT_COMMIT:

            if(flag2 == 0)

            {

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

            }

            

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_F (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_COMMIT:

 

            if(flag2 == 0)

            {

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

            }

            

            break;

    }

    return 0;

}

 

타이머 동작 실행

int CVICALLBACK Timer_aaa (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_TIMER_TICK:

 

            if(flag1 == 0)

            {

                sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

                SetCtrlVal( panel,PANEL_STRING,buf);

 

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

                flag1 = 1;

            }

 

            

            if(flag)

            {

                time_count ++;

                sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

                SetCtrlVal( panel,PANEL_STRING,buf);

            }

 

            if(flag2)

            {

                if(time_count2 > 0)

                {

                    time_count2 --;

            

                    sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                    SetCtrlVal( panel,PANEL_STRING1,buf);

                    

                    if(time_count2 == 0)

                    {

                        flag2 =0;

                        Beep();

                        Beep();

                        Beep();

 

                    }

                }

            

            }

            break;

    }

    return 0;

}

 

추가로 Uir 파일 실행파일에 추가하기

Target Setting 에서 Embed project .UIRs 를 선택 한다.

 

예제 파일 다운로드 : 00001.zip

 

'공부 > CVI' 카테고리의 다른 글

CVI 프로젝트 만들기 2  (0) 2012.11.20
CVI 프로젝트 만들기 1  (0) 2012.11.20
CVI 가 window 7 64bit 를 지원할까 ?  (0) 2012.11.16
CVI 고찰  (0) 2012.11.16

User Interface Application.uir 를 선택하면 아래와 같이 GUI를 만들 기본 화면을 볼수 있다.

기본 Panel 에서 오른쪽 마우스 키를 누르면 각종 컨퍼넌트를 확인할 수 있고 이를

화면에 입력 할 수 있다. (적색원 표시 부분)

오른쪽 창에는 선택된 컨퍼넌트의 특성이 나온다. 이를 이용해서 각종 값을 조정할 수 있다.

여러 가지 를 선택해서 화면에 넣은 후 마우스를 이용해 크기 등을 변경하면 된다.

여기서 기본 화면을 만든다.

 

버튼을 만들어 보겠다.

선택하면 버튼이 입력된다.

버튼을 버블클릭 하면 특성 창이 나타난다.

중요 내용을 보면

Constant name : 내부 명칭을 선언

Callback function : 버튼을 누르거나 이벤트 발생시 연결되는 함수명을 선언

Control mode :

Shortcut Key : 특수키와 연결

Label : 표시 이름

 

Start 로 변경하고 이에 대한 특성은 아래처럼 처리 했다.

Callback function 을 보변 COMMANDBUTTON_A 로 되어 있는데 이것은 아래의 함수로 연결된다.

 

int CVICALLBACK COMMANDBUTTON_A (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

}

 

'공부 > CVI' 카테고리의 다른 글

CVI 프로젝트 만들기 3  (0) 2012.11.20
CVI 프로젝트 만들기 1  (0) 2012.11.20
CVI 가 window 7 64bit 를 지원할까 ?  (0) 2012.11.16
CVI 고찰  (0) 2012.11.16

CVI 프로젝트 만들기

먼저 CVI 를 실행하면 아래와 같은 화면이 나온다.

신규 프로젝트를 만들기 위해서 Project from Template 를 선택 한다.

User Interface Application 을 선택하고 프로젝트를 저장할 디렉토리를 선언한다

OK 를 누르면 프로젝트를 자동으로 만들어 준다.

(project name은 보기 편하게 변경하는 것을 추천한다.)

이때 디렉토리가 없으면 자동을 생성을 해준다.

'공부 > CVI' 카테고리의 다른 글

CVI 프로젝트 만들기 3  (0) 2012.11.20
CVI 프로젝트 만들기 2  (0) 2012.11.20
CVI 가 window 7 64bit 를 지원할까 ?  (0) 2012.11.16
CVI 고찰  (0) 2012.11.16

 

시리얼을 이용하던 TCP/IP를 이용하던 각종 장비를 설정하는 방법으로 아직까지도

Command 명령 처리를 많이 한다. 요즘 많이 쓰는 SSL 도 마찬가지인데

이런 방법을 사용하기 위해서는 접속 프로그램이 필요 하다.

가장 대표적인 것이 상용 프로그램인 SecureCRT 가 있는데 상용이라는 문제점이 있다.

이를 해결해주는 프로그램이 TeraTerm 이다.

 

원천 다운로드는 일본쪽에 있다.

영문 버전으로 다운로드 받으면 크게 문제 없다.

다운로드 : http://ttssh2.sourceforge.jp/

 

+ Recent posts