Host : ubuntu 10.04 LTS
U-boot
Kernel 2.6.35.7
Android 2.3.3
S5PV210을 사용하고 있습니다.
주기적으로 함수를 실행시키고 망고보드에서 동작 시간을 측정하기 위해서 타이머를 사용하려고 하는데
ndk-build를 이용해서 실행파일을 만들려고 하니 에러가 나네요
현재 문제점 : ndk-build시 다음과 같은 에러가 나옵니다.
undefined reference to `sigset' collect2: ld returned 1 exit status
sigset(SIGALRM, my_timer_callback);//에러가 나는 부분
위와 같이 에러가 나는 부분을 주석처리 하고 하면 컴파일이 잘 되고 실행도 잘 됩니다.
헤더파일은 ndk폴더에 c library들을 살펴보니 다 참조가 되어 있는것 같고...
타이머 소스의 sigset부분이 에러가 나는데 도통 이 에러가 왜 나는지 해결방안이 어떤것인지 모르겠네요
혹시 해결 방법을 아시는 분은 답글 부탁드립니다.
기타 질문 : 진행하면서 궁금했던 점이나 검색 능력 부족으로 구글님의 해결을 얻지 못한 의문점
1.ndk-build가 아닌 arm-2009q3 툴체인으로 컴파일한 바이너리 파일을 진저브레드가 올려진 망고보드에 실행시
아래와 같이 되는데 왜 이런 현상이 나오는 것인가요?
ndk-build나 gcc 크로스 컴파일러나 동일한 컴파일러를 사용하는것이 아닌가요?
# ./test /bin/sh: ./test: not found |
2. adc 디바이스 드라이버는 삼성커널에서 제공하는 것을 사용하고 있습니다.
adc값을 읽는 것은 성공했으나 조금 이상한 점을 발견했습니다.
터치 스크린을 연결했을 경우와 연결하지 않고 측정할때 값이 다릅니다.
연결된 경우 => 정상적으로 값이 읽어짐
연결하지 않은 경우 => 제대로 된 값이 읽히지 않고 일정한 쓰레기값(?)이 나옴
100번 읽어서 평균을 내보면 항상 값이 +- 50 오차율.. 사인파를 넣든 dc를 넣든...
이런 현상이 나오는 이유는 도대체 무엇일까요...ㅡ.ㅡ?
Android.mk
| | |
| LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := timer LOCAL_SRC_FILES := timer.c
include $(BUILD_EXECUTABLE) | |
| | |
컴파일 하려는 간단한 타이머 파일의 소스입니다. | | |
| #include <signal.h> #include <stdio.h> #include <sys/time.h> void my_timer_callback( unsigned long data ) { printf( "my_timer_callback called .\n" ); } int main() { struct itimerval time_val;
sigset(SIGALRM, my_timer_callback);//에러가 나는 부분 time_val.it_interval.tv_sec = 1; time_val.it_interval.tv_usec = 0; time_val.it_value.tv_sec = 1; time_val.it_value.tv_usec = 0;
if(setitimer(ITIMER_REAL, &time_val, NULL) == -1) { perror("Failed to set virtual timer!\n"); exit(1); }
if(getitimer(ITIMER_REAL, &time_val) == -1) { perror("Faild to get virtual timer B!!!!\n"); exit(1); }
while(1) { printf("it_value.sec = %d\ it_value.usec = %d\n", (int)time_val.it_value.tv_sec, (int)time_val.it_value.tv_usec); sleep(1); } return 0; } | |
| | |
sigset을 지원을 안하네요 ndk에서는
지원하는 API 사용해서 해결했습니당..