2015年12月31日木曜日

[C/C++] 組み込みシステムプログラミング(1)

サンプル


/*
  組み込みシステムプログラミング
  第二章 点滅するライト
 */

#define LED_GREEN 0x40
#define P2LTCH 0xff5e /* P2LTCHレジスタのオフセット */
/*
  LED状態を反転
  ArcomのTarget188EB専用
 */
void toggleLed(unsigned char ledMask)
{
  asm {
    mov dx,P2LTCH /* レジスタのアドレスをロード */
    in al,dx /* レジスタの内容読み込み */
    mov ah,ledMask /* ledMaskをレジスタにコピー */
    xor al,ah /* ビット反転 */
    out dx,al /* レジスタに反転情報書き込み */
  };
}
/*
  指定された秒数待つ
 */
void delay(unsigned int nMilliseconds)
{
#define CYCLES_PER_MS 260
  unsigned long nCycles = nMilliseconds*CYCLES_PER_MS;
  while (nCycles--);
}
/*
  緑色LEDを一秒間に一回点滅させる
 */
void main(void)
{
  while (1) {
    toggleLed(LED_GREEN);
    delay(500);
  }
}
  • main()関数はスタートアップに合わせる
  • toggleLed()はボード依存の関数でasm文で記述

メモリテスト

メモリの読み書きをすることでメモリをテスト

typedef unsigned char datum; /* データバスの設定を8bitにする */
/*
  メモリ領域の特定アドレスに置かれているウォーキングワンテストを実行。
 */
datum memTestDataBus(volatile datum *address)
{
  datum pattern;
  for (pattern = 1; pattern != 0; pattern <<= 1) {
    *address = pattern; /* テストパターンを書く */
    if (*address != pattern) { /* 読み直し */
      return pattern;
    }
  }
  return 0;
}



「組み込みシステムプログラミング」より

0 件のコメント:

コメントを投稿