:::: MENU ::::
Posts tagged with: SDCC

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


W7100 TCP loopback

위즈네트W7100을 이용한 loopback소스입니다.

cfile10.uf.1564FB4D4D50CCD605E1B3.zip

W7100이 8051기반인데 많이 사용하는 Keil 컴파일러 대신에 SDCC 를 사용했습니다.
사용된 소스는 iMCU design contest에 출품한 Clayton Gumbrel([email protected])의 Remote Finger소스를 수정했습니다.

수정 내용은 소스를 간단하게 하기 위해 UART를 인터럽트를 사용하지 않는 루틴으로 바꾸고, application code는 제거를 하고 TCP loopback 코드를 포팅햇습니다.

아래 사진은 SDCC로 컴파일을 하고 나서 WizISP로 W7100EVB에 코드를 다운로드한 후 ping을 한 것을 캡쳐한 그림입니다.

Circuit Cellar의 project editor인 David Tweed가 쓴 iMCU W7100 article 첨부 합니다.
cfile30.uf.1775AE594D50C35C269DDB.pdf


무료 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

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