C++でファイルのパーミッションを変更する chmod() (備忘録)

■ソース
#include <stdio.h>
#include <sys/stat.h>

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(){
    string filename = "/sys/class/gpio/gpio27/direction";
    if (chmod(filename.c_str(),0x1ff) == 0) {
        cout << "chmod OK (" + filename + ")" << endl;
    } else {
        cout << "chmod error (" + filename + ")" << endl;
    }

    filename = "/sys/class/gpio/gpio27/value";
    if (chmod(filename.c_str(),0x77)== 0) {
        cout << "chmod OK (" + filename + ")" << endl;
    } else {
        cout << "chmod error (" + filename + ")" << endl;
    }
}

■実行結果
sudo ./test01

※実行前
-rw-r--r-- 1 root root 4096 12月  4 11:51 /sys/class/gpio/gpio27/active_low
lrwxrwxrwx 1 root root    0 12月  4 11:51 /sys/class/gpio/gpio27/device -> ../../../20200000.gpio
-rw-r--r-- 1 root root 4096 12月  4 11:51 /sys/class/gpio/gpio27/direction
-rw-r--r-- 1 root root 4096 12月  4 11:51 /sys/class/gpio/gpio27/edge
lrwxrwxrwx 1 root root    0 12月  4 11:50 /sys/class/gpio/gpio27/subsystem -> ../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 12月  4 11:50 /sys/class/gpio/gpio27/uevent
-rw-r--r-- 1 root root 4096 12月  4 11:51 /sys/class/gpio/gpio27/value

※実行後
-rw-r--r-- 1 root root 4096 12月  4 11:54 /sys/class/gpio/gpio27/active_low
lrwxrwxrwx 1 root root    0 12月  4 11:54 /sys/class/gpio/gpio27/device -> ../../../20200000.gpio
-rwxrwxrwx 1 root root 4096 12月  4 11:54 /sys/class/gpio/gpio27/direction
-rw-r--r-- 1 root root 4096 12月  4 11:54 /sys/class/gpio/gpio27/edge
lrwxrwxrwx 1 root root    0 12月  4 11:54 /sys/class/gpio/gpio27/subsystem -> ../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 12月  4 11:54 /sys/class/gpio/gpio27/uevent
---xrw-rwx 1 root root 4096 12月  4 11:54 /sys/class/gpio/gpio27/value

■key
Raspberry Pi GPIO アクセス権

※2015/11実行
スポンサーサイト

C++ volatile forループ変数の効果を目で見る(備忘録)

最適化を抑止する volatile を空ループのループ変数に使用した場合の効果を目で見えるようにして確認しました。

下記のforの比較です。

for (volatile int n = 0;5000 > n;n++){};

for (int n = 0;5000 > n;n++){};



テストの概要


1.Raspberry Pi のGPIO端子に信号を出し、それをオシロスコープで観測する。
2.forループの直前でGPIO27をONにし、
3.forループを実行
4.forループの直後にGPIO27をOFFとする。
5.テストの最初には、オシロスコープでトリガを掛けやすいように基本パルスを発生させる。
6.それぞれの間にsleepで時間をとる。

ソース概要


int main(int argc, char *argv[], char *envp[])
{

//メモリマップ取得
    sel = get_gpio_map();
    if ((int)sel == -1) {
        return 1;
    }

    //GPIO27をOUTPUTに設定
    GPFSELOUTPUT(sel,27);  //sel->fsel27 = GPIOOUTPUT;

    for (int i = 0;1000000>i;i++){
        //基本パルス幅確認用
        GPSETN(sel,27); //ポートをON
        nano_sleep(100000);
        GPCLRN(sel,27); //ポートをOFF
        nano_sleep(100000);

        //for 内
        GPSETN(sel,27); //ポートをON
        for (volatile int n = 0;5000 > n;n++){};
        GPCLRN(sel,27); //ポートをOFF

        nano_sleep(100000);

        //for 内
        GPSETN(sel,27); //ポートをON
        for (int n = 0;5000 > n;n++){};
        GPCLRN(sel,27); //ポートをOFF

        nano_sleep(1000000);
    }


    return 0;
}


※ GPSETN() GPCLRN() はGPIOポートのON,OFF制御用です。

結果


C++ volatile forループ変数の効果を目で見る(備忘録)
最初のパルはトリガ用のパルス。
中央のパルスがvolatileを指定したforループの実行期間。
三番目の細いパルスはvolatileなしのループの実行期間。

volatileを指定しない空ループはネグられている事がわかります。


※実行環境については省力します。
お知らせ
■注意:Google Chrome以外のブラウザでは動作しない事もあります。
お好みに応じて
画像だけの表示でいいよ
やっぱり全部表示して
背景は黒がいいな
背景を元に戻して
サブジャンル
メモリアルマップ
My Favorite Photo
検索フォーム
プロフィール

otsu.usiwakamaru

Author:otsu.usiwakamaru
五条の橋でひらりひらりと欄干を飛び渡る牛若丸のように、興の向くまま電子回路にプログラミングに写真にと飛び回っています。

プロフィール詳細

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
キーワード
クリックしたキーワードの記事のみ表示します。

ダンサー ミニー ミッキー デイジー ドナルド グーフィー  キャラクター 3D 試み MFP 電池 ティンカーベル デザイン クラリス 全天球 パークテーマ チップデール プルート IXY キャスト マレフィセント スクルージ ダッフィー スモールプラネット SPOT 改造 

最新記事
月別アーカイブ
全記事表示リンク

全ての記事を表示する

おすすめプログ(新着記事)
リンク


にほんブログ村
カテゴリ
橋 (1)
PIC (1)
カウンタ
訪問者数(UU)

アクセス数

現在の閲覧者数

tael no013用