2022年5月8日日曜日

Duet3 6HC MBのアップグレード

アップデートの仕方

今は3.3RC1なので、安定していると言い難いのでアップデートすることにした。
sudo apt update && sudo apt install -y libwxgtk3.0-dev libreadline-dev
git clone https://github.com/shumatech/BOSSA
cd BOSSA
make
Bossaてのはフラッシュツールらしい
続いてここからファームを落とす
名前はこれ
Duet3Firmware_MB6HC.bin
/opt/dsf/sd/firmware/Duet3Firmware_MB6HC.binに上書き
USBでPiとDuetをつなぐ必要があるようだ
そこで
~/BOSSA/bin/bossac -e -w -v -b /opt/dsf/sd/sys/Duet3Firmware_MB6HC.bin
これで書き込もうと思ったら、
No device found on /dev/ttyACM0
と出てダメだった。
仕方ないので、
Duet Web Controllerから、
SystemのFirmwareDirectoryを表示したら、さきほどコピーしたDuet3Firmware_MB6HC.binが居たので、
これを選んでInstallを選んでみた。
いあ、戻ってこない・・・60%で止まった
しかたないので、Duet3 6HC MBの中央にあるジャンパー(ERASEの印あり)を閉じて再起動
RaspberryPiからみたら/dev/ttyACM0が出てきた
ジャンパーを抜いて、
Bossaの先ほどのコマンドで書き込めた

再起動したら、今度はパネルとの接続が出来てない
パネルのセットアップからボーレートを57600にしたら接続出来た。
ブラウザからも確認できた。
色々大変・・・

2022年4月25日月曜日

PICのポートアクセスの仕組みをヘッダーから見る

かなり昔の事、PIC12F509というちっこいのを昔使ったことがあって、

最近はどうなの?と思って開発環境を入れてみた

まず、IDE

ここからインストール

https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide

次にコンパイラが入ってないのでコンパイラのインストール

https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers#tabs

んで、MPLAB X IDEを開き

FileからNew Project


Nextを押してPIC12F509を選択


デバッガは無いのでこのままNext

コンパイラを選択してNext

プロジェクト名を入れてFinish

Source Filesで、メインを作ってみる(main.cを選択)

すると、こんなメインが出来上がる

#include <xc.h>

void main(void) {
    return;
}


ポートについて調べようと、Classesタブを見てみると、
Librariesの下にGPIObitsがあったので、中身を見てみた。


ちなみに、データシートによると、GPIOは06h割り当てられている。

さきほどのGPIObits_tを選択すると、pic12f509.hのヘッダが開くのだが、

そこに以下のように書かれてる。

typedef union {
    struct {
        unsigned GP0                    :1;
        unsigned GP1                    :1;
        unsigned GP2                    :1;
        unsigned GP3                    :1;
        unsigned GP4                    :1;
        unsigned GP5                    :1;
    };
} GPIObits_t;
extern volatile GPIObits_t GPIObits __at(0x006);

構造体でビットが定義してあって、GPIObits.GP0=1;とかやればいいんだなってのが分かる

#include <xc.h>

void main(void) {
    GPIObits.GP0 = 1;
    return;
}




2022年4月24日日曜日

BisonとFlexで四則演算(カッコ未実装)

よくある、BisonとFlexを使った四則演算

カッコはまだ実装してない

しかも、抽象構文木も作ってないし、ABSの実装も適当

ただ、優先度つけてるだけ


mycalc.y

%{
#include<stdio.h>
%}

%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL

%%

calclist:
    | calclist exp EOL {printf("= %d\n", $2); }
;

exp: factor
    | exp ADD factor { $$ = $1 + $3; }
    | exp SUB factor { $$ = $1 - $3; }
;

factor: term
    | factor MUL term { $$ = $1 * $3; }
    | factor DIV term { $$ = $1 / $3; }
;

term : NUMBER
    | ABS term { $$ = $2 >= 0 ? $2 : - $2; }
;

%%

int main (int argc, char** argv)
{
    yyparse();
    return 0;
}

yyerror(char *s)
{
    fprintf(stderr, "error: %s\n", s);
}

んで、これをBisonにかける

bison -d mycalc.y

mycalc.tab.hが出来るので、中身を見ると以下の記述が出来ている。

/* Token type.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
  enum yytokentype
  {
    NUMBER = 258,
    ADD = 259,
    SUB = 260,
    MUL = 261,
    DIV = 262,
    ABS = 263,
    EOL = 264
  };
#endif

%tokenから定義が作られる。

つぎに字句解析部

mycalc.l

%{
#include "mycalc.tab.h"
int yylval;
%}

%%
"+" { return ADD;}
"-" { return SUB;}
"*" { return MUL;}
"/" { return DIV;}
"|" { return ABS;}
[0-9]+ { yylval = atoi(yytext); return NUMBER;}
\n { return EOL;}
[ \t] {}
. {printf("Mystery character %c\n", *yytext);}

%%

さきほどbisonが吐き出したmycalc.tab.hをincludeして、

ADDやSUBなどを返すのが主な仕事

値はyylvalに入れて、NUMBERを返すようになっている。

こっちにはmain関数は無い

flexでlex.yy.cを作る

flex mycalc.l


んで、lex.yy.cを見てみると、すげー長いコードが出来ていて、

こんな字句解析要る?ってみんな思うし、

自分で作ったほうがよくね?と話題になったりする。


最後にまとめる

 cc -o mycalc XQParser.tab.c lex.yy.c -lfl


./mycalc

1+2

= 3

3+3

= 6

1+2+3*4/2

= 9

まぁ一応動くのが出来る。


ここまで、Bison And Flexのコードなんだけど、

ABS動かないよね、なんじゃこれ状態?



2022年3月22日火曜日

Win11Preview+WSL Preview+VSCode でリモートつながらなくなった

 おんや?

WSL2をAppStore版にして、VSCodeを最新版にしたらリモートつながらなくなった・・・

WSL開いて以下のようにしたら繋がった

sudo apt-get update && sudo apt-get install wget ca-certificates

ターミナル見たらライセンスがどうたら謎のメッセージが出ていてわからんかったが、まぁ、こんなもんだろ

2022年1月20日木曜日

シェルスクリプト

 最近シェルスクリプトを書くことがあって、

オプションを使ってパラメータを処理しようとしたわけなのだが、

シェルスクリプトで字句解析して、そのパラメータの組み合わせが出来上がったらアクションをするようないわゆるLexとYaccの処理を書かないといけないのかと調べていたところ、

getoptsという物があるとわかった。

今までPerlスクリプトでやってきたもので、Bashスクリプトなんてあんま書いてこなかった。

Bashスクリプトで正規表現も後方参照もできるし、

空白の混じったファイル名を扱うときに、Forで回すと空白のところで分割されてしまうので、

$IFSでなんとかするという風習があることもわかった。

まぁ、大体のことはできるんだねぇ?

でも、もっと何でもかんでもできるPerlやPythonのが流行るよなぁ?


2022年1月3日月曜日

lex & yacc プログラミング

 https://github.com/ChaosReadman/lex_and_yacc_programming

lex & Yacc プログラミングのコードをUbuntu20.04LTSで動くように修正したもの

https://iss.ndl.go.jp/books/R100000002-I000002412297-00


ただし、3章までだ。

4章以降やる気が出なかった。

4章以降やったからといって、何ができるようになるわけでもない。

実用例を入れて欲しかった。


昔読んだ時もしっくりこなかった。

lexとyaccが何をするものなのか、という説明から全然載ってないのだ。

たとえば、スクリプトの組み込みするとかなんだとか色々できることはあるだろうに、

こんな説明しかできない連中ばかりなのだろうか?



2021年11月10日水曜日

Fujitsu AH53/B3にM2.SATA増設(ブートドライブに設定)

富士通のAH53/B3を使っている

前にSSDにしたときに、M2スロットがあるのを確認した。

調べたらSATA M2がささるようだ。

そんで、増設してみた。


念のためヒートシンクもつけてある。

M2 SATAのシールははがしてバッテリーの下に張り付けておいた。

(機種わからなくなると困るんで)


ヒートシンクは輪ゴムで止めるだけの簡単な奴だ。

M2用のネジやスペーサーのセットになったいたので、

これでいいやと購入した。


それと最初、M2のNVME買ってしまって認識しなかった。

切り欠きが一個しかなかったのでNVMEだと思ってたらSATAだった。

NVMEは後でケースに入れて、外付けSSDとして使おうと思ってる。


増設したらディスク1(今までのはディスク0)として認識された。

今までのところはdiskpartでパーティションを消してから、ボリューム作った。

今回の部分で、未割当があるのがちょっと嫌

なんとかならんのか?

このノートは8世代のCorei7で、SSD化してから起動も早くなったし、

かなり使い勝手が良くなった。

Win11Previewも入れてて、VMでかなり古いイメージとかも残ってて、

便利に開発につかっている。

VMのイメージはWin2008WorkstationにVS2005、VB6が入っている。

こんなのでも案件が来るから持っておかないといけない。

VMイメージの置き場に困ってたけど、ひとまずこれで安心だ。



2021年10月6日水曜日

船橋中央公民館でワクチン接種してきた

 船橋は8月の予約システムは停止していて、2021/09/16に再開した。

嫁に知らされて予約をしたら10/06に予約が取れ、18:15にワクチン接種をすることができた。

船橋では実質2か月?ワクチン接種が出来ない状態が続いていたことになる。

次の予約は10/27に同じ時間となった。

これで、ワクチン接種が進んだ、すごい成果だと国は宣っているが、

嘘もいい加減にして欲しい。

ワクチン接種を勧めますと政府広報を行っていたが、

受けられない状態だったのだ。

歴史の事実をゆがめるのはやめて頂きたい。

国のワクチン接種スケジュールは遅々として進んでいない。

多くの人が受けたくても受けられない状態進んでいる。

2021年10月2日土曜日

ちっさいマシンたちについて徒然なるままに書いてみる

リナザウのCPUは400MHzかそこらだったよな

PocketChipは1GHzあるし、時代の流れを感じるなぁ

https://shop.pocketchip.co/

小さいPCが欲しいという連中の需要はある程度はあるんだけど、どうしても続けて使い続けてもらえるものには育たない。

ハードの問題もあるし、使う側の問題もある。

iPhone出始めの頃だってかなり怪しんだ。

まさか10年続くとはなぁ

WindowsCEでさえ流行らなかった。

俺はTouchDiamond使ってたし、WinCEのドライバ作ってたし、MFCアプリだって動くんだよ、でも、流行らなかった。

AppleのNewtonだって流行らなかった。

Palmだってごくごく一部だった。

Blackberryはクールだったけど、やはり廃れた。

Androidは出始めの頃に、なにこのJavaVM?ガラ系のVMのが早いじゃんて馬鹿にしてた。

実際、Dalvikは遅いしクソだったが、Androidは5.0からAndroidRuntimeに置き換わり、そこそこで動くようになったらしい。

今のAndroidは、Java信者がずっと焦がれていたJava OSだと言ってもいいのかもしれない。

だが、今まで下手したら30年くらい続いているOpenGLの流れをMetalで断ち切ったAppleはすげーなと思う。

SonyのCollada形式も正式に採用してるし、独自な物、良い物はどんどん取り入れている。

こだわりもなんもなく、ただ、いい物を採用する姿勢は他の会社には見られない事だ。

2021年9月16日木曜日

GAS使ってみた

GoogleスプレッドシートとGoogle App Script(GAS)を組み合わせて、GAS上に作ったHTMLからデータをスプレッドシートに追加するプログラム作ってみたが、、、

GASってやつは、doGetとdoPostしかなく、doGetは実質HTMLを表示するために存在しているようなので、いわゆるRestなGetとPostを作ろうとすると結構手間かかる。

doGetをGETとして使おうとすると、HTMLなしでサービスだけ立ち上げるようなものになってしまいそうだ。

1APIにつき、1プロジェクトみたいな作りになってしまうので、URLを変えてPOSTした時にそれをdoPostで拾えるのかは試して無い。

SwaggerみたいにRestな定義を読み込む手立てもないみたいだし、どうすんねんこれ?って思った。

Googleドライブとは別の場所にGASのプロジェクトが保存される。
でも、GASからはGoogleドライブやGoogleスプレッドシートにアクセスできる仕組みがある。
GASは、かなりクセ強いなぁ?

Graphicという同人御用達の印刷会社があるんだけど、あそこのシステムも表だけは、普通にHTMLサーバで動かしているようだけど、もしかしたら、GASでサービス作って、スプレッドシートに保存している作りに見える。
勘だけど、あの膨大な紙の種類、加工の種類、箔押しなどのオプションをまともにデータベースで管理しているようには思えないんだよなぁ
紙の種類だって、オンデマンドとオフセットで選べる種類違ってるし、かなり面倒なデータベースになるよ?
なので、思ったのは、選んだ項目だけスプレッドシートに保存する作りで、あとはバイトだか担当者が、そのシートを見ながら作業してるんじゃなかろうか?

2021年9月8日水曜日

golangで画像処理してDXF作った

 ある会社さんから画像からDXFを作って欲しいという案件がきたので、

golangで試しに作ってみた。

ちなみに環境は相変わらず、RaspberryPi4 にVSCでリモート接続して開発している。

元画像から輪郭を抽出するところは、https://github.com/hybridgroup/gocv を使わせていただいた。

元画像


輪郭抽出

輪郭線からDXFにするところは、https://github.com/yofu/dxf を使わせていただいた。

OnShapeでDXFをImportしたところ

使わせていただいたものばかりだけど、

それを知っても出来ない人には一生できないだろう。

それがプログラムというものだ。