HOME

SDCCの研究

 

目次

SDCC for PIC  ubuntu linux版の試用    2008.3.21

SDCC for PIC  Win32版の試用    2008.3.12

 

 

SDCC for PIC  ubuntu linux版の試用    2008.3.21

PIC16F84aのCコンパイルをフリーのコンパイラSDCCを使ってテストしてみました。

コンパイル、リンカはlinux版をインストールしました。(ubuntu 7.10でテスト)

sdcc は2.6.0をインストールしました。

gplinkは0.13.4をインストールしました。

PATHは通っているところにインストールされるので設定不要です。

ただし、gplinkを使って複数のオブジェクトをリンクする場合には、ライブラリPATHの指定は必須となります。makefile中で指定します。

gplinkではなくリンクにsdccを使用するとライブラリPATHが不要になります。新しいmakefileではgplinkを使用していません。 更新

赤字はコメントです。ファイルにはありません。

 

lcd16f84a.c ----------------

#include <pic16f84a.h>

 

extern int lcd(void);

extern int delay(void);

 

int main(void)

{

    //int at 0x2007 __config = _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF;

 

    return(lcd()+delay()); 特に何もしません、ダミーのリターン値です

}

 

lcd.c ----------------------

#include <pic16f84a.h>

 

int lcd(void)

{

    return(1); 特に何もしません、ダミーのリターン値です

}

 

delay.c --------------------

#include <pic16f84a.h>

 

int delay(void)

{

    return(1); 特に何もしません、ダミーのリターン値です

}

 

makefile --------------------

# Makefile PIC program for Linux SDCC

hex_name = lcdtest

sereis = pic14

device = 16f84a

CC = sdcc

CFLAGS = -m$(sereis) -p$(device)        # -V を追加すると詳細表示します

RM = rm

 

#ソースを追加したときに以下に.oを付けて追加してください

OBJS = lcd16f84a.o delay.o lcd.o

 

#コンパイルとアセンブル

.c.o:                                   # 下の行の -c はSDCCによるリンクをしません

        $(CC) $(CFLAGS) -c $<

 

#リンク(gplinkを使用)

#$(hex_name).hex : $(OBJS)

#       gplink -r -I"/usr/share/sdcc/lib/pic" \

#       -o $(hex_name).hex pic16f84a.lib libsdcc.lib \

#       $(OBJS)

 

#リンク(SDCCを使用、ライブラリパス、ライブラリの指定不要です)

$(hex_name).hex : $(OBJS)

        $(CC) $(CFLAGS) -o $(hex_name).hex $(OBJS)

        ls -l *.o *.hex

#lsは不要ならコメントにしてください

 

#クリーン(makeする前に実行してください)

clean :

        $(RM) -f *.o *.d *.p *.cod *.lst *.asm *.hex *.bak *~

 

 

 

 

ソースとmakefile 2008.3.21 Rev2

 

SDCC for PIC  Win32版の試用    2008.3.12

PIC16F88のCコンパイルをフリーのコンパイラSDCCを使ってテストしてみました。

コンパイル、リンカはWindows版をインストールしました。(WindowsXP Pro SP2でテスト)

sdcc-win32 2.7.0 をダウンロードしてください。  追記 2.8.0が出ました。

gputils-win32  0.13.5をダウンロードしてください。

両方ともデフォルトでインストールして、最後にPATHを設定するか聞いてくるので必ずYES

こちらのソースのCONFIGを使わせてもらいました。詳しくは、田中さんのページをみてください。

tect.cとして保存します。

 

#include <pic16f88.h>

int at 0x2007 __config = _INTRC_IO & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _MCLR_OFF & _LVP_OFF & _BODEN_OFF;

 

void wait(unsigned int delay)

{

    while(delay--)

    {

        _asm

        NOP

        _endasm;

    }

}

 

void main(void)

{

    int dat = 0;

 

    OSCCON = 0x70;//internal 8MHz clock

    TRISA = 0xfe;//RA0 output port

 

    while(1)

    {

        dat = dat ^ 1;//bit 0 反転

        PORTA = dat;//出力

        wait(50000);//待ち時間

    }

}

test.cのあるフォルダで以下を実行

sdcc -mpic14 -p16f88 test.c

コンパイルリンクが終わると以下のメッセージを表示します。

message: using default linker script "C:\Program Files\gputils\lkr\16f88.lkr"

 

makeファイルの使用

test.cのあるフォルダにmakefileをコピーします。makeはGCCのものがインストールされていてパスが通っているとします。もしWinAVRがインストールされていてパスが通っているなら問題ないです。

makefileの内容:

# Makefile for PIC program compile

name = test

sereis = pic14

device = 16f88

SDCC = sdcc

MV = mv

RM = rm

All : $(name).hex

%.hex : %.c

        $(SDCC) -V -m$(sereis) -p$(device) $<

clean :

        $(RM) -f $(TMPFILE) *.o *.d *.p *.cod *.lst *.asm *.hex *~

 

test.cのあるフォルダで以下を実行

make clean

make

メイクが終わると以下のメッセージを表示します。

sdcc -V -mpic14 -p16f88 test.c

    ・

    ・

    ・

message: using default linker script "C:\Program Files\gputils\lkr\16f88.lkr"

 

 

inserted by FC2 system