###前提・実現したいこと
組み込みのファームウェアを開発しています。変数へのアクセス速度などが気になりましたので、質問します。
外部ファイルのglobal.hには、組み込み機器が保持する変数がまとめられて宣言されています。
メインループの中で、global.hに宣言されている変数にアクセスするのですが、普通にアクセスするプログラムと、ポインタを使ってアクセスするプログラムは、速度の観点からして、ポインタを使うほうが速いと思っているのですが、合っていますか?できれば理由もおしえてください。
###ソースコード
####global.h
C
1typedef struct __attribute__((packed)){ 2 DWORD total_tick; //トータル経過tick 3 DWORD pre_tick; //前回tick値 4 WORD total_sec; //トータル経過秒 5}Param4Judge_Output; 6typedef struct __attribute__((packed)){ 7 BOOL radio_checked; 8 BYTE contact_type; 9 Param4Judge_Output jdg_output; //判定用tickパラメータ 10}ControlType_Timer1; 11typedef struct __attribute__((packed)){ 12 ControlType_Timer1 timer1; 13}ControlType; 14ControlType controltype;
####main.c
C
1#include "global.h" 2...(省略) 3 4int main(){ 5 ...(省略) 6 /* ループ内で、各タスクを呼び出す形で機能を実装しています */ 7 while(1){ 8 taskA(); 9 taskB(); 10 ... 11 } 12} 13 14void taskA(){ 15 update_controltype_tick_ver1(); // 直接アクセスするバージョン 16 update_controltype_tick_ver2(); // ポインタでアクセスするバージョン 17 // どちらが速い? 18} 19 20void update_controltype_tick_ver1(){ 21 DWORD now_tick; 22 now_tick = GetTick(); 23 controltype.timer1.jdg_output.total_tick += now_tick - controltype.timer1.jdg_output.pre_tick; 24 controltype.timer1.jdg_output.pre_tick = controltype.timer1.jdg_output.total_tick; 25 ...(処理が続く) 26} 27 28void update_controltype_tick_ver2(){ 29 DWORD now_tick; 30 ControlType *p; 31 p = &controltype.timer1.jdg_output; 32 now_tick = GetTick(); 33 p->total_tick += now_tick - p->pre_tick; 34 p->pre_tick = p->total_tick; 35 ...(処理が続く) 36} 37
###補足
関数のプロトタイプ宣言などは省略しています。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/16 04:43
2016/12/16 04:54
2016/12/16 07:06