ソフトウェア

  • Raspberry Pi Cmd Launcher
    Raspberry Pi Cmd Launcher Raspberry Piにキャラクタ液晶とプッシュスイッチを組み合わせてランチャーを製作する。 スイッチは左ボタンと右ボタンとエンターボタンの3つとする。液晶に表示されたメニューから左右ボタンで希望のコマンドを選択しエンターボタンで実行する。ユーザフィードバックはピエゾ素子で音を発生。 Hardware 液晶はi2c接続の2行8桁のものを使用する。秋月電子で販売中のバスリピーター付きのLCD(AQM0802A)。 スイッチは小さなプッシュ型でエンターボタンは少し大きめのものを選んだ。家庭内在庫品だ。 graph LR subgraph Raspberry Pi i2c pwm ...
  • Raspberry Pi に Beep音を実装する
    Beep sound on Raspberry Pi ラズパイにBeep音を実装したい。起動完了やアラート発生時にピッ・プーーと鳴らすのだ。 Hardware Hardware PWMを利用した実装例です。 Schematic BOM Name Type Spec. Piezo sounder Murata PKM13EPYH4000-A0 Dia.13mm, t6.9mm, 30Vp-p max. Transister Rohm DTC143E NPN Digital Tr. Rb=4.7kΩ, Rbe=4.7kΩ Resister Carbon film 10kΩ 0.1W Software Hardware PWMを利用した実装例です。 Source code python3 PIGPIOモジュールを使用しました。beep(0) でピポッです。 これから動作確認します。(^^;) import pigpio BEEP_PORT = 13 BEEP_DUTY = 500000 pi = pigpio.pi() def beep(pattern_id=0): ...
  • LIFEGAME
    LIFEGAME Python, Numpy, Curses の組み合わせでライフゲームを製作した。練習問題ですね。 cursesでconsoleのwindowサイズを取得、それに合わせてnumpy.arrayを作成しbufferとする。初期画面はnumpyのrandomで生成、世代更新はnumpyのsumを利用した。画面更新はbufferをスキャンして1つ1つ書き換え。ここは改良の余地がありそう。 #!/usr/bin/env python3 import numpy as np import curses as cs import time class lifegame: def __init__(self, ny, nx): self.field = np.zeros([ny, ...
  • リアルタイムふうOS キャラクタ表示LCDドライバ
    RTF-OS LCD driver LCD初期化タスクとドライバタスクの初期化 #define N_LCD_MSG 32 /* LCDコマンドバッファのバイト数 */ flag_type *flag_lcd_init; ...
  • リアルタイムふうOS キャラクタ表示LCDドライバ
    RTF-OS LCD driver MSC Real Time Foo OS を使用したLCDドライバの作例。ドライバ本体タスクと初期化シーケンスを実行するタスクの2つのタスクで構成する。利用するタスク(メインタスクと表記)から初期化タスクを呼び出すことで起動する。lcd_mainタスクは初期化が完了すると不要となる。 API 名称 処理内容 init_lcd LCD関連タスク、イベントフラグ、メールボックスの初期化 lcd_clear 表示をクリアする lcd_home カーソルをホームポジションに移動する lcd_print_str カーソル位置に文字列を表示する lcd_print_dec4s 16ビット符号付きバイナリデータを4桁の十進数とで表示する。負数は"-"を付加。 lcd_print_dec4 16ビットバイナリデータを4桁の十進数で表示する lcd_print_dec3 8ビットバイナリデータを3桁の十進数で表示する lcd_print_dec2 8ビットバイナリデータを2桁の十進数で表示する lcd_print_dec1 8ビットバイナリデータを1桁の十進数で表示する lcd_set_pos カーソルをx,y座標に移動する print カーソル位置に文字列を表示する。失敗なら再試行、成功なら状態遷移する。 locate カーソルをx,y座標に移動する。失敗なら再試行、成功なら状態遷移する。 home カーソルをホームポジションに移動する。失敗なら再試行、成功なら状態遷移する。 clear 表示をクリアする。失敗なら再試行、成功なら状態遷移する。
  • リアルタイムふうOS 全体の構成とAPI
    全体の構成とAPI リアルタイムOSの勉強のために作成したフレームワークです。タスクが移り行く様はなかなかおもしろかった。 Over view 全体の構成図を下記に示す。1つのモジュールは1つの初期化ルーチンと1つ以上のタスクを持つ。各タスクの同期はOSが仲介する。 API タスク制御と時間管理に関するAPI 名称 処理内容 init_os OSの初期化 task_main メインルーチン無限ループ create_tcb ユーザタスクを登録するTCBを作成 start_task タスクを実行待ちリストに登録する start_task_i 割込みルーチン用のstart_task処理 exit_task タスクを終了するTCBを解放 exit_task_i 割込みルーチン用のexit_task処理 get_trg 状態遷移した理由を取得 delay_task 実行を指定時間だけ中断する set_timeout 実行を指定時間だけ中断する(delay_taskと同じ) clear_timeout 中断後の再開をキャンセルする timer_1ms_int 1ms周期タイマ割込みで行う処理(タイムアウト判定) slice_task 実行を中断しCPUを解放する set_next_state 次の状態遷移変数値を設定 イベントフラグに関するAPI 名称 処理内容 create_flag イベントフラグFLAGを作成 set_flag イベントが発生する(フラグがTRUE)まで待つ set_flag_i イベントを発生(フラグをTRUEに設定) clear_flag 割込みルーチン用のset_flag処理 clear_flag_i イベントを消去(フラグをFALSEに設定) wait_flag 割込みルーチン用のclear_flag処理 セマフォに関するAPI 名称 処理内容 create_sem セマフォSEMを作成 signal_sem セマフォwait動作(リソースが空くまで待つ) wait_sem セマフォにsignal動作(リソースを1つ解放する) メールボックスに関するAPI 名称 処理内容 create_mbx メールボックスMBXを作成 send_msg メールボックスにメッセージが受信されるまで待つ send_msg_i メールボックスにメッセージを送信 wait_msg 割込みルーチン用のsend_msg処理 get_msg メッセージを取得 get_msglen メッセージの長さを取得
  • リアルタイムふうOS データ構造
    Data structure Task Control Block: TCB struct st_tcb { struct st_tcb *link; struct st_tcb *back_link; void (*entry)( ...
  • リアルタイムふうOS 時間管理
    Time management タイマ関連処理 タイムアウト待ち登録:TimerQへ登録 時間経過待ちタスクのリストへ登録する。待ち時間の短い順でソートされる。 void link_timer_q( tcb_type *tcb, uint16 time ) { uint16 sum_time, time_z1; tcb_type *scan; ...
  • リアルタイムふうOS タスクの書式
    How to write a task Example of the task rouchine Module initialize tcb_type *tcb_sample1; tcb_type *tcb_sample2; flag_type *flag; void init_sample( void ) /* 初期化ルーチン */ { ...
  • リアルタイムふうOS 初期化とメインルーチン
    Initialization and Mainrouchine General flowchart OS Initialization void init_os( void ) { que_type *que; que = &TimerQ; TimerQ.link = (tcb_type *)que; ...