質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1107閲覧

C言語で(void)の役割

ParaParaDance

総合スコア56

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/04/19 00:52

以下は、MCUメーカーが提供してくれる32bit ARMのレジスタ設定ソースですが、最後に(void)tmpregの役割ってなんでしょうか。

C言語

1__STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) 2{ 3 __IO uint32_t tmpreg; 4 SET_BIT(RCC->APB2ENR, Periphs); 5 /* Delay after an RCC peripheral clock enabling */ 6 tmpreg = READ_BIT(RCC->APB2ENR, Periphs); 7 (void)tmpreg; 8 9} 10 11 12/*マクロの定義 13#define SET_BIT(REG, BIT) ((REG) |= (BIT)) 14#define READ_BIT(REG, BIT) ((REG) & (BIT)) 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/04/19 01:00

void型の意味知ってれば分かりそうなもんですが
guest

回答2

0

tmpregへ代入をしたけど、その値をどこでも使っていない」という警告を回避するためではないでしょうか。

投稿2021/04/19 00:54

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ParaParaDance

2021/04/19 01:08

有難うございます。 頂いた回答ですみませんが、 /* Delay after an RCC peripheral clock enabling */って書いてますが、 tmpreg = READ_BIT(RCC->APB2ENR, Periphs);によってDelayになるのでしょうか。 レジスタを読んでいるだけに見えますが・・。
guest

0

ベストアンサー

試しにそいつをコメントアウトでもして、コンパイルしてみればわかると思います

変数の未使用の警告を抑制するためのテクニックですね

投稿2021/04/19 01:04

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ParaParaDance

2021/04/19 01:15

有難うございます。 頂いた回答ですみませんが、 /* Delay after an RCC peripheral clock enabling */って書いてますが、 tmpreg = READ_BIT(RCC->APB2ENR, Periphs);によってDelayになるのでしょうか。 レジスタを読んでいるだけに見えますが・・。
y_waiwai

2021/04/19 01:18

レジスタの読み出し動作分のディレイになってます
ParaParaDance

2021/04/19 01:25

ただディレイさせるために以下のソースを記入していますが、何か別の目的があるのかと思いました。 IC仕様によるものかもしれないので、STmicroに聞いたほうがよさげな気もしますが。 __IO uint32_t tmpreg; tmpreg = READ_BIT(RCC->APB2ENR, Periphs); (void)tmpreg;
y_waiwai

2021/04/19 01:29 編集

そこらへんはデータシートに載ってると思いますが。 今どきのCPUは同期回路なんでレジスタに値を書き込んだ直後はレジスタに値は反映されません なので書き込んだ直後に読み出しを行うとおかしなことになります そのために、ダミーの読み出しを挟むことでそれを回避してます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問