:::: MENU ::::
Posts tagged with: 8051

SDCC putchar 버그 수정

지난번 포스팅때 8051 무료 컴파일러인 SDCC를 소개했었고, 이를 이용해서 W7100 TCP loopback 코드까지 만들어 봤었다.
이미 그때도 printf가 잘 안되어서 이상하다고 했었는데, 이번에 telnet 코드를 포팅하면서 문제를 해결했다.
문제는 SDCC 컴파일러가 제대로 C 코드를 ASM으로 변환을 해주지 못하는게 원인… 역시 무료 컴파일러라서 그런가???

void putchar (char c) 
{
  SBUF = c;
  while(!TI);
  TI = 0;
}

위 putchar 함수가 어셈으로 변환된 코드를 보니 TI = 0 을 CLR TI 로 변환을 하지 않네요.
그래서 다음과 같이 inline assembler를 사용해서 수정을 하니 잘 동작을 합니다.

void putchar (char c) 
{
 SBUF = c;
 while(!TI);
__asm 
 clr TI
__endasm;
}

W7100A에 telnet server code를 SDCC로 포팅한 코드로 첨부.

cfile29.uf.181ED1344DE5F44423398E.zip


무료 8051 컴파일러 – SDCC

SDCC는 Small Device C Compiler의 약자입니다. GPL 라이센스를 따르는 free open source software입니다.
그리고 8051뿐만 아니라 motolora 60HC08 시리즈와 Microchip PIC16, PIC18시리즈도 지원을 하며, Linux, Windows, MAC OS를 지원하네요. 관련자료는 => http://sdcc.sourceforge.net/ 에서 찾을 수 있습니다.

http://sourceforge.net/projects/sdcc/files/ 에서 사용하는 OS 맞는 버젼을 다운받으시고 인스톨하시면 됩니다.
압축이 풀린 폴더에는 다음과 같은 내용의 파일들이 설치 됩니다.

In <installdir>/bin:
sdcc – The compiler.
sdcpp – The C preprocessor.
sdas8051 – The assembler for 8051 type processors.
sdasz80, sdasgb – The Z80 and GameBoy Z80 assemblers.
sdas6808 – The 6808 assembler.
sdld -The linker for 8051 type processors.
sdldz80, sdldgb – The Z80 and GameBoy Z80 linkers.
sdld6808 – The 6808 linker.
s51 – The ucSim 8051 simulator.
sz80 – The ucSim Z80 simulator.
shc08 – The ucSim 6808 simulator.
sdcdb – The source debugger.
sdcclib – A tool for creating sdcc libraries
asranlib – A tool for indexing sdcc ar libraries
packihx – A tool to pack (compress) Intel hex files.
makebin – A tool to convert Intel Hex file to a binary and GameBoy binary image file format.
In <installdir>/share/sdcc/include
the include files
In <installdir>/share/sdcc/non-free/include
the non-free include files
In <installdir>/share/sdcc/lib
the src and target subdirectories with the precompiled relocatables.
In <installdir>/share/sdcc/non-free/lib
the src and target subdirectories with the non-free precompiled relocatables.
In <installdir>/share/sdcc/doc
the documentation

인스톨과정에서 PATH 설정이 되며, 해당 소스가 있는 폴더에서 각 실행 파일을 실행시키면 되는데, 일반적으로 make 파일을 만들어서 사용합니다.

메뉴얼을 보니 Microsoft Visual C++ 6.0/NET (MSVC)에 연결을 해서 사용하는 방법도 있습니다.

cfile30.uf.1576FA424D50A67D272F09.pdf

직접 사용을 해보니 예전에는 에러가 많았는데 이제는 어느 정도 안정화 되가는 느낌이네요.