2019-01-01から1年間の記事一覧

nRF52840 DKで遊ぼう⑤~DFU over Mesh~

はじめに nRF5 SDK for MeshののDevice Firmware Update (DFU) サンプルを動かしてみます。 このサンプルでは、Mesh経由でfirmwareを更新します。 www.nordicsemi.com IoT時代の組込みデバイスでは、firmware更新はできて当然ですからね! 動作確認 実際の手…

nRF52840 DKで遊ぼう④~Zephyr Bluetooth Mesh Sample~

はじめに nRF5 SDK for MeshのExampleをいくつか試してきましたが、ZephyrのBluetooth Mesh Sampleも試してみます。 Mesh OnOff Model 単純なGenericOnOffを試します。 |> zephyr/samples/boards/nrf52/mesh/onoff-app docs.zephyrproject.org あっさりビル…

nRF52840 DKで遊ぼう③~Bluetooth Mesh Serial example~

はじめに nRF5 SDK for MeshのSerial exampleを試します。 |> nRF5-SDK-for-Mesh/examples/serial www.nordicsemi.com PyACI 本アプリケーションをテストするためには、Pythonのインタラクティブアプリケーションが必要です。 下記の手順に沿って、インスト…

nRF5 SDK for Meshで学ぶBluetooth mesh⑤~light switch demoペリフェラル制御ソース解析~

はじめに Bluetooth Meshを理解するために、nRF5 SDK for Meshでサンプルを動かしながら、動作を解析していきます。 tomo-wait-for-it-yuki.hatenablog.com 前回の続きです。今回は、ソースコードをより詳細に解析していきます。 解析対象は、nRF5 SDK for M…

nRF5 SDK for Meshで学ぶBluetooth mesh④~light switch demo doc~

はじめに Bluetooth Meshを理解するために、nRF5 SDK for Meshでサンプルを動かしながら、動作を解析していきます。 tomo-wait-for-it-yuki.hatenablog.com 前回、2台のnRF52840 DKを使って、Bluetooth Meshのlight switch demoを動かすことに成功しました。…

nRF5 SDK for Meshで学ぶBluetooth mesh③~実機動作確認~

はじめに tomo-wait-for-it-yuki.hatenablog.com 少し間が空きましたが、前回の続きです。 2台のnRF52840 DKが手に入ったので、nRF5 SDK for Meshのlight switch サンプルを動かします。 今回は、nRF52840 DKを2台と、Android端末を1台、利用します。Android…

nRF52840 DKで遊ぼう②~GDB Debug~

はじめに プログラミングする上で一刻も早くデバッグ環境を整えねばなりません。 GDBで、nRF52840 DKのプログラムをデバッグする方法を確立します。 下記Nordic DevZoneの投稿を参考にしました。 devzone.nordicsemi.com 前回記事で行った環境構築が完了して…

nRF52840 DKで遊ぼう①~Getting started~

はじめに 今まで、nRF52840 USB Dongleで遊んでいましたが、外付けJ-Linkコネクタがないとデバッグできなかったり、Nordicから配布されているサンプルが少なかったり、とお試しで色々動かすのに不都合でした。 www.nordicsemi.com ということで、開発キット…

Zephyr×Rustのインテグレーションにチャレンジ!②~アプリとして組み込みたかった~

はじめに Rustプロジェクトを直接、Zephyrアプリケーションとしてインテグレーションしたいです。 が、私には無理でした! app boilerplate Zephyrのアプリケーション作成では、boilerplateの利用がおすすめされています。 |> zephyr/cmake/app/boilerplate.…

Zephyr×Rustのインテグレーションにチャレンジ!①~ライブラリとして組み込む~

はじめに Zephyrで本格的にRustアプリケーションを作る環境を構築していきます。 ソースコードはこちらにあります。 github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、手動でかつ強引にRustを組み込んだので、今回はZephyrのビルドプロセス内で、Ru…

RustはHeartbleedを防げたのか?

はじめに ja.wikipedia.org 2014年に、「OpenSSL」にHeartbleedという脆弱性が見つかり、話題になっていました。 この脆弱性は、典型的なメモリ操作に関するバグであったため、Rustであれば発生しなかったのではないか?という観点で調べていると、過去に同…

「The Challenge of Using C in Safety-Critical Applications」を雑に読む

The Challenge of Using C in Safety-Critical Applicationsというwhite paperを雑に読んでみます。 このwhite paperは、C言語でsafety-criticalなシステムを作ることが、いかに難しいかを述べています。 white paper内で参照しているコードは、下記のレポジ…

nRF5 SDK for Meshで学ぶBluetooth mesh②~light_switch example概要~

www.nordicsemi.com 実装を見てみないと、どういうものなのかよくわからないので、NordicのSDKを解析しながら、どういうものか理解していきます。 今回は、SDKの大枠とlight_switch exampleの概要を理解していきます。 README なにはともあれ、READMEです。 …

nRF5 SDK for Meshで学ぶBluetooth mesh①~プロトコル概要~

www.nordicsemi.com 実装を見てみないと、どういうものなのかよくわからないので、NordicのSDKを解析しながら、どういうものか理解していきます。 はじめに Bluetooth meshは、2017年夏に採用された新しい規格です。Bluetooth Low Energyの技術を応用して、…

Zephyrのecho_serverサンプルを理解する

echo_server github.com Zephyrのecho_serverサンプルを解析し、Zephyrでのネットワークアプリケーション作成方法の理解を目指します。 一通り見てみると、割と普通のTCPサーバアプリケーションでした。 configs 重要そうなkernel configを確認します。 |> p…

組込みRust考察②~効率良く安全な組込み開発をしたい~

はじめに tomo-wait-for-it-yuki.hatenablog.com 前回の続きです。 今回は、Rustを使うことによる生産性について、考察します。 言語仕様、エコシステム、コミュニティによる生産性向上 生産性は可視化が難しいです。 そのため、本トピックではわかりやすく…

Rustで普通にプログラミングするだけでMISRA-Cのルールを90%満足できる

はじめに 2019/2/10追記 記事を書いてから気づいたのですが、正確には、Rustのアトリビュートをいくつか設定すれば、MISRA-Cのルールを90%満足できるでした。 私はMISRA-Cのコーディング規約でプログラミングしたことがないため、内容に誤りがありかもしれま…

nRF52840 CryptoCell 310を使った乱数生成サンプルコードの解析

CryptoCell 310ソフトウェアスタックを理解する目的で、コードが簡単そうだった乱数生成サンプルを解析します。 CryptoCell 310 cc310ブロック図 nRF52840のProduct Specificationによると、CryptoCell 310は、複数の暗号化アクセラレータを内包するペリフ…

組込みRust考察①~効率良く安全な組込み開発をしたい~

Rustの本質は、プログラムを理解する苦労を、未来から現在に移すことにある。 プログラミングRust p.120より はじめに www.rust-lang.org Rustは、とても良い言語です。 Rustを使う理由は、性能、信頼性、生産性を高めたいから、に尽きると考えています。 Ru…

RustでZephyrのアプリケーションを書く

github.com 最近、ZephyrというRTOSで遊んでいます。 新しい環境が手に入ると、Rustと結びつけたくなりますよね! ということで、ZephyrのアプリケーションをRustで書いてみます。 ズルしましたけど、hello worldは動きました。 知見として、no_stdだけど完…

Zephyrのリンカスクリプトを修正する

www.mouser.jp nRF52840 Dongle (pca10059)というNordicのボードに、Zephyrを乗せて遊んでいます。 Zephyrのリンカスクリプトがおかしいらしく、うまく動作しなかったのですが、修正方法まで含めて動かす方法が判明したので、まとめます。 Zephyr blinky sam…

The Embedded Rust Book翻訳の気づきメモ③~CI環境構築~

The Embedded Rust Bookを翻訳しています。下記から見ることができます。 Getting startedのQEMUまで、翻訳完了しています。 導入 - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を…

The Embedded Rust Book翻訳の気づきメモ②

Getting started/QEMUページの翻訳が完了しました。下記から見ることができます。 導入 - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を進める中で、技術的にも英語的にも、学びが…

エミュレータ開発日記 in Rust~ELFローダ編①~

ここ半年ほど、RustでCPUエミュレータを書いています。 今更ですが、これも記録に残していこうと思います。 誰かの役に立つかもしれないですし。 今は、ELFローダを作っています。 これまでは、objcopyコマンドでraw binaryを作成し、特定アドレスにマッピン…

The Embedded Rust Book翻訳の気づきメモ①

Introduction - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を進める中で、技術的にも英語的にも、学びがあるので、それを綴っていきます。 github.com 一応今の状況としては、Intr…

明けましておめでとうございます 2019 edition

明けましておめでとうございます。 新年新たな気持ちで、今年の目標を書いておこうと思います。 2018年の振り返り 前半は、テスト駆動開発やC++、チーム全体のレベルを上げる活動に力を入れていました。 反面、後半は、低レイヤへの情熱を取り戻し、自分だけ…