simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

C言語

flockでは排他できない

Linuxでファイルアクセスを排他する際にflockを使うことが多いですが、flockを使っても排他ができない場合があるので説明してみました。

C/C++ 用のコードカバレッジツールを作ってみた

タイトルの通り C/C++言語で使えるコードカバレッジツールを作ってみました。 x86_64 GNU/Linux 向けのバイナリと動作確認のサンプル用シェルスクリプトをGithubで公開しています。github.comこのコードカバレッジツールは covme という名称のシングルバイナ…

LinuxからVxWorksへの移植は簡単か?

前回の記事 mcommit.hatenadiary.comではどういった言語や開発環境でVxWorksのアプリケーションを開発するのかについて触れましたが、今回はVxWorksのC/C++言語プログラミングに関して、ライブラリや移植性といった点でまとめてみたいと思います。 利用でき…

5分で理解するVxWorks入門

概要 組み込みソフトウェアの開発ではリアルタイムOS(RTOS)が採用されることが多く、RTOSの例としてiTronやVxWorksが挙げられます。しかしながら、VxWorksが具体的にどういったOSなのかあまり世の中に広くは知られていないように思います。この記事では何回…

POSIX メッセージキューについて調べてみた

Unix系OSでのIPCの手段として提供されている機能の中にメッセージキューという機能があります。 この機能はプロセス間のデータの受け渡しに便利ですが、そもそもプロセス間通信とかたまにしか使わないので備忘のためまとめておきたいと思います。 目次 目次 …

pcduinoでOSを自作する ~第1回 環境構築~

最近OSの仕組みを勉強しているのですが、教科書的な勉強だけだとなんだか退屈してしまうのでARMの基板でOS自作してみることにしました。 この手の趣味プロジェクトはなかなか長続きしないことが多いのですが、モチベーション維持のためにも活動記録をあげて…

KLEE を試してみた。

シンボリック実行のツールとして公開されているKLEEを試してみました。 目次 目次 dockerのインストール dockerイメージの実行 チュートリアル 感想 dockerのインストール KLEEの環境を構築するのはdockerのイメージを使うのが一番手軽に試せるようです。 do…

C言語の関数の戻り値を実行時に変更する

「試験をしているんだけど、実行中に関数の戻り値を変える方法はないかな?」 と相談を受けました。C言語で単体テストをする場合、システムコールやライブラリ関数はダミーの関数を用意しておいて自作部分の実装をテストすることはよくありますが、実行中に…

Concolic Testってなんだ?

自分が常日頃考えている課題として「組込ソフトウェアのユニットテストを自動化できないか」という課題があるのですが、ここ数日テストの自動化に関する論文やオープンソースの情報を漁ったりして少しですがインプットがたまったので整理の為にアウトプット…

低レイヤプログラミングのためのRubyの拡張モジュール開発入門

この記事は、低レイヤのコードをRubyで書きたいという人のための拡張モジュール作成入門記事です。Rubyが好きでC言語がある程度分かる方には読んで頂けると参考になるかと思います。※ただし、私が真面目に拡張モジュールを書いていたのはもう5年以上前なので…

C言語でEthernetFrameをpcap形式でダンプしてみる。

ネットワークの勉強のためだいぶ前に買っていた「ルーター自作でわかるパケットの流れ」を読んでいます。ルーター自作でわかるパケットの流れ作者: 小俣 光之出版社/メーカー: 技術評論社発売日: 2011/07/09メディア: 単行本(ソフトカバー)購入: 4人 クリ…

小学1年生の娘にC言語を教えてみて気付いた、プログラミング教育を通して子供に伝えるべきたった1つの大切なこと

意識高そうなタイトルをつけてみましたが、単純に自分の子供にプログラミングを教えてみました。実際に教えてみると、子供にプログラミングを教えるという体験を通して逆に教えられたことがあったので書いておきたいと思います。 目次 目次 動機 教育方針 具…

C言語でbrainfuckを実装してみた

なんだかすごく今更ですが、気分的になんとなく実装してみました。 仕様把握 そもそもbrainfuckの仕様がよく把握できていないのでwikipedia等いくつかのサイトを参考にさせて頂きました。Brainfuck - Wikipedia Brainf*ckHello Worldなどいくつかサンプルコ…

Raspberry Pi 用にGDBをクロスコンパイルしてリモートデバッグしてみた

デバッグに便利なGDBですが、Raspberry Pi用にクロスコンパイルしてリモートデバッグを試してみました。GNU関係のソフトは、必ずしもバージョンが新しければよいというわけではない(むしろ新しいバージョンだと思いもよらないバグがあったりする)のですが、…

Linux C言語でミリ秒の計算をする

Linux系OSのC言語ではtimeval構造体を使った時間表現があります。しかしながら、あくまでgettimeofdayによる時間の取得・参照を目的としているからなのか、時間計算のAPIはありません。ms秒単位で経過時間の加算をする関数が必要になったので書いてみたので…

CMakeでARM用にクロスコンパイルする

最近、オープンソースなどで配布されているソフトのビルドシステムがCMakeになっているのをよく見かけるようになりました。CMakeはこれまでも何回か使ったことがありましたが、クロスコンパイルをしたいときの使い方を忘れてしまっていて、思い出すのに時間…

cppcheckをビルドして使ってみる

目次 cppcheckという静的解析ツールを試してみました。 cppcheckはC/C++言語向け静的解析ツールですが、今回メモリリーク検出を目的として試してみました。ビルド~インストールや試してみた結果について書いておきたいと思います。 目次 背景 cppcheckを試…

Linuxでシリアル通信のプログラム(C言語)を書く

Linux上でC言語でシリアル通信をするプログラムを書く際に、いろいろ調べたので書いておきたいと思います。 目次 目次 シリアル通信プログラムの流れ シリアルポートのデバイスファイル termios構造体 制御コードに気をつけろ! raspberry piで動かしてみる…

farポインタとポインタの違い

ポインタと__farのついたポインタのサイズの違いを意識する必要がありましたので書いておきたいと思います。 結論 __far付きのポインタと(__farのつかない)ポインタでは型のサイズが異なる場合があり、その場合アクセスできる領域も当然違ってきます。(ここ…

/*~*/ コメントアウトを除去するコードをRubyで書いてみた

タイトルの通り、C言語系の複数行 /* ~ */ コメントを除去するコードを書いてみました。 Rubyで書いていますが状態遷移が基本になるのでどの言語でも同じように書けそうです。 # コメントアウトの除去 def delete_comment_out code status = :STATUS_WAIT_S…

ビルドしたモジュールに使われているDWARFのバージョンを調べる

最近デバッガに興味を持ってDWARFのフォーマットについて調べていました。DWARFの仕様については公式サイトで公開されています。Download DWARF StandardsDWARFの仕様にはいくつかのバージョンが存在するのですが、ビルド後のモジュールにどのバージョンのDW…

C言語のおすすめ書籍

C言語のシフト演算に関する記事を書いてから何冊かC言語の入門書を読み直したり、最近出ている書籍を読んでみました。 mcommit.hatenadiary.com これまで私が読んできたC言語に関する書籍の中で、個人的に良かったと思う書籍を上げておきたいと思います。 C…

C言語のシフト演算は気まぐれ

仕事でC言語のコードを見ていて、シフト演算に関するバグにはまったので備忘録として挙げておきたいと思います。 #include <stdio.h> int main(int argc, char **argv) { char num = 0xB3; // - 77 unsigned short hoge = (num << 0); printf("0x%02X", hoge); return</stdio.h>…

C言語での電卓の作り方~「コンパイラ」を読んでみた~

2019-11-02追記 yoctoのサンプルプロジェクトようにこの記事のコードを使って試していたらいくつかバグがありましたので修正しました。 具体的には本記事のコードでマイナスがうまく扱えていませんでした。 例えば、 ./calc "3 - 3 + 3" のような計算がうま…

SP会に参加させて頂きました

7月2日に東京で開催されたシステムプログラミング会(SP会)に参加させて頂きました。畏れ多くも参加させて頂きました。■目次 参加動機 敷居の高さ 内容 感想 感謝 余談 1.printfの挙動について 2.家路につくまで かなりヤバい人たちの集まりだとは理解し…

GCC 4.7系をcygwinでビルドする

cygwinのパッケージでは2016年2月6日現在で、GCC 4.9.3か5.3.0がインストールできますが、事情があって4.7系をcygwinで使いたくセルフコンパイルしてみました。 最近のGCCはビルドするのに ・GMP ・MPFR ・M4 ・MPC 等のライブラリに依存しているのでこれら…

RXのアセンブラについてちょっとだけ調べてみた

先日「熱血アセンブラ入門を読んだ」という記事を書きましたが、mcommit.hatenadiary.comお正月休みで時間もあるので、個人的に気になっていたRXのアセンブラについて少し調べてみました。備忘録がてら調べた内容を挙げておきたいと思います。 調べた内容 開…

modbus RTUのCRC計算方法(C言語)

modbusの仕様を読んでいてCRCの計算方法がよくわかなかったのでC言語のソースコードを上げておきたいと思います。 この手の計算処理はフローチャートは文章で説明されてもよくわからないことが多く、いつもソースくれ!って思います。 // buf 受信データ // …

RXマイコン PDG(Peripheral Driver Generator)の活用法

ちょうど1年半ほど前にPDG(Peripheral Driver Generator)を使ったという記事RX62N UART通信 - mcommit's messageを書きましたが久しぶりに組み込みの仕事でRXマイコンを使うことになり今回もPDGを活用しているのでいろいろと使ってみた結果についてまとめて…

No More No Prototype Function

■2016/7/4 追記 こちらの記事に書いている内容について、2016/7/2にシステムプログラミング会で発表させて頂きました。 参加者の皆様には釈迦に説法な話で、お時間を取ってしまい失礼しました! _(m_m)_ 参考までにプレゼンの内容はこちらにあげております。…