본문 바로가기

FeElpAsS

[고급씨언어] delete 처리 하기 위한 goto 이용법 28 void foo() 29 { 30 FILE * fp = fopen("1.txt","r"); 31 if(fp == NULL) 32 { 33 goto delete_ok; 34 35 } 36 FILE * fp2; 37 if(fp2 == NULL) 38 { 39 goto delete_fp1: 40 } 41 42 FILE * fp3; 43 44 45 delete_fp2: 46 fclose(fp); 47 delete_fp1: 48 fclose(fp1); 49 delete_ok: 50 return ; 51 } 더보기
[안드로이드] Gesture Like it or not touch screens are becoming part of both developers and users life, i mean dont think i would buy one of Those uncool phones without touchscreen unless i really have to, would you? but the important point is that what is the Touchscreen use if applications doesn't support touchscreen interaction, in other words who is really gonna pay for a ,say, Picture management application if i.. 더보기
[Device]_vs1033 더보기
[고급C언어] 연산자 우선순위 연산자 우선순위 및 결합순서 컴퓨터언어는 개발자를 비롯한 컴퓨터 과학/공학자들의 요구에 따라 다양하게 진화되었다. 최대한 인간의 일반적인 사고를 바탕에 두고 문법과 체계를 만든 것이지만, 아무래도 언어 개발자들의 마인드가 포함되어 있어 일반에게는 약간 어렵기도 한 것 같다. 다음은 C++ 연산자 우선순위표이다. 이것을 잘 알아야, 복잡한 포인터와 구조체, 배열이 섞인 복잡해 보이는 식도 기계적으로 풀어낼 수 있다. 그러므로 다음은 반드시 암기 가능하면 이해할 사항이다. 간략본(http://www.winapi.co.kr/clec/cpp1/5-4-1.htm) 순위 연산자 결합순서 1 ( ) [ ] -> . 왼쪽 우선 2 ! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트 오른쪽 우선 3 *(.. 더보기
[LS3S8962]_Inter-Integrated Circuit (I2C) Interface LM3S8962의 I2C 인터페이스에 대하여 알아본다. 우선 Luminary 홈페이지에서 LM3S8962 Datasheet를 다운 받는다. Link : http://www.luminarymicro.com/products/LM3S8962.html#Datasheet 위의 링크에서 datasheet 및 각종 App Note, Software tool 등을 다운 받을 수 있다. Datasheet를 토대로 LM3S8962 I2C 인터페이스에 대하여 분석해 보도록 한다. Inter-Integrated Circuit (I2C) Interface I2C 버스는 two-wire를 통해 양방향 데이터 통신을 제공하고 serial memory, networking devices, LCDs, tone generators 등과.. 더보기
[고급C언어] void형 포인터 - void * voidp ① void형 포인터란? 널 포인터는 아무것도 가리키지 않은 포인터였다. void형 포인터도 같은 의미로 착각하면 안된다. void형 포인터는 어느 것이든 가리킬 수 있는 포인터이다. 좀더 늘여 쓴다면 "void형 포인터는 현재 가리키고 있는 대상체가 정해져 있지 않은 포인터"가 된다. void *imsip; imsip는 void형 포인터 변수이다. imsip는 가리키는 대상체가 정해져 있지 않은 포인터 변수라고 정의하였다. imsip는 포인터 변수이기 때문에 imsip 안에는 분명 주소 값이 저장되어 있을 것이다. 이것은 현재 어떠한 대상체를 가리키고 있는가? 이 말을 다시 풀이하면 "현재 가리키고 있는 주소 값에서 몇 바이트를 읽어올 것인가?"와 같은 질문이 된다. imsip 자체는 가리키는 대상체가.. 더보기
[고급C언어] *((int*)voidp)++ int imsi[]={7, 4, 9}; void *voidp; voidp=imsi; for(i=0;i 더보기
[고급C언어] 함수포인터 ① 함수 포인터의 정의 함수를 가리키는 포인터를 정의하는 것은 여타의 포인터 변수 정의처럼 상당히 쉬운 작업이다. type (*name)(arg list); name은 함수를 가리킬 수 있는 포인터 변수이다. (그러므로 name에 대한 4바이트가 할당된다.) "type"은 name이 가리키는 함수가 리턴하는 형(type)을 말하고 "arg list"는 name이 가리키는 함수의 매개변수 리스트이다. int (*imsi)(int, char *); imsi가 가리키는 함수는 int형을 리턴하고 인자로 "int"와 "char *"를 가진다. ② 함수 포인터 호출 함수 포인터를 초기화 한다는 것은 만들어 놓은 함수 포인터 변수에 함수를 대입하는 과정이다. 함수를 대입한다기 보다는 함수가 저장된 곳의 번지를 할당.. 더보기
[고급C언어] 연산자의 우선순위 우선순위 연산자 처리순서 ↑높음 ↓낮음 ++ -- +(부호연산자) -(부호연산자) ~ ! 캐스트 연산자 ← * / % → +(덧셈 연산자, 문자열 연결 연산자) -(뺄셈 연산자) → >>> → = → == != → & → ^ → | → && → || → ?: ← = += -= *= /= %= &= |= ^= >= >>>= ← 더보기
[고급C언어] 매크로함수, #ifdef, #ifndef, #undef, #if, #elif, #else, #endif - #if, #elif, #else, #endif문 조건부 컴파일을 위한 것으로 특정 조건이 만족하면 컴파일 작업을 수행하고 그렇지 않으면 수행하지 않도록 하기 위해 사용된다. 조건부 컴파일을 위한 전처리 지시자 살피기 #include #define MAX 20 void main() { int size; #if MAX > 100 size=100; #elif MAX > 10 size=10; #else size=0; #endif printf(" size = %d \n", size); } - #ifdef, #ifndef문 특정 매크로가 정의되어 있는지를 확인하기 위해 사용된다. #ifdef문은 특정 매크로가 정의되어 있는지를 물어 본다. #ifndef문은 “if not define”, 특정 매크로가 정의되어 .. 더보기
[고급C언어] 가변인자 우리는 지금까지 인자의 개수를 한정지어 프로그램을 작성하였다. int func_1(int, int, int); int func_2(int, char *, float); int func_3(char, char, char, char*);func_1(), func_2()의 인자 개수는 3이고 func_3() 은 4이다. 이 둘을 하나의 함수로 재작성할 수 있을까? 인자의 개수가 늘었다 줄었다 할 수 있는 함수를 작성할 수 있도록 도와주는 것이 가변인자이다. 인자의 개수 뿐만 아니라 인자의 형(type)도 상관없다. ① 가변 인자 사용 단계 ⓐ 함수의 원형 정의 인자 리스트에 "..."을 사용한다. int func(int, ...); 가변 인자에 해당하는 부분에 점을 세 개 나열하면 된다. int는 고정된 것이.. 더보기
[고급C언어] 구조체의 메모리 저장방식과 #pragma pack 구조체는 메모리에 어떤 식으로 저장될까 다음과 같은 소스를 보자. #include typedef struct _TEST{ char cData; short sData; int iData; }TEST; int main() { TEST TData={0,}; printf("cData size : %d\n", sizeof(TData.cData)); printf("sData size : %d\n", sizeof(TData.sData)); printf("iData size : %d\n", sizeof(TData.iData)); printf("TData size : %d\n", sizeof(TData)); return 0; } #include typedef struct _TEST{ char cData; short sD.. 더보기
[고급C언어] memcpy, memmove 함수 memcpy, memmove함수의 차이점을 알아보자. memcpy인 경우 배열을 다른 배열에 복사할때 사용한다. 왠만하면 이 함수를 사용하지만 같은 주소라인(같은배열)일 경우에는 문제가 발생한다. 실시간으로 덮어 쓰기 때문에 원래의 값을 바꿔버리는 경우가 있다. 이런 문제가 발생할 경우 memmove를 이용하여 내부적으로 원래 배열값을 저장하고 시행 된다. 더보기
[고급C언어] 함수호출규칙 함수 호출 규칙 1. __cdecl C 또는 C++ 프로그램에서 파라미터 전달시 디폴트로 사용 파라미터 전달은 오른쪽에서 왼쪽 방향으로 스택에 저장 파라미터 해제는 프로시저를 호출한 것이 책임짐(스택정리) 2. __stdcall Windows API 프로시저에서 아용 파라미터 전달은 _cdecl과 동일 파라미터 해제는 프로시저 복귀 전에 이루어짐 장점 - 함수 독립성이 뛰어남 - 프로시저를 부르기 전에 스택에 파라미터를 쌍아놓고 그 프로시저를 부르기만 하면 그 함수가 리턴된 후에는 그 프로시저의 스택 포인터가 이전 상태로 복원되었으므로 복귀된 후에 호출한 프로시저에 대하여 신경쓸 필요가 없음 - _cdecl 방식의 콜링컨벤션에 비해 코드 크리가 줄어든다. - 스택을 해제하는 코드가 호출한 프로시저 안에 .. 더보기
[LM3S8962] ADC Stellaris 제품군 ARM의 ADC모듈 기능 - 단일 및 치동 입력 구성 - 내부 온도 센서 - 샘플링 속도 500Ksps - 유연하게 구성 가능한 아날로그 to 디지탈 변환 - 플랙시블 트리거 컨트롤 : Controller(software), Timers, Analog Comparators, PWM, GPIO - 내부전압 3v 레퍼런스 이용 - 아날로그 회로의 파워와 그라운드는 디지털 파워와 그라운드와 구분되어 진다. 더보기
[LM3S8962] WatchDog 워치독 타이머 모듈의 기능은 시스템이 중단되지 않도록하는 것이다. 와치도그 타이머 모듈은 32bit 다운 카운터, programmable load register, interrupt generationn logic, locking register로 구성되어 있다. 워치독이란것은 말 그대로 해석하면 감시견이라고 할수 있다. 시스템이 이상이 생겨 비정상적으로 동작하면 자동으로 시스템을 리셋하여 다시 정상적으로 프로그램이 동작하도록 해주는 기능이다. 동작원리는 리셋이 가능한 타이며이며 타이머가 시간이 오버될때 리셋이 되도록 구성되어 있습니다. 그래서 워치독타이머를 활성화 한 상태에서 주기적으로 워치독타이머를 계속 초기화 해주어야 한다. 만일 메인 프로그램이 한번 돌때 한번씩 초기화 해준다고 할때 정상적일때는 .. 더보기
[LM3S8962] SysCtl - SysCtl은 디바이스의 클럭을 컨트롤하고 주변기기의 enable을 설정하고 디바이스를 구성하거나 reset시키고 디바이스의 정보를 보여준다. - Power Control 1. 내장 LDO LDO(Low Drop-Out)는 선형 레귤레이터 DC 전원 공급장치의 약자입니다. ARM의 Stellaris 제품군은 안정적으로 제공하기 위해 프로세서 코어와 온칩 주변 기기를 위한 내부 LDC 레귤레이터 통합 1.1 LDC 컨트롤 라이브러리 함수 SysCtlLDOSet - LDO 값 세팅 리셋 후, LDO를 출력 전압의 기본값은 2.50V SysCtlLDOGet - LDO 값 리턴 SysCtlLDOConfigSet - LDO 오류 컨트롤 관리에 사용, 일반적으로 사용되지 않음 2. 클럭제어 2.1 클럭 시스템 .. 더보기
[LM3s8962] GPIO 아래 링크에서 구할 수 있는 자료를 통해서 설명하도록 하겠습니다 자료 출처 링크 : http://www.zlgmcu.com/luminary/exploitation_guide.asp ※ GPIO port (Port A, Port B, Port C, Port D, Port E, Port F, Port G) 총 7개의 포트가 있으며 총 42개의 핀이 사용 가능합니다 ※ GPIO 핀을 세 종류의 모드를 포함한 다양한, 대한 더 많이 구성할 수있습니다 1. Input 모드 2. Output 모드 3. OutputOD (Output OpenDrain) 입력 전압 및 IC의 동작 전압과 다른 출력 전압을 얻고 싶을 때 주로 사용됩니다 스위치 출력이 "1"이 때, 연결이 끊어집니다 4. 클램핑 다이오드 역할은 외부 핀.. 더보기
[LM3S8962] Timer LM3S8962의 Timer에 대해서 알아본다. 우선 예제코드를 다운 받는다. Link : http://www.zlgmcu.com/luminary/exploitation_guide.asp 위의 링크된 사이트에서 timer 관련 파일을 모두 다운 받는다. timer 관련 문서 LM3SLib_Timer.pdf timer 관련 예제 코드 LM3SLib_Timer_16_CapCount.zip LM3SLib_Timer_16_CapTime.zip LM3SLib_Timer_16_OneShot.zip LM3SLib_Timer_16_Periodic.zip LM3SLib_Timer_16_PWM.zip LM3SLib_Timer_32_OneShot.zip LM3SLib_Timer_32_Periodic.zip LM3SLib_T.. 더보기
[SourceInsight] 소스인사이트 팁 총정리 출처 : http://andstudy.springnote.com/pages/3778703 0.개요 본 문서는 안드로이드 스터디 모임에서 소스 인사이트를 통해 소스 코드 드라이빙을 하는 데 필요한 기능을 정리한 것이다. 1.자주 쓰는 기능 1.1 프로젝트 내 특정 심볼을 검색할 때? F7 1.2 심볼이 검색이 안되는 경우는? 프로젝트 전체 파일들에 대해 lookup reference 기능을 이용해서 찾는다.(grep 명령어와 비슷) ctrl + / 1.3 특정 단어(심볼)을 하이라이트 해서 보고 싶을 때? shift + F8 아래 그림은 'coldboot' 함수를 하이라이트 한 것임. 2.소스인사이트 세팅 2.1 소스인사이트에서 ARM assembly language 추가하기 안드로이드 소스 중 일부는 a.. 더보기
[SourceInsight] 소스인사이트 팁5 : 오래된 창을 닫아주는 매크로 이매크로는 아래의 코드중에 4라고 세팅된 수만큼의 코드윈도우를 제외하고 모두 닫아 버리는 기능을 합니다. 수천개의 소스를 탐색하고 돌아다니다 보면 자신도 모르게 많은 창을 띄우게 되는데 이중에 가장 최근에 보았던 창을 제외 하고 모두 닫아 버리는 센스 입니다. /* // Closes all but the most recently visited windows and files. // Any dirty files are kept open. */ macro CloseOldWindows() { var hwnd var cWnd // This is the number of recent windows to keep open. You may change // this constant to suit your needs... 더보기
[SourceInsight] 소스인사이트 닙4 : 선택한 영역의 소스 비활성화 시키는 매크로 #if 0 ~ #endif로 코드를 비활성 시키는 동작을 하게 합니다. 편집시 선택을 한부분에서 키동작으로 이매크로를 실행 시키면 그부분의 아래위가 #if 0 ~ #endif로 작성되어 코드를 비활성 시킵니다. /*==================================================================== Create by sparrow Unused Code Block #if 0 unused code #endif ====================================================================*/ macro UnUsedCodeBlock() { hbuf = GetCurrentBuf(); hwnd = GetCurrentWnd(); sel.. 더보기
[SourceInsight] 소스인사이트 팁3 : if나 switch문의 뼈대를 작성해주는 매크로 아래의 매크로 역시 C++빌더 의 Ctrl + J 키를 흉내낸것입니다. if 나 switch등의 자주 이용하는 키워드의 뼈대를 작성해주는 코드입니다. /*==================================================================== Create by sparrow Ctrl + J (C++Builder Code Generation function. ====================================================================*/ macro CodeCompletation() { hbuf = GetCurrentBuf() ln = GetBufLnCur(hbuf) line = GetBufLine(hbuf,ln) DelBufL.. 더보기
[SourceInsight] 소스인사이트 팁2 : 소스와 같은 이름의 헤더파일을 여는 매크로 아래의 매크로는 C/ C++ 소스를 보는 중 같은 이름의 헤더 파일을 열도록 하는 매크로 입니다. C++빌더 의 경우 F6키와 같은 동작을 합니다. 이러한 매크로를 작성 하기 위해서는 도움말의 매크로 랭귀지를 살작 참조해가면서 작성하고 매크로 .em파일을 base프로젝트에 추가하여 작성한다음 Option -> Preference -> Symbol Lookups 페이지에 Project symbol path에 base프로젝트를 추가해주고 Menu나 Key Assign으로 해두면 이용 할수 있습니다. /*==================================================================== Create by sparrow 2005.09.30 Open C Source or H.. 더보기
[SourceInsight] 소스인사이트 팁1 : 매크로를 이용한 한글 주석 소스 인사이트 사용시 가장 불편한 점은 한글 입력이 제대로 되지 않는 다는 점이다. 이것은 유니코드 입력을 지원하지 않아 생기는 문제인데, 보통은 쌍자음의 입력시 커서를 앞으로 하나 옮겨 del키로 한번 삭제하여 수정이 가능하다. 다만 이 방법은 무지 귀찮은데 이것을 좀 더 편하게 해결할 수 있는 방법을 찾다가 아래와 같은 포스팅을 찾게 되었다. 원문 : Sourceinsight(소스인사이트) 에서 한글 주석 입력하기. -매크로이용 첫번째 먼저 위에 링크된 파일을 My Documents\Source Insight\Projects\Base 에 다운받습니다. 소스인사이트를 열고 base 프로젝트를 열어서 다운받은 파일을 프로젝트에 추가합니다. (중요~) (보시면 아시겠지만 hangulcmt 함수 달랑 하나 .. 더보기
[Visual Studio] IE 8.0 업데이트 후 VS2005, VS2008 class wirzard 스크립트 오류해결방법 1. regedit 실행 2. "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones" 항목에 "1000"키 생성 3. "1000"키 항목에 DWORD값 추가 이름 : 1207 값 : 0x000000 출처 : http://clansim.tistory.com/100 더보기
[LM3S8962] UART driverlib/uart.c driverlib/uart.h 1. UART 이용하기 1.1 UART 전제기능 Stellaris 제품군의 UART 특징 - IrDA를 지원하는 2개의 programmable 16C550-type UARTs 제공 - 16*8 bit receiver FIFO , 16*8 bit transmit FIFO 기능 - Baud rate를 설정 가능 (3.125Mbps까지) - 1/8, 1/4, 1/2, 3/4, 7/8의 FIFO 트리거 레벨 - IrDA serial-IR (SIR) encoder/decoder - DMA interface UARTIFLS - UART Interrupt FIFO Level Select UARTIM - UART Interrupt Mask UARTMIS - .. 더보기
[LM3S8962] SysTick 1. SysTick SysTick의 함수 prototype 1.1 SysTick의 간단한 소개 SysTick은 Cortex-M3 microprocessor의 NVIC controller에서 심플한 타이머의 한 부분 이다. 이것은 RTOS의 주기적인 인터럽트를 제공하기 위한 의도이지만 단순한 타이밍 목적으로도 사용한다. SysTick Interrupt 핸들러는 SysTick Interrupt Clear 소스가 필요하지 않다. SysTick 핸들러가 Call되었을때 자동적으로 처리한다. 1.2 SysTick의 기본 컨트롤/ 인터럽트 컨트롤 SysTickPeriodSet() 기능 SysTick Count의 주기를 세팅 원형 void SysTickPeriodSet(unsigned long ulPeriod) 변수.. 더보기
[LM3S8962] interrupt LM3S8962 Interrupt 예제에 대하여 분석해 보았다. 우선 예제코드를 다운받는다. Link : http://www.zlgmcu.com/luminary/exploitation_guide.asp 위의 링크된 사이트에 가서 3개의 파일 모두를 받는다. 맨 위의 pdf 문서는 interrupt libary를 설명한 문서이고, 아래의 두개의 zip 파일은 예제코드이다. 제1장. 인터럽트 제어 LM3SLib_Interrupt.pdf 문서의 초반부에 함수의 prototype에 대하여 설명하고 있다. 1.1 인터럽트 기본 프로그래밍 방법 Stellaris는 인터럽트를 위해 다음과 같은 Periperal Driver library가지고 있다. 1. Periperal 활성화 관련 인터럽트를 사용하기 위해서는 에.. 더보기
[LM3S8962] Bit band, 레지스터 접근법 Cortex-M3에서 제공되는 Bit Banding 기능을 알아보고 기존의 방식과 속도면에서 어떤 차이점이 있는지 어셈크드를 통해 알아보았다. 1. Bit Banding이란? Bit banding은 간단하게 말하면 bit operation을 빠르게 해줄 수 있는 방법을 제공, 즉 어떤 레지스터의 특정 비트를 1이나 0으로 변경하는 것을 매우 빠르고 쉽게 해줄 수 있는 것. 이것이 가능한 것은 하드웨어적으로 어떤 특정 비트를 각각 어떤 특정 어드레스에 할당을 해놓고 있는 것이다. SRAM부분과 Peripheral 부분에 이상한 형태의 내용이 있는 것이 보인다. bit band region 이라는 것이 있고, bit band alias라는 내용이 있다. 각각 공간은 1MB와 32MB가 잡혀 있다. alias.. 더보기