G3013_マイコン通信トラブル

20241218

2:18

G3013_pc_lpc_micon_uart_trouble

 

修正済みプロジェクトのリンクです

 LPC_uart.zip

 

マイコンの処理速度計算でトラブル

 

 

例外エラー

 

 

 

 

処理の概要

 

 

 

999_err_msg.log の内容

 

 

 

ゼロ除算したのかも?

 

 

 

 

情けないことに、計算式の問題がわかりません

 

 

 

 

loop_dat がゼロです

 

 

お恥ずかしい、むっちゃ初歩的ミスでした、キャストが必要だった

 

 

これでおそらく解決です

 

 

 

 

 

 

2025.01.04 SAN (08:27) goma0099 -18834995-

バグの修正

 

// 測定速度計算と文字列化

private string com_snd_cmd_speed_chk(int prm_dev_sec)

{

string ans_cst = "";

string loop_max_cst;

int loop_max = 0;

double sec_dat = 0.0;

string tan_cst = "----";

double loop_dat = 0.0;

 

// 与えられた差分秒がゼロの場合処理しません

if(prm_dev_sec <= 0) return ans_cst;

 

// コマンドの文字列が不足しています

if (UART_snd_cmd.Length < 2) return ans_cst;

 

 

// 数値変換出来ない形式である

loop_max_cst = UART_snd_cmd.Substring(1);

if (Regex.IsMatch(loop_max_cst, @"^[0-9]+$") == false) return ans_cst;

loop_max = int.Parse(loop_max_cst);

 

 

switch(loop_max)

{

case 1:

loop_dat = (double)loop_max / (double)1;

tan_cst = "sec";

break;

case 10:

loop_dat = (double)loop_max / (double)1;

tan_cst = "sec";

break;

case 100:

loop_dat = (double)loop_max / (double)1;

tan_cst = "sec";

break;

case 1000:        // 千 中心値

loop_dat = (double)loop_max / (double)1000;

tan_cst = "msec";

break;

case 10000: // 1万 

// 理由は説明出来ませんが 1000で割ると正解でした

loop_dat = (double)loop_max / (double)1000;

tan_cst = "msec";

break;

case 100000: // 10

 // 理由は説明出来ませんが 1000で割ると正解でした

loop_dat = (double)loop_max / (double)1000;

tan_cst = "msec";

break;

case 1000000: // 100万 中心値

loop_dat = (double)loop_max / (double)1000000;

tan_cst = "usec";

break;

case 10000000: // 1000

// 理由は説明出来ませんが 100万で割ると正解でした

loop_dat = (double)loop_max / (double)1000000;

tan_cst = "usec";

break;

case 100000000: // 1

// 理由は説明出来ませんが 100万で割ると正解でした

loop_dat = (double)loop_max / (double)1000000;

tan_cst = "usec";

break;

 

}

 

sec_dat = (double)prm_dev_sec / loop_dat;

ans_cst = sec_dat.ToString() + " " + tan_cst;

return ans_cst;

}