🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

19456閲覧

エラーの原因がわからないので教えてください

moonYong

総合スコア14

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/11/09 08:34

お世話になっています。

uint32_t us_ticker_read();
のところで以下のエラーが出ます。

error: expected ')' before '(' token

前後で note: in expansion of macro 'us_ticker_read' と書かれています。
関数はマクロになっているようで

追っていくと

#define us_ticker_read() (TIM_MST->CNT)
#define TIM_MST TIM5
#define TIM5 ((TIM_TypeDef *)TIM5_BASE)
#define TIM5_BASE (APBIPERIPH_BASE+0x0C00UL)
#define APBIPERIPH_BASE PERIPH_BASE
#define PERIPH_BASE 0x40000000U

となっています。

タイマーのレジスタのカウント値を読むしくみのようですが、なぜエラーになるのか理解できませんでした。
ご教授ください。
よろしくお願いします。

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

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

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

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

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

y_waiwai

2019/11/09 13:38

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、でてくる’’’の枠の中にコードを貼り付けてください
Zuishin

2019/11/09 23:32

ダウンロードしてきたものなら入手先を書きましょう。勝手に公開していいという許可を取っていますか?
moonYong

2019/11/11 09:28

y_waiwaiさま しくみを良く理解せず、失礼しました。
moonYong

2019/11/11 09:29

Zuishinさま フォーラムとかもあるので、多分大丈夫なのかなと思います。 失礼しました。
Zuishin

2019/11/11 09:34 編集

多分じゃなくて、ライセンスを「確認」し、入手先を書きなさいということです。
moonYong

2019/11/11 21:42

原文が英語だから「多分」と書かせていただきました。 オープンソースと書かれているので問題ないと思っています。 入手先を書かなければいけない規則はあるのでしょうか? 規約を読んでもよく理解できませんでした。
Zuishin

2019/11/11 22:16

オープンソースにももちろんライセンスはあります。 それがわからない人はプログラムをする資格はありません。
Zuishin

2019/11/11 22:17

英語が読めないためにライセンスが確認できないなら、今後ライセンスが英語で書かれているものは使わないでください。
Zuishin

2019/11/11 22:18

teratail の規約にいちいち書いていないのは、それが常識だからです。人を殺すなとも書いてないでしょう?
guest

回答2

0

ヘッダファイルの include の順序に依存するのではありませんか?

C

1#include <stdint.h> 2 3uint32_t us_ticker_read(); // マクロ定義の前だと OK 4 5typedef struct { 6 uint32_t CNT; 7} TIM_TypeDef; 8 9#define us_ticker_read() (TIM_MST->CNT) 10#define TIM_MST TIM5 11#define TIM5 ((TIM_TypeDef*) TIM5_BASE) 12#define TIM5_BASE (APBIPERIPH_BASE+0x0C0000UL) 13#define APBIPERIPH_BASE PERIPH_BASE 14#define PERIPH_BASE 0x40000000U 15 16//uint32_t us_ticker_read(); マクロ定義の後だとエラー 17 18int main() 19{ 20 uint32_t val = us_ticker_read(); 21}

投稿2019/11/10 00:55

kazuma-s

総合スコア8224

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

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

moonYong

2019/11/11 09:27

kazuma-sさま とりあえず、 uint32_t us_ticker_read(); の1行を削除して使ってみようと思いました。 お返事ありがとうございました。
guest

0

ベストアンサー

マクロが展開されて、

C

1uint32_t us_ticker_read(); 2が、 3uint32_t (TIM_MST->CNT);

になっています。どういう意図で書いていますか?

投稿2019/11/09 08:40

otn

総合スコア85888

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

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

moonYong

2019/11/09 22:03

otnさま お返事ありがとうございます。 私が書いたコードではなく、ダウンロードしてきたものをビルドしています。 意味合い的には、構造体のメンバ CNT の値を読みたいのだと思います。 別のコンパイラ(Visual Studio)で下のように適当に構造体を定義して、ビルドしてみたら エラーは出ませんでした。 実際のコードがなぜエラーになるのか理解できません。 typedef struct { uint16_t CNT; } TIM_TypeDef; #define us_ticker_read() (TIM_MST->CNT) #define TIM_MST TIM5 #define TIM5 ((TIM_TypeDef*) TIM5_BASE) #define TIM5_BASE (APBIPERIPH_BASE+0x0C0000UL) #define APBIPERIPH_BASE PERIPH_BASE #define PERIPH_BASE 0x40000000U
otn

2019/11/09 23:11

> 実際のコードがなぜエラーになるのか理解できません。 uint32_t (TIM_MST->CNT); はどう見てもエラーだと思いますが。
moonYong

2019/11/10 02:15

otnさま そのようですね。 良くみなおしてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問