投稿

3月, 2020の投稿を表示しています

Linuxシステムコール、POSIX mutex による排他制御

UNIX / Linux システムコール・プログラミング POSIX mutex による排他制御 mutex(ミューテックス)とは? mutex(ミューテックス)は、 Mut ual Ex clusion の略で訳せば相互排他となります。 Unix系のOSにはセマフォも存在していますが、セマフォとの違いとしては、 ・ミューテックスでは制御権を持てるのは1つだけ。 セマフォは複数の使用者を設定することが可能です。 セマフォで使用者を1つだけとした場合は、ミューテックスと同様の動作となります。このように0/1だけの操作となるようなセマフォ/ミューテックスはバイナリセマフォとも呼ばれます。 ・ミューテックスは所有者の概念を持っている セマフォでは、ロックするプログラムとアンロックするプログラムが別でも構わない。 (デッドロックの元になるので危険な実装なのでオススメはしない) しかし、ミューテックスでは所有者の概念があるためロックをかけた使用者しかアンロックできない。この部分がセマフォと異なる部分です。 これらの特徴から、ミューテックスはスレッド間の排他制御でよく利用されます。 ミューテックスを使ったロックは、ロック動作を行ったスレッドしかアンロックできません。 それでは、 早速コードを示します。 mutex.c #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <ctype.h> #include <unistd.h> pthread_mutex_t mutex; void* thread(void* arg); // スレッドエントリ // // Main thread. // int main(int argc, char **argv) { int ret; const char *arg1 = "Pneumonoultramicroscopicsilicovolcanoconiosis, Pneumonoultramicr

ArduinoでLCD制御(QAPASS1602)と、c++のお話。

イメージ
ArduinoでLCDを制御する++ いまで、このサイトでは使用するLCDとしてとして AQM1602Y-RN-GBW を使ってきました。  ・ Arduinoを使ってみよう  ・ Arduinoでタイマー割り込み これらの記事でも触れていますが、このLCDモジュールは3.3Vで動作しますがレベル変換など入れず、モジュールの実力で動作しています。 ソフト屋は、こういったトコロがいいかんげんで電気屋が怒るポイントです。 (:P) そこで、今回はArduinoで動作する5VのLCDモジュール、QAPASS1602を手に入れ、マトモな5Vの回路で動作させてみました。 今回は、デバイスを動かすだけ? で、終わらないのがLightning Brains。 そこで、今回はArduino開発環境(c++)についてちょいとばかし 掘ってみました。  目次:            ・ QAPASS 1602とは?  ・ さっそくLCDモジュールを使ってみよう  ・ まずは、”Hello World.”を表示させてみよう   ・ Arduino IDEを掘ってみる!  ・ Arduino IDEって、c++じゃん?  ・ main.cppからいじってみる  ・ Arduino IDEを使ったc++開発は可能か? QAPASS 1602とは? Amazonでも入手できるので、Arduinoな世界では標準的なデバイスなんでしょうか? 価格も500円前後、ずいぶん安いトコロもありますがソコは各自で判断して購入ください。 モジュールの仕様も、バックライトあり・ナシなど違いがあるので気をつけてください。     このLCDモジュールですが、コントローラーは HD44780 という日立が大昔に作ったモノが今でも標準として使われています。これらのモジュールはその互換品が使われているようです。 このコントローラーの特徴としては、データ線を4本して通信できるところです。その他に制御線が2本必要なので、全部で6本のデジタル出力が必要になります。 データ線が4本なので、実際にデータを1バイト送る際には、上位4ビットと下位4ビットに分けて送る必要があります