2023年お疲れ様でした

今年も早いものでもう終わりですね。

弊社は今年も本日は午前のみ業務で午後からは大掃除を行い、仕事納めとなります。
年末年始ゆっくりと過ごしたいです。

皆様本年はお世話になりました。
来年も何卒よろしくお願いいたします。
それではよいお年をお迎えください。

Stopwatchクラスの拡張メソッド

C#のStopwatchクラスを使用する際によくあるパターンとして、あるフラグによってスタートまたはリセットしたり、リスタートまたはリセットしたりする場合があります。
せっかくなので拡張メソッドを作成してみました。
実装はしょうもない内容ですが、これによりコードがスッキリします。

public static void StartOrReset(this Stopwatch swbool start) {
    if (start) {
        sw.Start();
    } else {
        sw.Reset();
    }
}
public static void RestartOrReset(this Stopwatch swbool restart) {
    if (restart) {
        sw.Restart();
    } else {
        sw.Reset();
    }
}

ツールの勉強、知識

こんにちは mtjです。

開発にはバージョン管理ソフトというツール または サービス等を利用し複数人で開発が行いやすいように開発します。
しかしこれを使用しない会社も存在します、大体がツールを使うための知識不足かのらりくらりと同じ昔の手法でやりたいからだと思います

開発というのはプログラム等の知識だけでなく そういった開発自体を便利にするためのツールを上手く使うための知識も必要になると思います
日々新しく出たIDE バージョン管理ツール 入力サポートツール等の知識を入れ開発の速度が遅れていかないように自分も気をつけたいと思います。

管理ツールを使わない会社では
・共有フォルダにプロジェクトを入れる
・バージョン別にファイルを別名で保存する。
・コメントでコード内に変更点を記載する(旧コードをコメントアウトしながら)
・同じファイルを編集する場合は声がけして行う
ような感じでかなり古い体制で開発を行っているようです。

マイコン開発でのリンカ設定

C言語でマイコン開発を行っている中で、関数外で宣言した変数の値が書き換えられない現象に遭遇しました。

static bool _initializedA;           // A
static bool _initializedB = false;   // B

void init() {
  _initializedA = true;
  _initializedB = true;
}

上のようなコードで、Aは関数内で書き換え可能ですが、Bは書き換えされず、関数を抜けても _initializedB の値が false のままという内容でした。コンパイルおよび実行時にも警告やエラーが発生せず、最初理由がよく分かりませんでした。

原因はリンカの設定によるものでした。Bのほうは初期値ありなので.dataセクション(ROM)に配置され、リンカのデフォルトの設定ではROMからRAMへのマップが行われていませんでした。

実はこのときは普段使用しているものとは異なるマイコンでの開発であったため、開発環境も普段とは異なり、デフォルトのリンカの設定がこのようになっているとは知りませんでした。

C言語での開発はオープン系言語と比べると、このような点でも難しく感じます。せめて警告やエラーが発生すればもっと早く気が付けるのですが、言語知識だけでなく、経験や経験に基づく感も必要なようです。