[질문]펄스 만들기.....
글쓴이: serendip / 작성시간: 금, 2003/10/10 - 12:13오전
만들수 있을지 알고 싶습니다.
쓰레드건 nsleep()을 사용하건..커널 타이머건..select()건지..간에..
검색해도 답답합니다. 딱 부러지게 이야기 해주실분이 있을지..
전체 주기 250us 인 펄스를 만들고 싶습니다.
set 즉 1되는 시간은 변수로 두어 조정이 가능하도록 하고 싶습니다.
최소 정밀도는 1us 입니다.
커널 타이머를 보니까 10ms 이하로는 설정을 해줄수가 없더군요..
일정 시간이 지난 후에 어떤 함수를 실행시키거나 어떤 작업을 해주고 싶습니다.
10ms 이하의 시간 이후에 작업해주고 싶은데 어떻게 하면 좋을까요?
가능한건가요?
Forums:
잘 아는 건 아니지만.
잘 아는 건 아니지만,
예전에 LABVIEW 카드로 펄스 제네레이터를 만들어 본적 있긴합니다만..
그 때 카드만 100만원 주고 샀는데, 대략 정확도는 4us였던 걸로 기억합니다. rising time이 400ns나 돼서, duration이 1us이던 펄스가 거의 다 뭉개졌던 기억이 있습니다.
일반적인 방법으로한다면, PC상에서 저런 인터페이스 카드 없이는 안될거 같습니다. ( 저런 인터페이스 카드는 자체 버퍼를 가지고 있고 내부 타이머가 있는 걸로 알고 있습니다. ) 굳이 PC상에서 펄스를 만들 필요가 없는 거라면, Arbitarary Function Generator 같은 걸 써보는 것도 좋을 것 같습니다.
음.. 이게 맞는지 몰겟군요.... 험험..예전에 LCD 컨트롤 하믄
음.. 이게 맞는지 몰겟군요.... 험험..
예전에 LCD 컨트롤 하믄서 섰던건데.. 물론 open source 졍 ㅋㅋ
uPause (int delayCalls)
{
#if defined DELAY_GETTIMEOFDAY
struct timeval current_time,delay_time,wait_time;
// Get current time first thing
gettimeofday(¤t_time,NULL);
// Calculate when delay is over
delay_time.tv_sec = 0;
delay_time.tv_usec = delayCalls;
timeradd(¤t_time,&delay_time,&wait_time);
do {
gettimeofday(¤t_time,NULL);
} while (timercmp(¤t_time,&wait_time,<));
#elif defined DELAY_NANOSLEEP
struct timespec delay,remaining;
delay.tv_sec = 0;
delay.tv_nsec = delayCalls * 2100; //org 1000
while ( nanosleep(&delay,&remaining) == -1 )
{
delay.tv_sec = remaining.tv_sec;
delay.tv_nsec = remaining.tv_nsec;
}
#else
int i;
for (i = 0; i < delayCalls; ++i)
port_in (port);
//TODO: put in option for nanosleep rather than dummy I/O call
#endif
}
이게 아니믄 할수 업구용.. 이게 맞았으면 좋겟네용...
그럼 수고하세용
아참 코드 올릴때 bbcode 쓰라고했는데 그거 어케 쓰는건지.. 쩝.
hi 용
감사요
답변 감사드려요..
음..펄스만 만드는게 아니라..
다른 작업도 해야합니다.
그러니까..펄스는 기본으로 나가는 상황에서..
다른 연산을 수행해야 하죠..
폴링이 아닌..인터럽트가 필요한거 같습니다.
strong ARM에서는 남는 타이머 인터럽트로 했었는데..
PC 기반 인텔 CPU에는 남는 타이머 인터럽트 IRQ가 없을지...
꼭..그렇게가 아니더라도...
디바이스 드라이버나 user 프로그램에서 될거 같다라는 생각이 들어서...
혹시나..해보신 분 없을지....
이런 질문이 너무 초보같아도..너그럽게 봐주시길 바래요..^^;;;;
댓글 달기