サンプルプログラム集

  1. LCD表示プログラム
  2. AKI3069LANボード附属のマザーボード上LCD(SC1602)に対して文字を出力する。

    #include <mes.h>

    int main() {
    int fd;

    fd = open("lcd0", 0);
    if(fd == -1) exit();
    fprintf(fd, "H8-3069F.\n");
    sleep(3000);
    ioctl(fd, 0, LCD_CLEAR);
    fprintf(fd, "MES:H8/OS 5.0");
    close(fd);
    }

  3. タイマー割り込みプログラム
  4. タイマー割り込み時間の指定は1ミリ秒単位でこのサンプルでは、1秒単位でinterval関数を呼び出す。
    タイマー割り込みが発生したら、タイマーは無効になるので、連続してタイマー割り込みを発生させるには、タイマー割り込み関数の最後にタイマー割り込みの指定をしなければならない。

    #include <mes.h>

    void interval() {
    printf("Timer\n");
    set_timer(interval, 1000);
    }

    int main() {
    int i;

    set_timer(interval, 1000);
    while(1);
    }

  5. ソケットAPIでダイアグラムデータ(UDPパケット)を送信
  6. 自分のマイコンのIPアドレスが 192.168.0.2 に設定されているものとする。
    送信元のIPアドレスが 192.168.0.2、ポート番号が 10000 として、送信先のIPアドレスが 192.168.0.1、ポート番号が 11000 に対してダイアグラムデータ(UDPパケット)を送信するプログラム例

    #include <mes.h>

    int main() {
    int sock, size, ret;
    struct sockaddr myaddr, addr;

    sock = udp_socket();
    myaddr.sin_addr = IPADDR(192,168,0,2);
    myaddr.sin_port = 10000;
    udp_bind(sock, &myaddr);
    addr.sin_addr = IPADDR(192,168,0,1);
    addr.sin_port = 11000;
    sendto(sock, "testdata", 9, &addr);
    udp_free(sock);
    }

    送信の場合はudp_bindが必須でなく、省略した場合、送信元は自分のIPアドレス・適当なポート番号となる。

  7. ソケットAPIでダイアグラムデータを受信
  8. 自分のマイコンのIPアドレスが 192.168.0.2 に設定されているものとする。
    ポート10000番を監視し、自分宛てにポート10000に対してダイアグラムデータ(UDPパケット)が届くまで待ち、受信をする。
    データを受信したら、dataに受信したデータの本体、addrには、送信元のIPアドレスとポート番号を取得することができる。

    #include <mes.h>
    static char data[1500];

    int main() {
    int sock, size;
    struct sockaddr myaddr, addr;

    sock = udp_socket();
    myaddr.sin_addr = IPADDR(192,168,0,2);
    myaddr.sin_port = 10000;
    udp_bind(sock, &myaddr);
    size = recvfrom(sock, data, 1500, &addr);
    printf("netdata is [%d:%s]\n", addr.sin_port, data);
    udp_free(sock);
    }

  9. ソケットAPIを使ったTCPサーバのサンプル
  10. 自分のマイコンのIPアドレスが 192.168.0.2 に設定されているものとする。
    ポート10000番に対する接続要求を受け付け、接続されたら、相手から受信されたデータをそのまま相手に送信をする。
    もし、相手から「quit」という文字列を受信したら、自分から切断要求を相手に対して送って、接続を切断し、再び、ポート10000番に対する接続要求を受け付け状態に入る。
    また、相手から切断要求があったら接続を切断し、再びポート10000番に対する接続要求を受け付け状態に入る。
    もし、相手から「stop」という文字列を受信したら、自分から切断要求を相手に対して送って、接続を切断し、サーバを停止させる。

    #include <mes.h>
    static char data[1500];

    int main() {
    int sock, dsock, size, ip;
    struct sockaddr myaddr, cliaddr;
    char data[64];

    sock = tcp_socket();
    myaddr.sin_addr = IPADDR(192,168,0,2);
    myaddr.sin_port = 10000;
    tcp_listen(sock, &myaddr);
    while(1) {
    dsock = tcp_accept(sock, &cliaddr);
    if(dsock < 0) continue;
    ip = cliaddr.sin_addr;
    printf("Accept from %d.%d.%d.%d\n", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip & 0xff);
    while(1) {
    size = tcp_recv(dsock, data, 1500);
    if(size < 0) break;
    if(memcmp(data, "quit", 4) == 0) {
    break;
    }
    if(memcmp(data, "stop", 4) == 0) {
    tcp_free(sock);
    printf("Server stopped.\n");
    return 0;
    }
    tcp_send(dsock, data, size);
    }
    tcp_free(dsock);
    printf("Disconnect.\n");
    }
    }

  11. USBデバイス初期化とデバイス情報取得プログラム
  12. USBホスト制御プログラムのサンプルで、USBバスのリセットを行い、USBアドレス0でデバイスの初期化を行ってからUSBデバイスにUSBアドレス2番を割り当てます。
    そして、エンドポイント0でコントロール転送により、USBデバイスの各種情報の取得を行い、その結果を画面に表示します。
    ダウンロード usb.h usb.c