2011-10-19 2 views
1

저는 자일링스 스파르탄 6 FPGA 용 EDK 프로젝트를 진행하고 있습니다. Microblaze 마이크로 프로세서가 FPGA로 구현 된 마이크로 프로세서 시스템이 있습니다.임베디드 C++ 소프트웨어의 문자 집합 문제

Microblaze가 실행하는 소프트웨어 코드에 지정된 텍스트를 표시하기위한 자체 메모리 공간이있는 그래픽 pcore가 있습니다. 연관된 ASCII 테이블의 문자 수는 256 자입니다.

소프트웨어는 RS232 인터페이스로 텍스트를 가져옵니다. 영어 텍스트 (0-127)를 표시 할 때 모든 것이 괜찮습니다. 왜냐하면 영어 문자가 모든 문자셋에서 동일하기 때문입니다. 그러나 러시아어를 표시하려고 할 때 소프트웨어가 해당 ASCII 코드를이 기호와 연결할 수 없습니다.

0-255 ASCII 간격에 맞게 rs232의 텍스트를 구문 분석해야합니까?

+0

RS232 인터페이스를 통해 들어오는 텍스트의 형식은 무엇입니까? ASCII 및 확장 ASCII는 내 지식에 러시아어를 표시 할 수 없습니다. 코드 페이지는 Windows입니다. 소프트웨어가 UTF8/16/32를 제공하지 않으면 러시아어가 아닙니다. –

+0

또한 텍스트를 표시하기위한 옵션은 무엇입니까? UTF와 호환되지 않는 경우 어쨌든 러시아어를 표시 할 수 없습니다. –

+0

@MooingDuck 텍스트가 RAW 텍스트 형식으로 나오고 RS232를 통한 추가 프로토콜이 사용되지 않습니다. 나는 소스로부터 일련의 문자들을 보내고 임베디드 타겟 시스템에서 파싱한다. 텍스트를 표시하는 pcore는 혼자 개발되었습니다. 필자는 수동으로 FPGA 블록 RAM을 텍스트 메모리 (예 : 이전 DOS 시스템의 80x40 텍스트 모드)로 구성했습니다. 필자는 또 다른 양의 BRAM을 폰트 ROM으로 구성하여 8x16 콘솔 폰트 (키릴 문자 PSF 폰트 파일로 만든)의 256 자 이미지를 저장했다. 화면에 글자를 표시하기 위해서는 Microblaze 프로세서로 한 바이트의 텍스트 메모리 만 설정하면됩니다. –

답변

2

소스에서 사용하는 문자 인코딩을 알아야합니다. RS232는 비트 이동 방법 일 뿐이며 인코딩을 지정하지 않습니다. 예를 들어 소스 Windows입니까? 그렇다면 문자는 유니 코드 (UTF-8) 또는 code page 1251 일 수 있습니다. 이 인코딩을 알게되면 각 문자를 변환해야하며 아마도 256 바이트의 조회 테이블을 사용합니다. 소스가 UTF-8처럼 일부 문자에 대해 여러 바이트를 사용하는 경우 먼저 조회를 수행하기 전에 바이트를 문자 코드로 어셈블해야합니다.

+0

UTF-16 (가능하지는 않지만)도 가능합니다. 또한 _output_ 함수가 입력과 동일하면 조회를 수행 할 필요가 없습니다. –

+0

@MooingDuck, 당신 말이 맞아요. UTF-16이 될 수도 있습니다. 그러나 만약 그렇다면, ASCII 출력으로 그 자체를 보여줄 것으로 기대합니다. 또한 매핑이 필요하다고 가정합니다. 그렇지 않으면이 질문에 대한 질문이 없었을 것입니다. –

+0

@ Mark Ransom 소스 OS와 독립적으로하고 싶습니다. Windows, Mac 또는 Linux 일 수 있습니다. 정확히 어떤 종류의 인코딩이 사용되는지는 모르지만 영어 문자로 테스트했을 때 모든 OS의 매력처럼 작동했습니다. 소스에서 정보를 전송하는 데 필요한 charset을 어떻게 확인할 수 있습니까? 소스 OS간에 직접 수동으로해야합니까? –