それにしても、いい時代になったなぁ。
C#だと Form.Screen で 現在有効なディスプレイを簡単に検出できるので
とりあえず、こうやってちょっとづつ改定していかないと。
お久しぶりです💦
最後の投稿が2019年末だったので、5年も放置状態だったのね。
2020年初に高熱、収束後は1月末まで失声(ほぼ発声できなかった💦)というのもあって、なんとなくこういうのからは遠ざかってました。。。
当時まだコロナってのが一般的ではなくて、医者からも『いつものアレルギー』っていわれたけれど、全くアレルギー薬が効かなかったし、突然の高熱と眩暈で立てなくなるなんて初めての経験。たぶんコロナだったんだろうなぁ(旅行先で外人さんに囲まれてたし💦)
閑話休題。
さて、仕事もイロイロしているけれど、マイコン系は少ないねぇ。
それでも、結構しているほうだけど。
PCだと、従来のUSB-UARTをつかったシリアルポート制御なんてあたりまえにあるけれど、
加えて、GPIB、UDP、TCPでのデータ通信も増えてきた印象。
やっと次に移行するかんじなのかなぁ。。。
ということで、まいど、いろいろ専用ツールをつくって対応してきたんだけど、めんどくさいので、デバッグツールを再開発した(笑)
拙作シリアルデバッグツール2をベースにしようとおもったけれど、すでにEmbacadero C++ Builderなんて使いたくないし💦、新たにC#で作成。
いまどきなので、ついでに、UDP/TCP でも同様にできるように拡張してみた。
通信で電文の送受信する、というのは共通なので、個別の送受信ルーチンの仕様を共通化してゴゾゴソ。
しかし、C#って偉大(笑)
C++だと送信電文解析のところ、つくるだけで結構大変だったんだけど、
普通に 正規表現 とか使えるもんだから見通しスッキリだし、ThreadPoolとかちょいちょいって書けるし。
仕事ツールとしてはこれくらいできてると、そこそこ使えるかな~
今回、TCP/IPでの通信ができるようになったので、
『HTMLのアクセスってほんまはどうなん??』
みたいなのを試してみた(笑)
SerialDebugTool3で、
TCP/IP Server Mode Port:80
で待ち受けして、
ブラウザ側から、アドレスバーに
『localhost』
で接続開始。
あとは所定のデータをずらら~~っと入れれば
Webページが順次表示されるという、なんともわかりやすいのが確認できる(笑)
サンプルとして testResponse.txt というのを同梱しているので、
送信リスト画面から、送信してみて(笑)
現在、Vector での掲載待ちで、約2週間かかったorz
今日、新たにR1.00.2をアップしたので、来週水曜には更新されるかと。。。
シリアルデバッグツール3 (Vector紹介ページ)
MDR がらくた置き場(笑) のほうには順次最新版をアップしていきます。
できれば、Vectorのほうからダウンロードしてもらえると、ダウンロード数がわかってうれしいけれど、ま、これも時代ってことでしかたないかなぁ💦
とりあえず、窓の杜のほうにも申請しておくかなぁ💦
ps.
エゴサもしてみるもんね(笑)
ザツメモブログ さんが昨年、記事を書いててくれた模様。
ありがとうございます!(*^▽^*)
つねづね思ふこと にも(笑)
こちらは 2015年だからちょっと古いけれど。
#include <stdint.h> | |
void setBitRate(uint32_t rate) | |
{ | |
uint16_t div; | |
div = (uint16_t)((uint32_t)BCLK__BUS_CLK__HZ / (uint32_t)((uint32_t)rate * 8)) ; | |
UART_1_Stop(); | |
UART_1_IntClock_SetDividerRegister(div, 1); // 設定変更+リスタート | |
UART_1_Start(); | |
} |
// 通信速度設定 | |
static void c_setBitRate(mrb_vm *vm, mrb_value *v, int argc) | |
{ | |
uint32_t rate = GET_INT_ARG(1); | |
setBitRate(rate); | |
} | |
// 通信速度設定本体 | |
void setBitRate(uint32_t rate) | |
{ | |
uint16 div; | |
div = (uint16_t)((uint32_t)BCLK__BUS_CLK__HZ / (uint32_t)((uint32_t)rate * 8)) ; | |
hal_uart_Stop(); | |
hal_uart_IntClock_SetDividerRegister(div, 1); // 設定変更+リスタート | |
hal_uart_Start(); | |
} | |
int main(void) | |
{ | |
CyGlobalIntEnable; /* Enable global interrupts. */ | |
hal_uart_Start(); | |
/* Place your initialization/startup code here (e.g. MyInst_Start()) */ | |
mrbc_init(memory_pool, MEMORY_SIZE); | |
isr_mrbcTick_StartEx(mrbcTick); // SYSTICKを実装 | |
mrbc_define_method(0, mrbc_class_object, "sw1_read", c_sw1_read); | |
mrbc_define_method(0, mrbc_class_object, "led1_write", c_led1_write); | |
mrbc_define_method(0, mrbc_class_object, "setBitRate", c_setBitRate); | |
mrbc_create_task( sample1, 0 ); | |
console_print("\r\n\x1b(B\x1b)B\x1b[2JStart Program.\n"); | |
mrbc_run(); | |
return 0; | |
} | |
├─src
│ ├─hal_org
│ └─hal
└─TopDesign
led = 0 | |
while true | |
if led == 1 | |
led = 0 | |
else | |
led = 1 | |
end | |
if sw1_read() == 0 | |
led = 1 | |
end | |
led1_write( led ) | |
sleep 1 | |
end |
#include "project.h" | |
#include "./src/mrubyc.h" | |
#include "sample1.c" // mruby/c サンプルバイナリ | |
#define MEMORY_SIZE (1024*30) | |
static uint8_t memory_pool[MEMORY_SIZE]; | |
//================================================================ | |
// オンボードSW 現在状態の読み込み | |
static void c_sw1_read(mrb_vm *vm, mrb_value *v, int argc) | |
{ | |
int sw1 = SW1_Read(); | |
SET_INT_RETURN(sw1); | |
} | |
//================================================================ | |
// オンボードLED ON/OFF | |
static void c_led1_write(mrb_vm *vm, mrb_value *v, int argc) | |
{ | |
LED1_Write(GET_INT_ARG(1)); | |
} | |
//================================================================ | |
int hal_write(int fd, const void *buf, int nbytes) | |
{ | |
return 0; | |
} | |
int hal_flush(int fd) | |
{ | |
return 0; | |
} | |
CY_ISR(mrbcTick) | |
{ | |
mrbc_tick(); | |
} | |
int main(void) | |
{ | |
CyGlobalIntEnable; /* Enable global interrupts. */ | |
/* Place your initialization/startup code here (e.g. MyInst_Start()) */ | |
mrbc_init(memory_pool, MEMORY_SIZE); | |
isr_mrbcTick_StartEx(mrbcTick); // SYSTICKを実装 | |
mrbc_define_method(0, mrbc_class_object, "sw1_read", c_sw1_read); | |
mrbc_define_method(0, mrbc_class_object, "led1_write", c_led1_write); | |
mrbc_create_task( sample1, 0 ); | |
mrbc_run(); | |
return 0; | |
} |
トップからは分かりにくいが トップ / 活動内容 / 研究活動 という中に存在する。 できれば、トップにmruby/cのバナーがあるんだから そこにリンクくらい張ってくれてもよさそうなものなのに(笑 |
適当に読み進めていくと
void setBitRate(uint32 rate) | |
{ | |
uint16 div; | |
switch( rate ){ | |
case 57600: div = HS57600; break; | |
case 38400: div = HS38400; break; | |
case 19200: div = HS19200; break; | |
case 9600: div = HS9600; break; | |
case 115200: | |
default: | |
div = HS115200; | |
break; | |
} | |
UART_1_Stop(); | |
UART_1_IntClock_SetDividerRegister(div, 1); // 設定変更+リスタート | |
UART_1_Start(); | |
} | |