반응형
리눅스 타이머 시용할때 다음과 같은 에러 생기면 뒤에 뒤에 라이브러리 포함 -lrt 넣어줘야 함.
1
2
3
4
5
6
|
pi@raspberrypi:~/timertest $ gcc -o multitimer multitimer.c
/tmp/ccgVf2H0.o: In function `makeTimer':
multitimer.c:(.text+0x13c): undefined reference to `timer_create'
multitimer.c:(.text+0x18c): undefined reference to `timer_settime'
collect2: error: ld returned 1 exit status
|
cs |
이렇게 에러가 나면 컴파일 옵션 뒤에 -lrt 붙혀준다.
pi@raspberrypi:~/timertest $ gcc -o multitimer multitimer.c -lrt
pi@raspberrypi:~/timertest $ sudo ./multitimer
다음은 멀티 타이머 사용 소스코드
$nano multitimer.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
timer_t firstTimerID;
timer_t secondTimerID;
timer_t thirdTimerID;
static void timerHandler( int sig, siginfo_t *si, void *uc )
{
timer_t *tidp;
tidp = (void**)(si->si_value.sival_ptr);
if ( *tidp == firstTimerID )
printf("2ms\n");
else if ( *tidp == secondTimerID )
printf("10ms\n");
else if ( *tidp == thirdTimerID )
printf("100ms\n");
}
static int makeTimer( timer_t *timerID, int expireMS, int intervalMS )
{
struct sigevent te;
struct itimerspec its;
struct sigaction sa;
int sigNo = SIGRTMIN;
/* Set up signal handler. */
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = timerHandler;
sigemptyset(&sa.sa_mask);
if (sigaction(sigNo, &sa, NULL) == -1) {
perror("sigaction");
}
/* Set and enable alarm */
te.sigev_notify = SIGEV_SIGNAL;
te.sigev_signo = sigNo;
te.sigev_value.sival_ptr = timerID;
timer_create(CLOCK_REALTIME, &te, timerID);
its.it_interval.tv_sec = 0;
its.it_interval.tv_nsec = intervalMS * 1000000;
its.it_value.tv_sec = 0;
its.it_value.tv_nsec = expireMS * 1000000;
timer_settime(*timerID, 0, &its, NULL);
return 1;
}
int main()
{
makeTimer(&firstTimerID, 500, 500); //2ms
makeTimer(&secondTimerID,900, 900); //10ms
//makeTimer(&thirdTimerID, 100, 100); //100ms
while(1)
{
}
return 0;
}
|
cs |
컴파일과 실행
$ gcc -o multitimer multitimer.c -lrt
$ sudo ./multitimer
반응형
'라즈베리파이' 카테고리의 다른 글
자주 가끔 많이 항상 사용하는 리눅스 명령어 모음 (0) | 2020.02.11 |
---|---|
리눅스 signal 을 타이머 알람으로 사용하기 Linux signal use Timer Alarm (0) | 2020.02.11 |
리눅스 설치한 패키지나 라이브러리 목록 확인 (0) | 2020.02.07 |
라즈베리파이3 B+ i2c 주소가 이상할 때 (0) | 2020.01.03 |
가장 간단한 라즈베리파이 개발 환경 구성할 때 주의할 점 (0) | 2019.12.26 |