X



C言語分かる人教えてください。
■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 22:57:29.636ID:vqvrmQcc0
typedef struct
{
__IO uint16_t CR1;
uint16_t RESERVED0;
__IO uint16_t CR2;
uint16_t RESERVED1;
__IO uint16_t SMCR;
uint16_t RESERVED2;
__IO uint16_t DIER;
uint16_t RESERVED3;
__IO uint16_t SR;
uint16_t RESERVED4;
__IO uint16_t EGR;
uint16_t RESERVED5;
__IO uint16_t CCMR1;
uint16_t RESERVED6;
__IO uint16_t CCMR2;
uint16_t RESERVED7;
__IO uint16_t CCER;
uint16_t RESERVED8;
__IO uint16_t CNT;
uint16_t RESERVED9;
__IO uint16_t PSC;
uint16_t RESERVED10;
__IO uint16_t ARR;
uint16_t RESERVED11;
__IO uint16_t RCR;
uint16_t RESERVED12;
__IO uint16_t CCR1;
uint16_t RESERVED13;
__IO uint16_t CCR2;
uint16_t RESERVED14;
__IO uint16_t CCR3;
uint16_t RESERVED15;
__IO uint16_t CCR4;
uint16_t RESERVED16;
__IO uint16_t BDTR;
uint16_t RESERVED17;
__IO uint16_t DCR;
uint16_t RESERVED18;
__IO uint16_t DMAR;
uint16_t RESERVED19;
} TIM_TypeDef;

#define TIM2_BASE (APB1PERIPH_BASE + 0x0000)

#define TIM2 ((TIM_TypeDef *) TIM2_BASE)

ライブラリ読んで勉強しているんだけど、ちょっと教えてください!
0002以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:00:12.908ID:vqvrmQcc0
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)

初心者なのでここからすでに意味が分かりません。

TIM2という定義は、TIM_TypeDefという構造体のポインタとTIM2_BASEのアドレスをどう計算しているの?
0006以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:06:05.219ID:V7S3sH3+0
TIM2はただのアドレス
その内容はAPB1PERIPH_BASEと一致してる
0008以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:10:57.808ID:V7S3sH3+0
C言語の初心者がライブラリを読むのは悪手だと思うよ
ライブラリはたいていマクロ地獄だから本質的なプログラムが見えにくい
0009以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:11:19.630ID:vqvrmQcc0
>>6
なんとなく分かりました。

((TIM_TypeDef *) TIM2_BASE)


ここではTIM_TypeDef型の構造体を作成して、そのアドレスにTIM2_BASEの(APB1PERIPH_BASE + 0x0000)を指定している、という感じでしょうか?
0010以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:13:12.447ID:vqvrmQcc0
>>8
悪手でしたでしょうか・・・
これマイコンのライブラリなのですが、欲しい情報がなかなか無く、泣く泣くライブラリを読んでいる、といったところです。
0011以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:14:18.825ID:913I7NMc0
マイコンのレジスタか何かか?
0013以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:16:04.592ID:V7S3sH3+0
>>9
構造体は作成してない
(TIM_TypeDef*)という部分は、「TIM2_BASEという数値をどのように見るか?」という事を指定しているだけ
TIM2_BASEはただの数値なので、int型と見てもいいし何ならdouble型と見てもいいけど、ここではTIM_TypeDef*型と見る事にする、と言っている
0014以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:17:09.790ID:IAr1sz7Va
AUTOSARのコンパイルスイッチ見て発狂しろ
0015以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:17:26.402ID:913I7NMc0
>>12
多分コード直読みしても厳しいからマイコンのデータシートとかマニュアル見た方が良さそう
ボード名 リファレンスとかで検索かけたら出てくるよ
0017以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:22:25.607ID:913I7NMc0
後はSTM32CubeIDEって統合開発環境があるからそれ使ってそのボードに適したソースコードを生成してみるといいと思うわ
既にやってたらすまんな
0019以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:30:42.339ID:V7S3sH3+0
>>18
されない
TIM2の表すアドレスにCNTの表す「幅」を加えて得られるアドレス位置に0x123456を書き込んでるだけ

しかし察するにABP1PERIPH_BASEは既に作成されている構造体の先頭アドレスの事だろうから
TIM2の指す先は既に存在してる構造体の位置になってるはず
0020以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:32:31.870ID:vqvrmQcc0
>>15
ヘルプファイルはあるのですが、すべて英語だったんで見るの諦めました。
そちら呼んだほうが早いかもしれませんね。


>>17
ありがとうございます。
HALですよね。
AVRっていうマイコンでレジスタを叩くのが楽だったのでSTM32でも直接レジスタ叩きたかったんです。
0022以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:37:40.450ID:Z+xnJaVA0
プレCっぽいフォーマットと
シンボル名でだいたい何しようとしてんのか想像つくけど
一応ヘッダ名はなに?
0024以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/02/16(水) 23:54:53.210ID:Z+xnJaVA0
>>23
IO処理用やね
マップされたレジスタ群の入出力用の型で
アドレス空間にマップされたレジスタ群を
C文法で操作しやすいようにその型へハメこんでるだけやな

それが用意されてるってことはアドレス直打ちのコードだと
コンパイル時に事故おこるかもしれんからそれ使ったほうがええっぽいな
CR1とかCR2とかそのまんまのネーミングやしw
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況