UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

テスト・ウメ・フラッシュの変遷

[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
このプログラムを「テスト・ウメ・フラッシュ」と呼んでおり、これを利用したユーザーのプログラムを 「ウメ・エディットプログラム」と呼ぶことにしています。
この「PIC32MX270F256B-I/SO」に予め書き込まれている「テスト・ウメ・フラッシュ」のプログラムソースは、
このリンクで紹介していますが、最初のバージョン(2021年7月)時より、変更した内容を以下に示しています。
(下記は、上の行の方が新しく、下の行が古い情報です。)

変更時期対象ファイル名変更概要
:202503common.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コマンドモードで使われる受信処理部で使う関数です。)
:202503my_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関数を簡潔に書き直しました。
:202503my_usb_cmd.c my_usb_cmd.cのselect_command関数は、スルーモードで使われていないのに、スルーモード判定のifが存在しており、不要なので削除した。
:202503my_sys.c @my_sys.c のinit_handle_area ()でcore_once_count4_valの4秒カウント値の設定が抜けていたので追加、 また他の1、2、3秒の変数の設定位置も含めてパワーオン時設定の前で行うように変更
A起動時のSW2でモード変更のcore_timer_sub_1()関数内で、LED2の点灯制御を反転でなく、設定に変更
:202503my_usb_cmd.c my_sub_cmd.cのset_commad_charの機能改善です。「UME専用Hexコマンド」でないと判断した場合、判断できるまで無視するように変更しました。
それは、case 1の所で、直前のコードが改行で、その直後がS R G T E 以外であれば、無視するコード変更です。
:202503my_usb_cmd.c flagErrorSetOutDataは、バッファフルでもデータを出力せざるを得ない状況で、1がセットされます。 この状態はエラーで、それ以上出力できなくする制御用です。
これがセットされるとバッファへの設定は不可となります。この復帰は、これまでリセットのみでしたが、 my_usb_cmd.cのinit_outBuffers関数で、クリア(リセット)するように変更しました。
:202503my_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()に追加して変更
:202503common.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-4my_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の書き込みを、ユーザー用の「ウメ・エディットプログラム」で可能にするため、以下のソース群を変更や追加を行う