본문 바로가기

OldStory702

뤼팽 전집 1 to 3 - 모리스 르블랑 아르센 뤼팽 전집 중 집에 있는 1 편부터 3편 다 읽음. 나중에 알고 보니 총21편임. 1 - 괴도 신사 뤼팽 2 - 아르센 뤼팽 대 헐룩 숌즈 3 - 기암성 2010. 8. 12.
Blender art magazine blender 관련 팁 및 이슈에 관한 잡지로 격월로 발행된다. 2010. 8. 6.
나무 의자 만들기 안양공공예술프로젝트 관련 홈피 보다 발견한 나무 의자 만들기... 다음에 시간 나면 함 만들어 봐야 겠네요.. The chaise bordelaise is a participative, educative, social sculpture with a private use for the „INSIDERS“exhibition in Arc en Reve / CAPC, Bodeaux. The installation set-up consists of a 3*3*1m large pile of wooden boards, pre-cut for the production of armchairs by the visitors of the exhibition - inside the exhibition. The armchair .. 2010. 7. 27.
2010 하이서울 한강횡단 수영대회 개최 http://www.hangangswimming.com/ 에서 한강 수영 대회 접수 시작 하였습니다. 다음은 대회 코스입니다. 잠실지구에서 똑섬지구까지... 2010. 7. 26.
피크닉 테이블 버려진 빠레트가 있어 피크닛 테이블을 만들어 볼까 하고 들고 왔습니다. 비가 와서 젓어 있어 망치로 못을 뽑아 일주일 정도 말렸습니다. 완성된 사진입니다. 주말내 작업해서 완성 했내요. 색칠은 Bondex라는 목재 보호용 스테인을 스펀지로 칠하였습니다. 2010. 7. 25.
Task Run Time Stats FreeRTOS에서 vTaskGetRunTimeState() 함수를 사용하면 각 태스크들의 점유율을 볼 수 있다. 이 함수를 사용하기 위해서는 FreeRTOSConfig.h에 configGENERATE_RUN_TIME_STATS 값을 1로 정의 해야 하며 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS 함수 와 portGET_RUN_TIME_COUNTER_VALUE 함수를 정의 해 주어야 한다. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS함수는 말 그대로 run time states에 사용할 counter를 설정하고 portGET_RUN_TIME_COUNTER_VALUE는 현재 count값을 리턴하면 된다. counter의 클럭 주파수는 시스템 클럭보다 10.. 2010. 7. 22.
Task List FreeRTOS에서 현재 실행되는 Task들의 정보를 볼 수 있는 방법이 있어 구현 하였다. FreeRTOSConfig.h 파일의 configUSE_TRACE_FACILITY 를 1로 정의 하면 vTaskList라는 함수를 사용 할 수 있다. 다음과 같이 커맨드를 추가 하여 Task정보를 볼수 있도록 하였다. void static sys_cmd_task() { char info[1000]; printf("Name State Pr Stack Num n"); printf("--------------------------------------------"); vTaskList(info); } 다음은 출력 내용이다. State는 Task의 현재 상태를 나타내며, Pr은 우선순위를, Stack은 스택의 나머지를 .. 2010. 7. 21.
피카사3 자동 인물 찾기 기능 피카사3에 인물을 자동으로 찾아 주는 기능이 추가 되어 사용해 보았습니다. 사진속의 얼굴만 찾아서 같은 사람끼리 모아 주는 기능입니다. 어른 얼굴은 잘 찾는데 반해 아이들은 많이 틀리네요. 하지만 얼굴만 찾아서 어느 정도 비슷한 얼굴 끼리 모아주기 때문에 사진을 인물별로 분류하기 편한 것 같습니다. 다음은 우리 막내 얼굴 사진 모아 피카사의 도구에 있는 콜라주 기능을 사용하여 만들어 본 사진입니다. 2010. 7. 17.
2010 한강수영대회 2010년 8월 29일 (일요일)에 한강 수영 대회가 열린다고 합니다. 구체적인 내용 및 신청 방법은 아직 나와 있지 않습니다. 다음은 서울시 홈페이지 보도 내용입니다. 2010년 하반기 서울 도심 곳곳 스포츠대회 풍성 - 한강수영대회, 한강국제요트대회, 하이서울국제걷기대회, 하이서울마라톤대회 등 - 시민들의 생활체육참여 기회 확대, 관광객 유치ㆍ해외 홍보 등 효과 기대 □ 8, 9, 10월 한강, 고궁, 광화문광장 등 서울 도심 곳곳에서 시민들의 참여를 기다리는 각종 스포츠대회가 열린다. □ 서울시는 15일(목) 서울에서 열리는 2010년도 하반기 주요 스포츠대회 개최계획을 확정하였다고 발표하였다. ○ 시는 수영, 마라톤, 걷기대회 등을 통해 시민들의 생활체육참여 기회를 확대하고, 국제규모의 대회 개최.. 2010. 7. 15.
Descendants Descendants from Goro Fujita on Vimeo. 2010. 7. 15.
ATMEL USB 예제 소스 ATMEL 홈피에서 제공하는 USB 예저 소스를 보면서 ATMEL AT91SAM9RL64 USB 를 사용하는 방법을 익히는 중이다. at91sam9rl-ek.zip 를 받아 압축을 풀어 보면 usb-device 관련 예제가 많이 있다. 크게 audio-speaker, cdc-serial, ccid, hid, massstorage 그리고 composite 예제로 분류할 수 있겠다. Audio-speaker Audio-speaker 예제는 USB를 통해 PC 오디오를 ATMEL에서 받아 AC97를 사용하여 출력하는 예제 이다. 컴파일은 되었는데 PC에서 잡히질 않는다. 아무래도 보드가 EV보드가 아니고 오디오쪽 회로가 없어서 그런것 같다. CCID(Chip/Smart Card Interface Devices.. 2010. 7. 8.
VPATH make 를 사용하여 컴파일 할 때 object파일들을 특정 폴더에 생성하도록 하고 싶은 경우 VPATH를 사용하면 쉽게 makefile를 구현 할 수 있다. 예를 들면 src 폴더에는 소스만 inc 풀더는 헤더 파일이 있고 컴파일 된 오브젝트 파일들을 obj 폴더에 넣고 싶은 경우 다음과 같이 makefile를 만들어 주면 된다. CC=arm-none-eabi-gcc OUT_DIR = ./obj SRC_DIR=./src INC_DIR=./inc VPATH = $(SRC_DIR) CFLAGS = -I./inc SRCS=$(wildcard $(SRC_DIR)/*.c ) OBJS=$(patsubst %.c, %.o, $(notdir $(SRCS))) OUT_OBJS = $(patsubst %, $(OUT_D.. 2010. 7. 6.
section GCC 링크 스크립트에서 코드나 데이터의 메모리상의 위치를 section 이름을 사용하여 정의 한다. 어셈블리 코드에서는 section를 이름 뒤에 콜론(:)를 붙여 간단하게 정의 할 수 있다. 그러면 c언어내에서도 section를 정의 할 수 있지 않을까? 다음과 같이 attribute를 사용하여 정의 할 수 있다. __attribute__((__section__(".my_buffer"))) static int MyBuffer[0x10000]; 링크 스크립트를 다음과 같이 작성 했다면 MyBuffer를 sram 메모리에 위치 시킬 수 있다. MEMORY { sram : ORIGIN = 0x300000, LENGTH = 16K sdram : ORIGIN = 0x20000000, LENGTH = 64M }.. 2010. 7. 2.
어셈블러 확장자 GCC에서 어셈블 코드의 파일 확장자는 s이다. 그런데 소문자 s와 대문자 S는 컴파일러에서 다르게 인식한다. 대문자 S파일의 확장자는 어셈블리 하기 전에 C 컴파일러를 거친 후에 어셈블리를 한다. 그러므로 대문자 확장자를 사용하면 소문자 s확장자 파일에서 사용할 수 없는 매크로같은 것 들을 사용 할 수 있다. 2010. 7. 1.
main함수 없이 프로그램 짜기 statup code관련하여 crt0.S를 보면 _start 라는 셋션으로 시작 하는 것를 볼 수 있다. 이를 이용하면 main함수 없이 프로그램을 작성할 수 있다. 다음은 그 예제 소스이다. #include #include _start() { _exit(my_number(7)); } int my_number(int x) { printf("My favorite number is %dn", x); return 1; } 리눅스에서 다음과 같이 컴파일 하고 실행 해 볼 수 있다. $ gcc -nostartfiles test.c $./a.out My favorite number is 7. $ echo $? 1 $ 2010. 6. 30.
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.