추가 하드웨어 추가를 건너 뛰고 비트 뱅킹 경로를 사용하기로 결정했다면 그림만큼 어렵지 않습니다.
먼저, 통신 스레드는 실시간으로 진행되어야합니다.
#include<sched.h>
struct sched_param param;
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
if( sched_setscheduler( 0, SCHED_FIFO, ¶m ) == -1 )
{
perror("sched_setscheduler");
return -1;
}
지금부터, 스레드는 각 초에서 950ms에 대한 선점되지 않습니다 * 은 (을 기꺼이 제어를 반환하지 않는 한, sched_yield()
또는 usleep()
이제까지 선점하지 것이다, 적시에). 850MHz CPU를 사용하면 비트 뱅킹 루프가 가장 빠른 속도에서도 대부분 유휴 상태로 실행됩니다.
불행히도 때때로 제어권을 때때로 돌려 주어야한다는 요구 사항은 스레드가 잠든 동안 "상대방"이 보내는 모든 것이 영원히 사라질 것임을 의미합니다. 그러나 그러한 목적으로 변속기 제어를 사용할 수 있습니다. CTS 라인에 GPIO를 더 할당하십시오. 제어를 복원 할 때 양보하고 백업하기 전에 풀다운하십시오.
bcm2835_gpio_write(CTS_PIN, LOW);
usleep(10);
bcm2835_gpio_write(CTS_PIN, HIGH);
또는 (IMHO가 바람직하게) XON / XOFF 전송 제어를 사용하십시오-취침 전에 X232 문자를 RS232를 통해 보내십시오. 이들의 기본 ASCII 코드는 '\x13'
XOFF / "전송 중지"및 '\x11'
XON / "전송 다시 시작"입니다.
물론 원격 장치는 이것들을 준수해야합니다. 그렇지 않으면 일부 데이터가 손실됩니다.