본문 바로가기

전체 글903

startup code C 언어로 개발된 프로그램에서 main 함수는 누가 호출해 줄까요? 보통 컴파일 할 때 자동으로 startup code가 링크되어 프로그램을 실행하면 main함수가 실행 됩니다. 여기서 링크되는 startup code는 라이브러리에 들어 있으며 시스템 마다 다릅니다. 현재 사용하고 있는 yagarto toolchain의 경우 newlib이라는 라이브러리를 사용합니다. 이 startup code에서 main함수를 호출해 줍니다. newlib 라이브러리는 임베이드 시스템용으로 개발된 오픈 소스로 소스를 다운 받아 분석해 볼 수 있습니다. startup code는 어셈블리 언어로 작성되어 있으며 crt0.S라는 이름을 가지고 프로세서 마다 다릅니다. 여기서 crt란 C Runtime이라는 의미 입니다. new.. 2010. 6. 29.
EmbGreat Lake Swimmers Great Lake Swimmers - River's Edge from Nir Ben Jacob on Vimeo. 2010. 6. 25.
_sbrk_r FreeRTOS의 Heap_2.c를 Heap_3.c로 변경하였다. Heap_3.c는 표준 라이브러리에 있는 malloc과 free를 사용하여 heap영역의 메모리를 할당 받는다. 이 명령이 제대로 동작하려면 _sbrk_r 시스템 콜을 시스템에 맞게 구현해 주어야 한다. malloc을 호출 하여 메모리를 요청하면 라이브러리 내부에서 _sbrk_r를 호출 하여 메모리를 요구하도록 되어 있다. _sbr_r함수는 heap_end 포인터를 가지고 있어 호출 될 때 마다 갱신 되고 heap overflow를 채크 하며 heap 포인터를 리턴 한다. 2010. 6. 24.
Paper Dreams Paper Dreams from Kenneth Onulak on Vimeo. 2010. 6. 18.
Around Venezia Around Venezia from Icam on Vimeo. 2010. 6. 18.
printf FreeRTOS와 같은 RTOS에서 UART를 통해 printf와 같은 표준입출력 함수를 사용려면 어떻게 해야 할까? 표준입출력 함수는 보통 툴체인과 함께 제공된다. 코드내에서 stdio.h를 포함 시키고 함수를 사용하면 제공된 라이브러리가 같이 링크되어 라이브러리에 있는 함수가 호출 된다. 하지만 시스템 마다 UART가 다르므로 라이브러리에서는 입출력 시스템 콜을 호출하게 되며 이 시스템 콜 함수는 사용하는 시스템에 맞게 UART 입출력을 구현 해 주어야 한다. 그러므로 사용하는 컴파일러에 따라 시스템 콜 함수가 다르다. 현재 yagarto gcc 툴체인을 사용하여 개발 중인데 yagarto-bu-2.19_gcc-4.22-c-c++_nl-1.16.0_gi-6.8.50_20080408.exe 버전의 경우.. 2010. 6. 9.
최적화 옵션 컴파일 하여 나온 코드 크기가 커서 FLASH에 올라가지 않는 문제가 발생하여 최적화 옵션 -O2을 사용하여 코드 크기를 줄여 실행하였는데 시스템이 죽는 현상이 발생했다. 디버깅하여 원인 분석 결과 최적화 옵션에 의해 watchdog 인터럽트에서 오동작이 발생 하였다. 변수을 volatile을 선언하여 실행 하였더니 정상 동작 한다. GCC Optimization 은 다음 문서를 참조 한다. http://www.linuxjournal.com/article/7269 2010. 6. 8.
HISR FreeRTOS 에서 지원하지 않는 HISR를 구현하였다. HISR은 인터럽트 기법 중 하나로 인터럽트가 발생하면 그 인터럽트에 등록된 HISR 태스크를 활성화 하고 인터럽트 루틴에서 바로 나온다. 활성환된 HISR 태스크는 인터럽트 루틴에서 실행되는게 하니라 하나의 태스크로서 실행된다. 이 때 HISR태스크의 우선순위를 높게 하여 다른 일반 태스크들보다 우선적으로 실행 되도록 한다. 이런 방법을 사용하면 인터럽트 서비스 루틴에 머무르는 시간을 줄여 인터럽트가 중첩되거나 밀리지 않게 할 수 있다. 2010. 6. 4.
Timer Test E Project의 구현한 Timer 기능을 테스트 하였다. 2010. 5. 28.
Timer FreeRTOS에 구현되어 있지 않은 Timer 구현 하였다. 2010. 5. 27.
Queue & Event E Project의 OAL API와 FreeRTOS Queue를 연결하여 queue의 동작을 확인 하였다. FreeRTOS에는 Evnet가 구현 되어 있지 않은데 queue를 사용하여 Event를 구현 하였다. 2010. 5. 26.
Heap 보통 c 에서는 malloc()을 사용하면 Heap영역에 메모리가 할당된다. FreeRTOS의 경우 Heap 할당하는 방법으로 세가지 방법 중 하나를 선택하여 사용 할 수 있으며 malloc, free 함수를 사용하는 대신 pvPortMalloc과 vPortFree를 사용한다. Heap_1.c 배열을 사용하여 heap를 생성하므로 heap이 .bss 영역에 할당 된다. 아주 간단하게 구현된 반면 한번 할당된 메모리는 반환이 되지 않는 단점이 있다. Heap_2.c 역시 배열을 사용하여 heap를 생성한다. 리스트 구조를 사용하여 할당 한 메모리의 반환이 가능하다. Heap_3.c 컴파일러에 링크되는 malloc과 free함수를 호출 한다. 이 방법을 사용하려면 컴파일러에 맞게 heap영역을 설정해 주거나.. 2010. 5. 25.
Semaphore E Project의 FreeRTOS의 동작 테스트 중이다. 그중 semaphore를 OAL API와 연결하여 정상 동작을 확인 하였다. 2010. 5. 24.
Application Porting E Project의 태스크들중 Montor Task가 정상동작 하는 것을 확인하였다. 2010. 5. 20.
쇼옴니아 6.5 업그레이드완료 쇼옴니아 윈도우 모바일 6.5 로 업그레이드 하였습니다. 삼성 서버에 연결이 안되어 롬을 받아 옥탄으로 업글했습니다. 참고 : http://cafe.naver.com/bjphone.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=907676 2010. 5. 20.
FreeRTOS Porting E Project ARM9 SoC칩에 기존OS을 들어내고 FreeRTOS를 포팅 중이다. 하드웨어 관련 (software interrupt, uart) 초기화 작업과 FreeRTOS의 테스트 태스크들이 정상 동작하도록 하였다. 2010. 5. 18.
GCC 컴파일 환경 ADS 컴파일러를 사용하는 E Project의 컴파일러를 GCC로 변경하는 작업을 하였다. ADS 컴파일러는 구입을 해야 하지만 GCC는 공짜라서... 일단 기존 Makefile의 컴파일 옵션을 수정하고 문법이 맞지 않는 부분은 매크로를 정의 해서 구분 하였다. 2010. 5. 14.
2010년 트라이애슬론 대회 일정 날자 대회명 장소 종목 참가구분 주관 비고 3/7 경주시 철인3종경기연합회장배 동계듀애슬론대회 보문관광단지 R 5k + B 40k + R 10k 일반부 경주시연합회 4/4 제16회 천안듀애슬론대회 천안 독립기념관 및 주변도로 R 5k + B 40k + R 10k 일반/엘리트부 충남연맹 4/25 2010 국민생활체육 대축전 (시범종목) 부산시 S 750m + B 20k + R 5k 일반부 전국연합회 5/9 서울 월드챔피언쉽 시리즈 서울 S 1.5k + B 40k + R 10k 일반/엘리트부 대한연맹 5/30 강원도지사배 코리아 트라이애슬론대회 오투리조트 및 태백시 일원 S 1.5k + B 40k + R 10k 엘리트 일반부 강원연맹 6/6 제8회 제주 슈퍼맨대회 제주 성산일원 S 3k + B 140k + .. 2010. 5. 14.
소스 분석 FreeRTOS로 OS를 변경할 E 프로젝트 소스 받아 분석 2010. 5. 11.
ATMEL ARM9 FreeRTOS ATMEL AT91SAM9RL64 를 사용한 개발 보드에 FreeRTOS를 올려 보았다. FreeRTOS Demo 폴더에 ARM9_AT91SAM9XE_IAR 이 있어 이것을 기반으로 수정하여 FreeRTOS 테스트 프로그램의 동작을 확인 하였다. IAR컴파일러가 30일 평가판이라서 30일내에 완료해야 했는데 예상외로 빨리 끝낼 수 있었다. 먼저 AT91SAM9XE를 컴파일 하여 컴파일러가 에러없이 컴파일 된 것을 확인 한 후 폴더을 복사하여 RL에 맞게 디버깅 하였다. 수정 포인트는 다음과 같다. 폴더 복사 from "Demo/ARM9_AT91SAM9XE_IAR" to" Demo/ARM9_AR91SAM9RL_IAR" IAR IDE 설정 파일들 수정 serial.c 수정 USART_Configure에 AT.. 2010. 5. 7.
ARM7 Core 검증 기존 개발 소스를 받아 ARM7 SoC FPGA의 SRAM에 프로그램 로드 후 검증 -메모리 테트스 (내부 SRAM) - TIMER - UART - VIC FPGA에 구현된 ARM7 Core와 PERI들의 동작을 검증 하였다. 프로그램은 JTAG를 사용하여 FPGA내부에 구현된 SRAM에 올려 UART를 통해 동작을 확인 하였다. 2010. 5. 4.
셜록 홈즈 전집 1 - 주홍색 연구 아서 코난 도일의 셜록 홈즈 첫 번째 편 주홍색 연구. 홈즈와 닥터 왓슨의 첫 만남과 살인사건을 해결에 나가는 이야기이다. 《주홍색 연구(A Study in Scarlet)》, (1887년) 《네개의 서명(The Sign of Four)》, (1890년) 《셜록 홈즈의 모험(The Adventures of Sherlock Holmes)》, (1892년) 《셜록 홈즈의 회상록(The Memoirs of Sherlock Holmes)》, (1894년) 《바스커빌 가문의 개(The Hound of the Baskervilles)》, (1902년) 《셜록 홈즈의 귀환(The Return of Sherlock Holmes)》, (1904년) 《공포의 계곡(The Valley of Fear)》, (1914년) 《마.. 2010. 5. 2.
첫 출근 첫 출근이다. 컴퓨터 받아 개발 환경 구축했다. 이전 회사와 달리 작업 컴퓨터로 노트 북을 쓴다. 2010. 4. 29.
한국의 풍속 - 잔치 평촌 도서관에서 빌려 읽었는데 한국 고유 잔치의 유래와 역사을 설명한 책. 2010. 4. 26.