2011-12-03 3 views
3

RS232를 통해 iRobot Create에 연결된 자일링스 Virtex-II Pro FPGA 보드가 있습니다.printf 원시 데이터를 인쇄하십시오. 문자를 보내지 않으려면 인쇄하십시오.

iRobot은 바이트 정수 스트림을 명령으로 사용합니다.

나는 printf가 실제로 직렬 포트를 통해 보낼 것이라고 발견했다. (Hypterminal은 내가 무엇을 집어 든다.) printf를 사용하여 iRobot에 내 데이터를 보낼 수 있다고 생각한다.

문제는 printf가 ascii 출력을 위해 데이터 형식을 지정하는 것처럼 보이지만 실제로는 원시 데이터를 보내는 것이 좋습니다. 내가 보낸 실제 0x80으로 값 싶습니다,

printf(%x %x %x, 0x80, 0x88, 0x08); 

그러나 대신 16 진수 포맷하기 :

내가 좋아하는 일을하고 싶습니다.

아이디어가 있으십니까?

+0

컴파일러가 다음을 지원합니까? 'printf (0x80,0x88,0x08);'? – Jeff

+0

또는'printf ("", 0x80,0x88,0x08); ' – Jeff

답변

9

사용 fwrite :

char buf[] = { 0x80, 0x80, 0x80 }; 

fwrite(buf, 1, sizeof(buf), stdout); 

당신은 어떤 파일 핸들에 쓸 수 있습니다; stdoutprintf을 미러링하는 예입니다.

Posix 시스템에서는 파일 설명자에 쓰는 플랫폼 별 write 함수를 사용할 수도 있습니다.

+0

이것은 좋은 소식입니다! 그러나 나는 나의 stdout의 주소를 모른다. .. 나는 내가 파기하려고 노력할 수있다라고 생각한다. 내 아이디어는 그냥 RS232 RX 출력의 메모리 주소를 사용하는 것입니다 ... 그 생각처럼 들리니? – ZacAttack

+0

주소가 필요한 이유가 무엇입니까? 이전에'printf'를 사용해 주셔서 기뻤고'fprintf (stdout, ...) '와 같았습니다 ... 지금은 무엇이 문제입니까? 임의의 난수에 가장 확실하게 쓸 수는 없습니다. 그것은 당신이 합법적으로 얻은 FILE *이어야합니다. –

+0

어 ... 나는이 모든 시간 동안 printf를 사용했지만 stdio.h 라이브러리를 포함 할 수없는 것 같아요, 제 컴파일러는 그것을 좋아하지 않습니다 ... 나는 .. 손실. stdout을 사용하면 오류가 발생하며 라이브러리를 포함하면 오류가 발생합니다. – ZacAttack

3

대신 fwrite를 사용하십시오. Printf는 정의상 ASCII 프린터입니다.

char buf[] = {0x80, 0x80, 0x80}; 
fwrite(buf, 1, 3, stdout); 

원하는 것으로 보입니다.

9

대신 "%c%c%c" 형식을 사용하십시오.

관련 문제