'분류 전체보기'에 해당되는 글 84건

  1. 2011.01.09 string processing
  2. 2011.01.07 연슴장 스캔본
  3. 2010.11.18 [Ruby] Regex \0, \1, \2, ...
  4. 2010.10.30 apt-get
  5. 2010.10.22 gst
  6. 2010.10.05 [lds]
  7. 2010.10.04 [Lowlevel.c]
  8. 2010.09.30 [CustomAdapter]
  9. 2010.09.28 [MyHandlerTest]
  10. 2010.09.23 qt 메뉴 등록

string processing

|
#include <stdio.h>

#define TRUE    1
#define FALSE   0

void disp(char ch, int (*fp)(char)) {
        if (fp(ch)) printf("TRUE\n");
        else printf("FALSE\n");
}

int myisalnum(char ch) {
        if ((ch >= 'a' && ch <= 'z') ||
                        (ch >= 'A' && ch <= 'Z') ||
                        (ch >= '0' && ch <= '9')) {
                return TRUE;
        } else {
                return FALSE;
        }
}

int mystrlen(const char* str)
{
        int i;
        for (i = 0; str[i] != '\0'; ++i);

        return i;
}

int mystrcpy(char* buf, const char* str)
{
        int i;
        for (i = 0; str[i] != '\0'; ++i) {
                buf[i] = str[i];
        }
        buf[i] = '\0';

        return i;
}

int mystrcat(char *buf, const char* str)
{
        int i;
        int j;
        for (i = 0; buf[i] != '\0'; ++i); //최종적으로 i는 '\0'의 위치에 있음 (buf[i] == '\0')
        for (j = 0; str[j] != '\0'; ++i, ++j) {
                buf[i] = str[j];
        }
        buf[i] = '\0';

        return j;
}

int mystrrev(char *str)
{
        int i;
        int len;
        char temp;

        for (i = 0; str[i] != '\0'; ++i); //i는 문자열의 길이가 됨
        len = i;
        //printf("%d\n", len);

        for (i = 0; i < len / 2; ++i) {
                temp = str[i];
                str[i] = str[len - i - 1];
                str[len - i - 1] = temp;
        }
        str[len] = '\0';

        //debug start
        printf("mystrrev debug : ");
        for (i = 0; str[i] != '\0'; ++i) {
                printf("%c", str[i]);
        }

        if (str[i] == '\0') printf("NULL\n");
        //debuf end

        return i;
}

int mystrcmp(char *str1, char *str2)
{
        int i;
        int len1, len2;
        int len;

        for (i = 0; str1[i] != 0; ++i);
        len1 = i;

        for (i = 0; str2[i] != 0; ++i);
        len2 = i;

        //긴 문자열의 길이를 구한다.
        len = (len1 > len2) ? len1 : len2;

        for (i = 0; i < len; ++i) {
                //같은 위치의 문자를 비교한다.
                if (str1[i] > str2[i]) {
                        return 1;
                } else if (str1[i] < str2[i]) {
                        return -1;
                }

                //둘 중 하나가 '\0'이 되면 앞의 문자들이 모두 같다는 것이다.
                if (str2[i] == '\0') {
                        return 1;
                } else if (str1[i] == '\0') {
                        return -1;
                }
        }

        return 0;
}

int main()
{
        int i;
        int (*fp[2])(char);

        char *str;
        char dest[10];
        char rstr[] = "abcdef";

        fp[0] = myisalnum;
        fp[1] = myisalnum;
        for (i = 0; i < 2; ++i) {
                disp('/', fp[i]);
        }

        str = "abc";
        i = mystrlen(str); //3
        printf("mystrlen : [%s] %d\n", str, i);
        i = mystrlen("\0"); //0
        printf("mystrlen : [%s] %d\n", str, i);

        mystrcpy(dest,str);
        printf("mystrcat : dest [%s]\n", dest);

        str = "def";
        mystrcat(dest, str);
        printf("mystrcat : dest [%s]\n", dest);

        mystrrev(rstr);
        printf("mystrrev : %s\n", rstr);

        i = mystrcmp("abc", "abc");
        printf("mystrcmp : %d\n", i);

        return 0;
}

And

연슴장 스캔본

|
-

012


-

012


-
And

[Ruby] Regex \0, \1, \2, ...

|
-
\0 : 마지막으로 일치한 부분
\1 : 마지막으로 일치한 전체 문자열 중 첫번째 그룹
\2 : 마지막으로 일치한 전체 문자열 중 두번째 그룹
...

"replacing in regex".gsub /\sin\s/, ' is easy in '
=> "replacing is easy in regex"

"replacing in regex".gsub /\sin\s/, ' is easy\0 '
=> "replacing is easy in regex"

문자열의 첫번째 문자부터 비교하면서 새로운 배열에 그 값을 넣는다.
그러면 일치하지 않는 부분은 그대로 새로운 배열에 들어간다.
일치하는 부분이 나오면 해당 부분을 치환하여 새로운 배열에 넣는다.
'\0'이 일치한 문자열 전체이므로 ' in '이 되어 'easy' 뒤에 들어간다.
그리고 남은 부분부터 다시 비교하면서 새로운 배열에 들어간다.

"replacing in regex".gsub /\si(n)\s/, ' is easy i\1 '
=> "replacing is easy in regex"


"AbcDef".gsub(/([a-z])([A-Z])/, '\1_\2').downcase
=> "abc_def"

마지막으로 일치한 부분이 "cD"이다.
첫번째, 두번째 그룹에 속하는 부분이 'c', 'D'이므로 각각 '\1', '\2'에 해당한다.
따라서, "abc_def"가 된다.

-
And

apt-get

|
1장. 리눅스 커널 프로그래밍 환경 구축
5. 데비안 패키지 관리

shell에서 문자 출력이 제대로 되지 않을 경우 언어환경이 한글로 설정되어 있기 때문인데 정상 출력을 위해 다음을 입력
# export LANG=C

apt-get 패키지
# vi /etc/apt/sources.list

deb http://ftp.kr.debian.org/debian/ stable main non-free contrib

stable : 안정판
main : 메인 패키지
non-free : 자유 소프트웨어가 아닌 것들
contrib : 라이선스 소프트웨어에 의존하는 자유 소프트웨어

안정판 : gcc 3.x 버전으로 컴파일 (ANSI C90)
불안정판 : gcc 4.x 버전으로 컴파일 (ANSI C99)

2.6.10 까지 : gcc 3.x 버전으로 컴파일 가능, gcc 4.x 버전으로 컴파일하면 비표준 C 코드들을 오류로 경고
2.6.11 이후 : gcc 4.x 버전으로 컴파일 가능, gcc 3.x 버전으로 컴파일 가능 (gcc 3.3)

6. SSH 환경 설정하기

텔넷은 전송되는 데이터가 그대로 노출되기 때문에 암호화를 통해 전송되는 SSH를 가장 많이 사용

7. bash 환경 설정하기

LANG=C; export LANG; : 언어 설정을 추가해서 메시지 깨짐을 제거

echo -ne '\033[11;0]' : 경고 비프음을 제거

export LS_OPTIONS='--color=auto'
eval "'dircolors'"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# source /root/.bashrc : 변경 사항 적용

make modules_install 시 에러
Version requires old depmod, but couldn't run /sbin/depmod.old: No such file or dir
해결책 : cp /sbin/depmod /sbin/depmod.old




'linux' 카테고리의 다른 글

gst  (0) 2010.10.22
SHELL  (0) 2010.08.22
쉘프로그래밍  (0) 2010.06.05
라이브러리 만들기  (0) 2010.05.31
gdb 사용법  (0) 2010.05.31
And

gst

|
gst-plugin-ugly x264 에러 : ./etc/x264ex~.c 585 b_bframe_pyramid --> i_bframe_pyramid


gcc -v 인클루드 패스 볼 수 있음


'linux' 카테고리의 다른 글

apt-get  (0) 2010.10.30
SHELL  (0) 2010.08.22
쉘프로그래밍  (0) 2010.06.05
라이브러리 만들기  (0) 2010.05.31
gdb 사용법  (0) 2010.05.31
And

[lds]

|
설계와 구현을 통한 임베디드 OS의 이해와 응용(1) - Overview

설계와 구현을 통한 임베디드 OS의 이해와 응용(2) - 개발환경 구성 및 부트로더 작성(1)http://www.hanb.co.kr/network/view.html?bi_id=1166
설계와 구현을 통한 임베디드 OS의 이해와 응용(2) - 개발환경 구성 및 부트로더 작성(2)http://www.hanb.co.kr/network/view.html?bi_id=1167
설계와 구현을 통한 임베디드 OS의 이해와 응용(3) - cuteOS의 시작 부분(1)http://www.hanb.co.kr/network/view.html?bi_id=1170
http://clansim.tistory.com/tag/elf32-littlearm lds 상세주석

'AT91SAM7S256' 카테고리의 다른 글

[Lowlevel.c]  (0) 2010.10.04
And

[Lowlevel.c]

|


[1단계 - EFC Init] (내장 플래시 메모리 컨트롤러 초기화)

[소스 코드]

1
2
3
4
5
6
#ifdef AT91SAM7S512 //선택적 컴파일, 전처리지시어
	AT91C_BASE_MC->MC0_FMR = AT91C_MC_FWS_1FWS; // 1 Wait State to work at 48MHz
	AT91C_BASE_MC->MC1_FMR = AT91C_MC_FWS_1FWS; // 1 Wait State to work at 48MHz
#else
	AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS; // 1 Wait State to work at 48MHz
#endif

[소스 분석]
Makefile에 TARGET=AT91SAM7S256으로 정의되어 있으므로 else문이 실행된다.
메모리 컨트롤러는 임베디드 플래시 컨트롤러를 포함하고 있고, FMR은 플래시 메모리의 모드를 설정할 수 있는 레지스터이다.
메모리 컨트롤러의 FMR의 FWS (Flash Wait State)를 0x01로 설정한다. (리드 동작 : 2사이클 웨이트, 라이트 동작 : 3사이클 웨이트)
//내용추가

[매크로 분석]
1. AT91C_BASE_MC
#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC)0xFFFF_FF00) // (MC) Base Address

#define AT91C_BASE_MC ((AT91PS_MC)0xFFFF_FF00)

#define AT91C_BASE_MC ((struct _AT91S_MC *)0xFFFF_FF00)

AT91_CAST(AT91PS_MC) --> (AT91PS_MC) (AT91SAM7S256.h 64 line)
AT91PS_MC --> struct _AT91S_MC (AT91SAM7S256.h 720 line)

2. MC_FMR (MC Flash Mode Register)
#define MC_FMR (AT91_CAST(AT91_REG *)0x0000_0060) // (MC_FMR) MC Flash Mode Register

#define MC_FMR (AT91_CAST(volatile unsigned int *)0x0000_0060)

#define MC_FMR ((volatile unsigned int *)0x0000_0060)

AT91_REG --> volatile unsigned int (AT91SAM7S256.h 63 line)
AT91_CAST(volatile unsigned int) --> (volatile unsigned int) (AT91SAM7S256.h 64 line)

3. AT91C_MC_FWS_1FWS
#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations

#define AT91C_MC_FWS_1FWS (0x0100)

[매크로 분석 결과]
((struct _AT91S_MC *)0xFFFF_FF00) + ((volatile unsigned int *)0x0000_0060 = (0x0100);



[2단계 - PMC Init - STEP 1] (전력관리 컨트롤러 초기화)

[소스 코드]
1
2
AT91C_BASE_PMC->PMC_MOR = (((AT91C_CKGR_OSCOUNT & (0x40 << 8)) | AT91C_CKGR_MOSCEN));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));

[소스 분석]
line 1: 전력관리 컨트롤러의 메인 오실레이터 레지스터를 로 설정한다.
line 2: 메인 오실리에이터가 안정화될 때까지 기다린다. 왜냐하면 클럭 속도가 서서히 올라가기 때문이다.

[매크로 분석]
1단계 분석 방법과 동일

[매크로 분석 결과]
((volatile unsigned int *)0xFFFFFC20) = (0xFF << 8) & (0x40 << 8) | (0x1 << 0) = 0x4000 | 0x01
= 0100_0000_0000_0000 | 0x01
OSCOUNT = 0100_0000 (메인 오실레이터의 스타트업 시간을 8 * 슬로우 클록 주기수로 지정한다.
MOSCEN = 1로 설정하면 동작이 개시된다.


[3단계 - PMC Init - STEP 2] (전력관리 컨트롤러 초기화)

[소스 코드]
1
2
3
4
5
6
7
AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1           |
	AT91C_CKGR_OUT_0              |
	(16 << 8)                     |
	(AT91C_CKGR_MUL & (72 << 16)) |
	(AT91C_CKGR_DIV & 14);
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));

[소스 분석]
크리스털의 클럭 주파수는 18.432Hz
 
(p310)
 
이다. 이 값을 DIV로 나눈 값에 ~를 곲하면 96MHz가 나온다.
이 값이 PLL의 클럭 주파수가 된다.

그리고 이 값을 2로 나눈 값인 48MHz가 UDP의 주파수가 된다.
UDP가 필요한 이유는 프로그램을 Write할 때 USB를 사용하기 때문이다.

line 1: CKGR_USBDIV_1 = (0x1 << 28) : (PLL 출력 주파수 / 2)를 사용한다.
line 2 : AT91C_CKGR_OUT_0 = (0x0 <<14) : PLL 출력 주파수가 80~160MHz의 범위에 있다.
line 4 : AT91C_CKGR_MUL (0x7FF << 16) : PLL 회로에 의하여 주파수가 (MUL + 1)배로 곱해진다.
line 5 : AT91C_CKGR_DIV (0xFF << 0) : 메인 클록이 DIV로 나누어져 PLL 회로에 공급된다.
line 6 : PMC_SR의 2번 비트가 1이 될 때까지 기다린다. (PLL이 lock될 때까지 기다린다.)
line 7 : PMC_SR의 8, 9, 10번 비트 중 하나가 1이 될 때까지 기다린다. (마스터 클록이 ready 상태가 될 때까지 기다린다.)

[매크로 분석]
1단계 분석 방법과 동일

[매크로 분석 결과]
((volatile unsigned int *)0xFFFFFC2C) = //내용 추가



-

'AT91SAM7S256' 카테고리의 다른 글

[lds]  (0) 2010.10.05
And

[CustomAdapter]

|
커스텀뷰 xml 작성
<RelativeLayout>
<ImageView />
<TextView />
<Button />
</RelativeLayout>

리스트뷰 listtest.xml 작성
<LinearLayout>
<ListView />
</LinearLayout>

.java 작성
setContentView(R.layout.listtest)

ArrayList 생성
MyItem 생성하여 ArrayList에 추가
ArrayList를 커스텀어댑터에 붙임

CustomAdapter 클래스 정의
BaseAdapter 상속


CustomAdapter 객체 생성
MyListAdapter myAdapter = new MyListAdapter(this, R.layout.icontext, arItem);

ListView 생성
listtest.xml에서 listview를 가져옴
myList.setAdapter(myAdapter);

어댑터뷰에서 데이터를 가져오는 방법
객체에서 : new (this, customview_xml, data_instance)
xml에서 : createFromResource(this, data_xml, view_design)


-

'Android' 카테고리의 다른 글

[MyHandlerTest]  (0) 2010.09.28
[ImageButton, Toast]  (0) 2010.08.23
[AlertDialog2]  (0) 2010.08.19
[AlertDialog]  (0) 2010.08.18
[MenuTest]  (0) 2010.08.18
And

[MyHandlerTest]

|

MyHandlerTest.java
package net.itisn.com;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyHandlerTest extends Activity {
	TextView increaseText;
	TextView decreaseText;
	Button startButton;
	
	/** Called when the activity is first created. */
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        increaseText = (TextView)this.findViewById(R.id.increase);
        decreaseText = (TextView)this.findViewById(R.id.decrease);
        startButton = (Button)this.findViewById(R.id.start);
        
        increaseText.setTextSize(30);
        decreaseText.setTextSize(30);
        startButton.setTextSize(30);
        
        startButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				new Thread(new IncreaseThread(updateHandler)).start();
		        new Thread(new DecreaseThread(updateHandler)).start();
			}
		});
    }
	
	class IncreaseThread extends Thread {
		Handler updateHandler;
		int increaseValue = 0;
		
		public IncreaseThread(Handler updateHandler) {
			this.updateHandler = updateHandler;
		}
		
		public void run() {
			// TODO Auto-generated method stub
			while (true) {
				increaseValue++;
				Message msg = Message.obtain();
				msg.what = 0;
				msg.arg1 = increaseValue;
				updateHandler.sendMessage(msg);
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	class DecreaseThread extends Thread {
		Handler updateHandler;
		int decreaseValue = 100;
		
		public DecreaseThread(Handler updateHandler) {
			this.updateHandler = updateHandler;
		}
		
		public void run() {
			// TODO Auto-generated method stub
			while (true) {
				decreaseValue--;
				Message msg = Message.obtain();
				msg.what = 1;
				msg.arg1 = decreaseValue;
				updateHandler.sendMessage(msg);
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	Handler updateHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if (msg.what == 0) {
				increaseText.setText("Increase : " + msg.arg1);
			} else if (msg.what == 1) {
				decreaseText.setText("Decrease : " + msg.arg1);
			}
		}
		
	};
}


-

'Android' 카테고리의 다른 글

[CustomAdapter]  (0) 2010.09.30
[ImageButton, Toast]  (0) 2010.08.23
[AlertDialog2]  (0) 2010.08.19
[AlertDialog]  (0) 2010.08.18
[MenuTest]  (0) 2010.08.18
And

qt 메뉴 등록

|
1. 메뉴바 작성
QMenuBar menuBar = new QMenuBar;
2. 액션 작성
QAction newAction = new QAction(tr("&New"), this);
connect(newAction, SIGNAL(triggered()), this, SLOT(open()));
3. 메뉴를 메뉴바에 추가
fileMenu = menuBar()->addMenu(tr("&File"));
4. 메뉴에 액션 추가
fileMenu->addAction(newAction);


'Qt' 카테고리의 다른 글

[Qt Designer] 확장 다이얼로그  (0) 2010.09.22
Qt Designer  (0) 2010.09.18
Qt Creator Manual  (0) 2010.06.10
Qt Compile  (0) 2010.06.06
And
prev | 1 | 2 | 3 | 4 | ··· | 9 | next