自分用の環境を整える

自分用の環境を整える

ソフトの開発は、自分用のライブラリやヘッダを作っておけば、ルーチンの使いまわしも
楽になりますし、マニュアルを引く手間も減り、バグも減り納期短縮に繋がります。

以下のようにプログラムとは別に、よく使うものを lib3052というフォルダに分け使い回します。
組み込みだとポート割りがその都度変わるため、EEPROM処理とかはライブラリ化できません。
ポート割り当てファイルを別個に作り、ライブラリを再コンパイルするのが効率よさそうです。

<program>
 <lib3052>
  3052h.h ------- ヘッダファイル(C 言語用)
  3052h.inc ----- ヘッダファイル(アセンブラ用)
  ad.inc -------- A/D コンバータの I/O 定義ファイル(アセンブラ用)
  da.inc -------- D/A コンバータの I/O 定義ファイル(アセンブラ用)
  itu.inc ------- ITU の I/O 定義ファイル(アセンブラ用)
  port.inc ------ ポートの I/O 定義ファイル(アセンブラ用)
  sci.inc ------- シリアルポートの I/O 定義ファイル(アセンブラ用)
  sprintf.c ----- 軽量 sprint 関数(C 言語用)
  system.inc ---- システムの I/O 定義ファイル(アセンブラ用)
  typedef.h ----- 型定義(C 言語用)
  wait.asm ------ ウェイト処理(C 言語、アセンブラ共用)
   :
 <プログラム 1>
 <プログラム 2>
   :

実際にはもっとたくさんのファイルが、ライブラリフォルダに入っています。

型を判りやすくする

色々なCPU、MPUを使っているとintが何バイトだとか、charのデフォルトは符号あり?なし?が
判らなくなります。また、Yellow SoftのCコンパイラにはBOOLがないので、VC で作った関数の
移植性も悪いです。
C言語もアセンブラも使うことがあるので、BYTE、WORD、DWORDも定義します。

typedef.h
//*****************************************************************************
//      H8 3052 型定義
//                                                      (C)YdlProg
//*****************************************************************************
#ifndef __TYPEDEF_H
#define __TYPEDEF_H
//=============================================================================
//      型定義
//=============================================================================
typedef unsigned    char    Uint8 ;             // 符号なし 1 バイト整数
typedef signed      char    Sint8 ;             // 符号つき 1 バイト整数
typedef unsigned    short   Uint16 ;            // 符号なし 2 バイト整数
typedef signed      short   Sint16 ;            // 符号つき 2 バイト整数
typedef unsigned    long    Uint32 ;            // 符号なし 4 バイト整数
typedef signed      long    Sint32 ;            // 符号つき 4 バイト整数
typedef unsigned    char    BYTE ;              // 符号なし 1 バイト整数
typedef unsigned    short   WORD ;              // 符号なし 2 バイト整数
typedef unsigned    long    DWORD ;             // 符号なし 4 バイト整数
typedef signed      short   BOOL ;              // BOOL
 
#define TRUE        1
#define FALSE       0
 
#endif

I/O を定義する

I/Oアドレスは覚えられないし、直接書くと後でわからなくなるので、ヘッダファイルで定義します。
コメントもきちんと書いておけば、マニュアルを見る回数も減ります。
私自体はH8のC言語で、I/Oアクセスする気にならないので、アセンブラ用のヘッダファイルしか
作っていません。

port.inc
;******************************************************************************
;       H8 3052 ポート
;                                                       (C)YdlProg
;******************************************************************************
IFNDEF  __PORT_H
DEFINE  __PORT_H
;------------------------------------------------------------------------------
;       ポート 1        P10/ A0
;                       P11/ A1
;                       P12/ A2
;                       P13/ A3
;                       P14/ A4
;                       P15/ A5
;                       P16/ A6
;                       P17/ A7
;------------------------------------------------------------------------------
P1DR            EQU     H'FFFFC0                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
P1              EQU     H'FFFFC2                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 2        P20/ A8
;                       P21/ A9
;                       P22/A10
;                       P23/A11
;                       P24/A12
;                       P25/A13
;                       P26/A14
;                       P27/A15
;------------------------------------------------------------------------------
P2DR            EQU     H'FFFFC1                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
P2              EQU     H'FFFFC3                ; データレジスタ(R/W)
P2PCR           EQU     H'FFFFD8                ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 3        P30/ D8
;                       P31/ D9
;                       P32/D10
;                       P33/D11
;                       P34/D12
;                       P35/D13
;                       P36/D14
;                       P37/D15
;------------------------------------------------------------------------------
P3DR            EQU     H'FFFFC4                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
P3              EQU     H'FFFFC6                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 4        P40/ D0
;                       P41/ D1
;                       P42/ D2
;                       P43/ D3
;                       P44/ D4
;                       P45/ D5
;                       P46/ D6
;                       P47/ D7
;------------------------------------------------------------------------------
P4DR            EQU     H'FFFFC5                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
P4              EQU     H'FFFFC7                ; データレジスタ(R/W)
P4PCR           EQU     H'FFFFDA                ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 5        P50/A16
;                       P51/A17
;                       P52/A18
;                       P53/A19
;------------------------------------------------------------------------------
P5DR            EQU     H'FFFFC8                ; データディレクションレジスタ(W)
                                                ;       b3-b0   0:入力
                                                ;               1:出力
P5              EQU     H'FFFFCA                ; データレジスタ(R/W)
P5PCR           EQU     H'FFFFDB                ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 6        P60/WAIT
;                       P61/BREQ
;                       P62/BACK
;                       P63/AS
;                       P64/RD
;                       P65/HWR
;                       P66/LWR
;------------------------------------------------------------------------------
P6DR            EQU     H'FFFFC9                ; データディレクションレジスタ(W)
                                                ;       b6-b0   0:入力
                                                ;               1:出力
P6              EQU     H'FFFFCB                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 7        P70/AN0
;                       P71/AN1
;                       P72/AN2
;                       P73/AN3
;                       P74/AN4
;                       P75/AN5
;                       P76/DA0
;                       P77/DA1
;------------------------------------------------------------------------------
P7              EQU     H'FFFFCE                ; データレジスタ(R)
;------------------------------------------------------------------------------
;       ポート 8        P80/RFSH/IRQ0
;                       P81/CS3/IRQ1
;                       P82/CS2/IRQ2
;                       P83/CS1/IRQ3
;                       P84/CS0
;------------------------------------------------------------------------------
P8DR            EQU     H'FFFFCD                ; データディレクションレジスタ(W)
                                                ;       b4-b0   0:入力
                                                ;               1:出力
P8              EQU     H'FFFFCF                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート 9        P90/TxD0
;                       P91/TxD1
;                       P92/RxD0
;                       P93/RxD1
;                       P94/SCK0/IRQ4
;                       P95/SCK1/IRQ5
;------------------------------------------------------------------------------
P9DR            EQU     H'FFFFD0                ; データディレクションレジスタ(W)
                                                ;       b5-b0   0:入力
                                                ;               1:出力
P9              EQU     H'FFFFD2                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート A        PA0/TP0/TEND0/TCLKA
;                       PA1/TP1/TEND1/TCLKB
;                       PA2/TP2/TIOCA0/TCLKC
;                       PA3/TP3/TIOCB0/TCLKD
;                       PA4/TP4/TIOCA1/A23/CS6
;                       PA5/TP5/TIOCB1/A22/CS5
;                       PA6/TP6/TIOCA2/A21/CS4
;                       PA7/TP7/TIOCB2/A20
;------------------------------------------------------------------------------
PADR            EQU     H'FFFFD1                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
PA              EQU     H'FFFFD3                ; データレジスタ(R/W)
;------------------------------------------------------------------------------
;       ポート B        PB0/ TP8/TIOCA3
;                       PB1/ TP9/TIOCB3
;                       PB2/TP10/TIOCA4
;                       PB3/TP11/TIOCB4
;                       PB4/TP12/TOCXA4
;                       PB5/TP13/TOCXB4
;                       PB6/TP14/DREQ0/CS7
;                       PB7/TP15/DREQ1/ADTRG
;------------------------------------------------------------------------------
PBDR            EQU     H'FFFFD4                ; データディレクションレジスタ(W)
                                                ;       b7-b0   0:入力
                                                ;               1:出力
PB              EQU     H'FFFFD6                ; データレジスタ(R/W)
 
ENDIF
h8/自分用の開発環境を整える.txt · 最終更新: 2018/03/18 09:56 (外部編集)
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki