UMEHOSHI ITA TOP PAGE COMPUTER SHIEN LAB
[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
このプログラムを「テスト・ウメ・フラッシュ」と呼んでおり、これを利用したユーザーのプログラムを
「ウメ・エディットプログラム」と呼ぶことにしています。
この「PIC32MX270F256B-I/SO」に予め書き込まれている「テスト・ウメ・フラッシュ」のプログラムソースは、
このリンクで紹介していますが、最初のバージョン(2021年7月)時より、変更した内容を以下に示しています。
(下記は、上の行の方が新しく、下の行が古い情報です。)
変更時期 | 対象ファイル名 | 変更概要 |
---|---|---|
:202503 | common.h my_sys.c my_uart_c.c my_app.c |
reply_boot_message()は、ESP32-WROOM-32Dの起動時のメッセージ出力を止める細工をしているが、
止めるのを失敗した場合に0x2001の音を出すなどの変更やフラグをreply_boot_message_statusの名前にして、
それをmy_sys.cで初期化するように変更した。 また、このような細工不要な処理に変更できるように_reply_boot_messageのマクロにして、呼び出すように変更した。 マクロ呼び出しに変更した関数は、recv_uart1(uint8_t data)と, my_app.cのMy_APP_Tasks_Through()と,uart_cmd_mode_polling()です。 (それぞれ通常モード、スルーモード、UART1コマンドモードで使われる受信処理部で使う関数です。) |
:202503 | my_uart_ch.c |
UARTの送受信のデフォルトポーリングのrecive_and_send_uart_with_polling関数内で、recive_and_send_uart_no_through関数を呼び出していました。 この関係が分かり難く、この関数が標準モードでしか使われていないにもかかわらず 他のモード排他処理が含まれていたので、 recive_and_send_uart_no_through関数を削除して、recive_and_send_uart_with_polling関数を簡潔に書き直しました。 |
:202503 | my_usb_cmd.c | my_usb_cmd.cのselect_command関数は、スルーモードで使われていないのに、スルーモード判定のifが存在しており、不要なので削除した。 |
:202503 | my_sys.c |
@my_sys.c のinit_handle_area ()でcore_once_count4_valの4秒カウント値の設定が抜けていたので追加、
また他の1、2、3秒の変数の設定位置も含めてパワーオン時設定の前で行うように変更 A起動時のSW2でモード変更のcore_timer_sub_1()関数内で、LED2の点灯制御を反転でなく、設定に変更 |
:202503 | my_usb_cmd.c |
my_sub_cmd.cのset_commad_charの機能改善です。「UME専用Hexコマンド」でないと判断した場合、判断できるまで無視するように変更しました。 それは、case 1の所で、直前のコードが改行で、その直後がS R G T E 以外であれば、無視するコード変更です。 |
:202503 | my_usb_cmd.c |
flagErrorSetOutDataは、バッファフルでもデータを出力せざるを得ない状況で、1がセットされます。
この状態はエラーで、それ以上出力できなくする制御用です。 これがセットされるとバッファへの設定は不可となります。この復帰は、これまでリセットのみでしたが、 my_usb_cmd.cのinit_outBuffers関数で、クリア(リセット)するように変更しました。 |
:202503 | my_usb_cmd.c my_app.c my_sys.c |
send_command_char_response関数は「UME専用Hexコマンド」を受け取った時の応答文字列を返信する場合に使う関数です。
これは、UAR1コマンドモードでUAR1からのコマンドの場合も使われるのですが、その場合USBとUART1の両方に送っていました。 ですがUSBが接続されていない場合にも、 USBに出力しようとして送信できないため wait_WriteComplete_Error が trueになりエラー点滅となる不具合が生じていました。 回避策として、USBが接続されてそこに送信できる場合だけ送信すれば良いのでが、その判定に適切に使う変数が無い状況でした。 そこで、一度でもUSBから受信があったらtrueになるusb_recieved_flagを用意して、それがtrueならUSBにも送信する方法に send_command_char_response関数内を変更しました。 それに伴いusb_recieved_flag変数の設定を、my_app.cのMy_APP_TasksのUSB受信時で行いました。 なおパワーオン相当時に初期化をmy_sys.cのinit_handle_area ()関数内で行っています。 |
:202503 | my_util.c common.h my_sys.c |
指定された int 変数を V に設定するvoid set_int_var(int specified_id, int value)の関数定義をmy_util.cに追加します。
そして、この関数に関連する次のマクロをcommon.hに定義します。 _set_int_var、_IDX_SET_INT_VAR、_SPECIFIED_flagEcho 、_SPECIFIED_mode_change_request 、 _SPECIFIED_uart_command_mode また、_set_int_var用の初期化をmy_sys.cのinit_handle_area関数内に追加します。 これで、_set_int_varマクロでエコーモードなどの制御が可能になります。 |
:202503 | my_util.c my_app.c |
通常モードとUARTコマンドモードの切り替えする関数change_mode()と、その関連変数(
uart_command_mode、 mode_change_request)をmy_util.cに追加。
この変更処理は、起動後の2秒以降のタイミングで実行する仕組みになっている。 この呼び出しは、 my_app.c内のMy_APP_Tasks関数内の_def_polls_uart();の直前で、change_mode()の呼び出しを追加する。 |
:202503 | my_util.c | パワーオン時でSW2が押した時、EEPROM内の0x9D03fff4番地内容が指し示す関数を実行する機能を、power_on_start()に追加して変更 |
:202503 | common.h my_usb_cmd.c |
上記の変更に伴い、command.hで_UME_IDの追加と、それを出力するmy_usb_cmd.cのsend_ume_id()関数を変更。
変更群の主要目的は、通常モードとUARTコマンドモードの切り替えや、USBのエコーモード制御をAPIをEEPROMを含めたプログラムで可能こと。 |
2023-4 | my_util.c my_util.h |
EEPROMの消去、WORD書き込み関数を追加に伴い、
さらに追加する可能な便利機能追記のためな処理の記述用として、このソースファイルをプロジェクトに追加 追加関数は、EEPROM操作時の共通関数のNVM_unlock、ページ消去関数のNVM_erase_page、NVM_write_word関数を追加した。 また power_on_start関数を追加している。 |
2023-4 | common.h | 上記を実現するため、下記マクロを追加した。 _PTR_HANDLERSの添え字として60,61の定義を追加した。 それぞれは _IDX_NVM_ERASE_PAGE, _IDX_NVM_WRITE_WORD です。 |
2023-4 | my_sys.c | この実現に対して、power_on_flag変数を追加して、init_handle_area関数で変更した。 これを利用し、init_interrupt()関数でパワーを伴わないリセットで、0x9D020000の記憶内容が0xFFでなければ、 それが関数へのポインタとして実行するように変更する。 |
2023-4 | my_usb_cmd.c |
send_ume_id() のUSB出力を,"ume202304"に変更
int safetyflag= 1;の書き込み範囲を制限するフラグの追加
これが1の時に、書き込みで以下の範囲内での書き込みの制限を行うようにsetToMemory()関数を変更 (これまでRAMは0x80005000から0x80008000にプログラムを転送させていたが、RAM領域やROM領域にマッチしないと例外で動作できなくるので、その対応の処理) setToMemory関数では、0x9D020000 以上で 0x9D03FFFC 以下時のアドレスである場合、ROMとして書き込み処理を行い、 0x80000000 以上で 0x8000ffff 以下、又は 0xa0000000 以上で 0xa000ffff 以下であれば、RAMとして書き込む処理に変更 (safetyflagが0の場合は、この範囲制限がなく書き込み処理が試みられる) 戻り値は、0で処理の成功を意味し、0以外が失敗。 また、select_command内で、書き込み失敗時に応答のSET〜の文字列表示をださないように変更 |
2023-4 | 上記の4項目 | 「PIC32MX270F256B-I/SO」のEEPROMの書き込みを、ユーザー用の「ウメ・エディットプログラム」で可能にするため、以下のソース群を変更や追加を行う |