본문 바로가기

[고급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.. 더보기