X



トップページ電気・電子
721コメント267KB
マイコンソフト 悩み事相談室 4
0001774ワット発電中さん
垢版 |
2020/09/11(金) 09:38:11.57ID:cJDnlvMz
.
  ∧ ∧    
  ( ´・ω・) < コンフィグって何? 昆布なら知ってる。  ボラチルって何? ボラは魚だよ。
  ( ∪ ∪   ,.-、     ,.-、   ,.-、     ,.-、
  と__)__)  (,,■)   (,,■)  (,,■)   (,,■)
         PIC    AVR  H8    ARM

  学校でC言語を習ったことがあるので「楽勝でしょ」って、マイコンを始めたけど、
  わからないことだらけ。誰か教えて!

  PCとは別世界の、マイコンのソフト。難しいよね。

  ツールの使い方、ツールの設定、マイコン特有のC言語の書き方、
  「デバッグモードにプログラミングモード。何?」 Eclips, Emacs って何?
  VBAしか知らないよぉ、という人まで、
  各社マイコンに関するマイコンソフト相談室です。

  質問者は、「初心者質問スレ」の>>1を見て、分かり易く質問を書いてね。
  回答者は、威張らない、バカにしない、言葉使い注意で、親切に教えてあげてね。

  あっ、そうそう。 
  ハードウェアに関する質問は、それぞれのマイコンのスレに、達人がいるから。

  過去スレ
    1 2014/09/11〜
    2 2016/07/31〜 http://rio2016.2ch.net/test/read.cgi/denki/1469905691/l50
    3 2017/06/19〜 https://rio2016.5ch.net/test/read.cgi/denki/1497806664/

  では、質問、ドゾ〜
0002774ワット発電中さん
垢版 |
2020/09/11(金) 12:06:20.87ID:oj7dDQPt
>>1
0004774ワット発電中さん
垢版 |
2020/09/12(土) 09:52:38.39ID:k1hy3rAa
シーケンスのわからないバカがまだ何か言ってる。
そこじゃねえんだよ
0005774ワット発電中さん
垢版 |
2020/09/12(土) 10:27:50.48ID:FbNjUiO5
説明できないなら黙ってればいいのに。
0006774ワット発電中さん
垢版 |
2020/09/12(土) 10:38:15.05ID:k1hy3rAa
「書き込みシーケンス途中で落ちるのが悪い」だと?
「任意のタイミングで電源を切ることが出来る」システムが欲しいって話をしてるんだ。
そしてそれを実現するために工夫された回路やプログラムが世の中に存在してるんだ。
それが無駄だってか?
己の無知を恥じろ。
0007774ワット発電中さん
垢版 |
2020/09/12(土) 10:53:09.47ID:FbNjUiO5
アドレス不定になるから、シーケンスで対処するべき、って主張なんだと思うけど、それは置いておいて、
>>3の条件で書き込みアドレスが不定になるものってあるのかな? って話なんだけどな
ない、は言えないね。悪魔の証明だ。

勘違いしてるようだけど、アドレスが不定にならないならシーケンスやハードでの対処が要らない、って言ってるわけじゃないよ。
0008774ワット発電中さん
垢版 |
2020/09/12(土) 14:51:57.19ID:HAjJe11P
・キャパシタと電圧監視で書き換え完了できる動力が保証できる場合のみ書き換えを開始する
・CRCとかを最後に書くようにして2つの領域を交互に使うようにする
のいずれかになるね
前者は外付け部品が必要になるし、後者はCRCの計算と二倍以上の記憶領域が必要になるから用途で使い分けたらいいと思う
0009774ワット発電中さん
垢版 |
2020/09/12(土) 23:20:39.88ID:ioZIeKlC
自分がよく使うマイコンのマニュアルを読むと内蔵フラッシュに書き込み中のリセットは
所定のリセット条件を満足すれば問題ないようだ
禁止条件にも書かれていないし書き込み中のブロックが不定になる程度ですむと思われる
とはいえ常識的に考えて日常的にそのよう状況が発生する設計は避けるべきだとは思うが

書き込み中に規定外の電圧への遷移や一部のフラグの変更等はフラッシュへダメージがある
可能性がある理由で禁止されている
0010774ワット発電中さん
垢版 |
2020/09/13(日) 14:40:15.67ID:4A2ATnUY
>>7
> アドレス不定になるから、シーケンスで対処するべき、って主張なんだと思うけど
ここで言うシーケンスって何?
0014774ワット発電中さん
垢版 |
2020/11/21(土) 03:30:56.98ID:mvJwl4hr
逆ポーランド記法 知ってますか?
0015774ワット発電中さん
垢版 |
2020/11/21(土) 08:21:59.31ID:V+CW9NwU
オペコペコペコ、オペランド…今から緊急手術を行う‥‥doctor P
0016774ワット発電中さん
垢版 |
2020/11/22(日) 16:13:13.32ID:uM/r69n4
普通の強盗     ・・・・「金を 出せ!」
ポーランド人の場合・・・・・「出せ 金を!」・・・「キン玉じゃない!」
0017774ワット発電中さん
垢版 |
2020/11/24(火) 02:16:18.76ID:kvg4LDH+
1 2 + [ENT]
0018774ワット発電中さん
垢版 |
2020/11/24(火) 17:01:25.01ID:CaOWg8bP
>>17
1に2を足す
Mind
0019774ワット発電中さん
垢版 |
2020/11/24(火) 17:08:32.13ID:CaOWg8bP
>>16

 ポーランド記法・・・・「金を 出せ!」 値+命令
非ポーランド記法・・・・「出せ 金を!」 命令+値

日本語はポーランド記法に近い語順
英語は非ポーランド記法に近い語順
0021774ワット発電中さん
垢版 |
2020/11/24(火) 17:43:54.72ID:ca7tlGoM
 ポーランド記法・・・・金を出せ お前は 俺に
非ポーランド記法・・・・お前は 金を出せ 俺に
逆ポーランド記法・・・・お前は 俺に 金を出せ
0022774ワット発電中さん
垢版 |
2020/11/25(水) 14:11:24.88ID:pPjiI1i3
強盗の例は分かりにくいので、数字と演算子で教えてください。
hp電卓と似ていると聞いたことがあります。
0023774ワット発電中さん
垢版 |
2020/11/25(水) 14:21:45.85ID:YYDWch3M
非ポーランド記法・・・・ (1+2)*3
 ポーランド記法・・・・* + 1 2 3
逆ポーランド記法・・・・ 1 2 + 3 *
0024774ワット発電中さん
垢版 |
2020/11/26(木) 11:19:42.31ID:DbBodVXO
非ポーランド記法・・・・ (1+2)*3
逆ポーランド記法・・・・ 1 2 + 3 *

非ポーランド記法・・・・ 1*(2+3)  の場合は
逆ポーランド記法・・・・ 1 * 2 3 +  でしょうか。
0026774ワット発電中さん
垢版 |
2020/11/26(木) 23:24:19.53ID:NmCuEJ4d
>>25
演算子から2つ前の値しか関係しないということですね。
0027774ワット発電中さん
垢版 |
2020/11/27(金) 00:50:46.93ID:qOCkykOf
>>25
演算子から2つ前の値しか関係しないということですね。
0028774ワット発電中さん
垢版 |
2020/11/27(金) 10:47:23.62ID:Fat6lDrP
基本スタックマシンだから
push 1
push 2
push 3
popしてpopして足してpush
popしてpopして掛けてpush
みたいな感じ
0029774ワット発電中さん
垢版 |
2020/11/27(金) 17:43:17.37ID:+rvsAsbY
>>24
逆ポーランドだと312+*でも行けない?
スタック型よね。
fothとかpostscriptとか。
0031774ワット発電中さん
垢版 |
2020/11/28(土) 08:25:49.19ID:69g8Kycs
ひとつの袋に黄色いりんご1個と赤いりんご2個が入っています。
その袋を3つ買いました。全部でいくつのりんごを買ったでしょう。

生徒:3×(1+2)=9 です

先生:バツです。
0032774ワット発電中さん
垢版 |
2020/11/28(土) 10:34:28.01ID:5R63qc+W
(1+2)×(3+4)は、
1 2 3 4 + ?? 一時記憶?
0034774ワット発電中さん
垢版 |
2020/11/28(土) 17:52:39.84ID:GdAiT2g5
スタック自体が一時記憶だからな。
1に2を足して3に4を足して掛ける。
0035774ワット発電中さん
垢版 |
2020/11/28(土) 23:15:28.05ID:69g8Kycs
数字の打ち込みはスタックに積むこと。
二項演算子を「スタックから2つとってきて計算してスタックに戻す」と考えれば理解しやすかも。
0036774ワット発電中さん
垢版 |
2020/11/29(日) 01:40:40.38ID:3zVdwsWE
なるほど 上2つの数値が対象でしたね。
どんな複雑な四則計算も、それでできるのでしょうか。

(1+2)*(3+4)/( (5+6)*7)

1 2 + 3 4 + * 5 6 + 7 * / ですね
0037774ワット発電中さん
垢版 |
2020/11/29(日) 08:13:29.64ID:uy969WVb
四則演算に限らず(用意されてりゃ)関数とかも使える
sin(√(1 + 2) * 3)
1 2 + √ 3 * sin
0038774ワット発電中さん
垢版 |
2020/11/29(日) 09:08:54.37ID:4bTjHEFc
関数や演算子のパラメータの数だけスタックから取ってきて、結果をスタックに返すわけだしね。
0039774ワット発電中さん
垢版 |
2020/11/29(日) 23:53:42.49ID:pHDP89rc
usin(√(1 + 2) * 3)
1 2 + √ 3 * sin
なるほど、これは簡単だと思うけど、
式の()とか、優先順位を人間が解析した上で 1 2 ...と記述を始めるわけですが、
その解析をしなくても、数式通りに
usin(√(1 + 2) * 3)
と書き込めば、Cとかならコンパイラが計算してくれますよね。
だとすると、ポートランド記号は、どういうときに使用されるのでしょうか。
0040774ワット発電中さん
垢版 |
2020/11/30(月) 00:21:05.84ID:+Rk4LA/f
逆ポーランド電卓を使う時とか8087をアセンブラで書く時とか
0041774ワット発電中さん
垢版 |
2020/11/30(月) 06:02:05.38ID:s3QaQSrG
>>39
> ポートランド記号は、どういうときに使用されるのでしょうか。
逆ポーランド記法な
使うのは Forth とか PostScript を使う時かな
今どきそんな機会があるかどうかは知らんけど
0042774ワット発電中さん
垢版 |
2020/11/30(月) 08:39:09.36ID:ZNwvj6Aj
昔の同僚にHPの電卓のファンがいて、逆ポーランドの方がわかりやすいと言ってました。
>>39の感覚は、「通常の数式表現から逆ポーランドに置き換える」というものだと思いますが、
その同僚の感覚は「いきなり逆ポーランドで考える」だったと思う。

俺は、英語の文書を作るときに、いったん日本語で考えてから翻訳しますけど、
英語ネイティブや、そこそこの英語使いなら最初から英語で考えるはず。それに似ているかも。

俺の逆ポーランドに対する感覚は>39に近いけどね。

プログラムの中でユーザーが入力した「通常の式」を解釈するときは、逆ポーランドに置き
換えるか、再帰的に式を解釈したりしていますが、後者もスタックを使っているのは同じ。
0043774ワット発電中さん
垢版 |
2020/11/30(月) 09:43:22.99ID:lX/n2/Yk
>>42
昔、数式のパーサーを作ったけど、確かにスタック操作だったのを思い出した
0044774ワット発電中さん
垢版 |
2020/11/30(月) 10:05:34.37ID:oGFM/dvN
>>41
1+ 2 をアセンブラで書くときも
mov a,1
mov b,2
add a,b
とかやるんじゃないか?

今どきそんな機会があるかどうかは知らんけど
0045774ワット発電中さん
垢版 |
2020/11/30(月) 10:23:06.04ID:s3QaQSrG
>>42
1 と 2 を足した(+) ものに 3 と 4 を足した(+)ものを 掛ける(*)
なので日本語と逆ポーランド記法の順序は似てる

>>44
マシンによるけど
mov a, 1
add a, 2
ってやれることが多いからちょい微妙な気がする
0047774ワット発電中さん
垢版 |
2020/11/30(月) 12:06:20.48ID:+XkoxYuh
>>42
RPN電卓は慣れてくると変換とか考えなくても自然と扱えるようになる
特に()とか計算順が関係してくるのはなんも考えずに先頭から入力していけるし
まあ最近の関数電卓は数式入力とか普通だからあまり魅力はないかもしれないが

あとはPOSレジ(加算器)なんかは逆ポーランド的操作だね
値段 +
値段 +
個数 *
値段 +
 :
合計
みたいな感じだし
0048774ワット発電中さん
垢版 |
2020/11/30(月) 18:20:03.84ID:ZNwvj6Aj
>なので日本語と逆ポーランド記法の順序は似てる

Forth系言語の 日本語Mind とか…
0049774ワット発電中さん
垢版 |
2020/12/22(火) 15:19:08.99ID:QjT9JRVE
FORTHってなかなかユニークな言語だよね。
昔、興味が湧いて、使っているCPU用に移植した事がある。
その時に逆ポーランド記法を初めて知ったけど、演算処理が簡単になるので、
その後、あるオリジナルの言語処理系を作った時にも採用した。
0051774ワット発電中さん
垢版 |
2020/12/29(火) 13:30:15.19ID:8Q+qtXT+
そうなの?
0052774ワット発電中さん
垢版 |
2020/12/30(水) 17:32:15.95ID:KLCtju1g
ATmega168で「I2C and SPI通信モニタ装置」を製作した時に
データ取り込み開始・停止の条件判定にスタックを使う逆ポーランド記法でやった

Forthを考えついた人は天才だと思う
0053774ワット発電中さん
垢版 |
2020/12/31(木) 12:06:57.06ID:IvvwJueg
スタックにデータを置くシーケンサ(PLC)にも変数(データ格納アドレス)は存在しない。
格納場所が決まっているので存在しようがないというか、
そもそも存在させないためにスタックに置くというか・・・
0054774ワット発電中さん
垢版 |
2021/04/26(月) 16:16:08.19ID:YyDQmy1c
質問です。

マイコンのプログラムは今はCで書いていますが、
Pythonで書くことはできるのでしょうか?
0056774ワット発電中さん
垢版 |
2021/04/26(月) 17:14:41.23ID:YyDQmy1c
>>55
ありがとうございました。
ググったら、いろいろとわかりました。
どうもありがとうございます。
0058774ワット発電中さん
垢版 |
2021/04/26(月) 23:08:30.38ID:YyDQmy1c
>>57
ありがとうございます。

確かにARMクラスが妥当だと思いますが、デジキーの案内のページを見ると...

MicroPythonはすでに何種類かのマイクロコントローラシリーズに移植されており、
これを出発点として新規プラットフォームに移植するか、
すでにサポートされているマイクロコントローラを選択することができます。
図1に示すのは、MicroPythonのソースコードのメインディレクトリです。
ここから、サポートされているマイクロコントローラデバイスを確認できます。次
のマイクロコントローラが含まれます。
ARM®ベースのマイクロコントローラ
Texas Instrumentsの CC3200
Adafruitの ESP8266
Microchip Technologyの 16ビットPICマイクロコントローラ
STMicrolectronicsの STM32

と、書かれています。 PICでもできるみたいで、興味があります。
0061774ワット発電中さん
垢版 |
2021/04/27(火) 07:18:15.83ID:6ZWoBj2F
>>58
>>57みたいな奴は相手しなくていいよ
単に知ったかしたいだけだしその知識も往々にして間違ってたり古かったりするから
0062774ワット発電中さん
垢版 |
2021/04/27(火) 07:18:47.60ID:qHu0luAM
アセンブラなど甘え
基本ほバイナリエディタで機械語プログラミング
0063774ワット発電中さん
垢版 |
2021/04/27(火) 07:41:29.86ID:yKAKIVsE
>>61
普通のPICで使えるやつあるの?
PIC18とか。
きっと皆が知らない新しい情報持ってるんだろうね?
0065774ワット発電中さん
垢版 |
2021/04/27(火) 08:04:39.07ID:Hj0vmFWK
5V対応不用でホビーならRaspberry Pi picoがお手軽じゃないかな
MicroPythonはPythonと言っても仮想マシンだし、速くないし
メモリの使用効率は良くないし、コンパイル用にPCがいる
0066774ワット発電中さん
垢版 |
2021/04/27(火) 08:11:17.74ID:6ZWoBj2F
>>63-64
恥の上塗り乙
>>58
> Microchip Technologyの 16ビットPICマイクロコントローラ
って、誰でも調べられる普通の情報として書いてあるけど?
0071774ワット発電中さん
垢版 |
2021/04/27(火) 12:13:32.13ID:AEf7qmNp
現状、PICで使えるのはdsPIC33だけってこと。
だからSAM使ったほうがいいって書いた。
0072774ワット発電中さん
垢版 |
2021/04/27(火) 16:15:09.88ID:LxpeQz0T
>>65
>5V対応不用でホビーならRaspberry Pi picoがお手軽じゃないかな
550円で安いですね。I/Oも周辺機能もあるしいいですね。

>MicroPythonはPythonと言っても仮想マシンだし、
これはどういう意味でしょうか。直接PythonでI/Oピンの H/Lができないのでしょうか?

>速くないし メモリの使用効率は良くないし、
133MHzで動いているのに、遅いんですか?

>コンパイル用にPCがいる
PCなしでできるんでしょうか?

C言語の代わりにPythonで書いて、ICSPで書き込めば自立で動く、
普通のPICマイコンとして使いたいのですが難しいでしょうか。
0073774ワット発電中さん
垢版 |
2021/04/27(火) 16:36:10.84ID:a+kjGvLV
人のことを知ったで知識が古いとか言うのにこういう間違いは指摘しないような連中しかいないからここでは何も得られないよ。
0074774ワット発電中さん
垢版 |
2021/04/27(火) 17:25:18.84ID:LxpeQz0T
ありがとうございます。
でも、いろいろな話聞いて、私には情報になると思っています。
0075774ワット発電中さん
垢版 |
2021/04/27(火) 17:42:27.16ID:Bo2yxrLc
普通のPICマイコンとして使いたいなら
素直にC言語で組めば
0076774ワット発電中さん
垢版 |
2021/04/27(火) 18:55:26.08ID:D4ng2Xcw
>>72
MicroPythonやmruby/cなどはPCでソースコードをバイトコードにコンパイルして
マイコンにバイトコードとバイトコードを実行する仮想マシン(実質インタプリタ)を書き込んで動作させるからね
Pythonコードが直接マイコン上で走るわけではないし、JITなわけでもないし、仮想マシンが使用する分のメモリが必要
効率はArduinoより悪いかも

以前にちょっと検討したことあるけどメリットを見いだせなかった。この辺を載せるくらいなら、もうちょっとがんばって
Luaインタプリタを載せた方が使えそう。セルフ開発可能になるし
0078774ワット発電中さん
垢版 |
2021/04/27(火) 20:02:06.51ID:5Ib5o0sa
>>72
> これはどういう意味でしょうか。直接PythonでI/Oピンの H/Lができないのでしょうか?
サポートされてればPythonコードだけでできる
https://micropython-docs-ja.readthedocs.io/ja/latest/library/machine.Pin.html

> 133MHzで動いているのに、遅いんですか?
C言語とかのネイティブな奴に比べたら当然遅い
Lチカぐらいなら問題ないけどそれなり処理をしようとしたら問題になるかも
あとガベージコレクションするからタイミングがシビアなものは色々知識が必要になる

> PCなしでできるんでしょうか?
基本無理

> C言語の代わりにPythonで書いて、ICSPで書き込めば自立で動く、
> 普通のPICマイコンとして使いたいのですが難しいでしょうか。
最低限そのボードにC言語のプログラムを書き込んで自立して動かせるスキルは必要
0080774ワット発電中さん
垢版 |
2021/04/27(火) 21:16:27.69ID:LxpeQz0T
>>76
ありがとうございます。

>(実質インタプリタ)を書き込んで動作させるからね
マイコンにROM BASICを載せて、
1行1行読み込んで実行するようなものですか?

>>78
ありがとうございます。

>>直接PythonでI/Oピンの H/Lができないのでしょうか?
>サポートされてればPythonコードだけでできる

>> 133MHzで動いているのに、遅いんですか?
>C言語とかのネイティブな奴に比べたら当然遅い
>Lチカぐらいなら問題ないけどそれなり処理をしようとしたら問題になるかも

>最低限そのボードにC言語のプログラムを書き込んで自立して動かせるスキルは必要
それは何度もやって来たので大丈夫だと思います。

皆さんの話からすると、マイコンにはちょっと・・・という感じですね。

学校の授業でもPaython、本屋さんにはPaythonの本がたくさん。
Paythonの何が嬉しいのでしょうか。
初心者に分かりやすいからでしょうか。
アルデーノみたいに、他人の作ったモジュールを組み合わせると
簡単にできてしまうとか、そういうことですかね。
0081774ワット発電中さん
垢版 |
2021/04/28(水) 00:45:53.25ID:EXN7mB1X
>>76
USBやシリアルでつないでREPLが動くでしょ。
PC側でコンパイルなんてしないよ。
0082774ワット発電中さん
垢版 |
2021/04/28(水) 05:51:00.29ID:UlMVDS4S
>>80
> マイコンにROM BASICを載せて、
> 1行1行読み込んで実行するようなものですか?
そこまで原始的じゃないよw
コンパイルはするけどネイティブコードじゃなくて仮想マシン用のコードを生成するって話
古くはUCSD PascalからJavaやC#などでも使われてるやり方
ネイティブコードを吐くとか定数を定義するとかで高速化の方法はいくつかあるよ、詳しくは↓
https://micropython-docs-ja.readthedocs.io/ja/latest/reference/speed_python.html
ただ、Pythonは言語仕様的に速度を重要視しておらずC言語とかに比べたらオーバーヘッドはかなり大きいのでホントに速度が重要なら素直にCで書いた方が楽だと思う

>> 最低限そのボードにC言語のプログラムを書き込んで自立して動かせるスキルは必要
> それは何度もやって来たので大丈夫だと思います。
ならやってみてもいいと思うよ

> Paythonの何が嬉しいのでしょうか。
オブジェクト指向とかコードがわかりやすいとか>>81が言うインタラクティブに使ってハードのテストするとか色々あるけどあるけどぶっちゃけ流行りかなw

>>81
MicroPythonでもREPL使えるんだな
これは知らなかったわ
0083774ワット発電中さん
垢版 |
2021/04/28(水) 07:37:45.56ID:Xrk11elf
>>81
てことはFlashAirみたいに生のソースコードを自力で解析して実行できるの?
0084774ワット発電中さん
垢版 |
2021/04/28(水) 08:38:24.12ID:EXN7mB1X
>>83
PythonのコードをFLASHに置いて実行するのが本来の使い方。
テストする時はREPLが便利。

>>82 は何で VM にこだわってんの?
.mpy を実行するのが VM だって言うならPCのPythonもVMだよ。

Micropyhon は単なるインタープリタ。
結構重いからマイコン側の能力が必要。だから下記が推奨される。
256KB以上のフラッシュ
16KB以上のRAM
80MHz以上のCPUクロック

まあ、8bitマイコンでもメモリあれば実装は出来るかもな。

>>77 がいるからもう書かない。こいつはMicropython使ったことないだろ。

自分で実機いじったほうがいいよ。
ESP32オススメ。
0085774ワット発電中さん
垢版 |
2021/04/28(水) 08:55:19.90ID:6oG64p5i
>>84
> >>82 は何で VM にこだわってんの?
どう理解したらこだわってるように思えるんだろう…

> Micropyhon は単なるインタープリタ。
仮想マシンとインタープリターの違いは?
てか、むしろインタープリターにこだわり過ぎかと

> >>77 がいるからもう書かない。
何が間違いかも書けないならそれが正解
とっととROMっててねw
0087774ワット発電中さん
垢版 |
2021/05/01(土) 18:10:03.52ID:WlFJPGgI
C言語の基本で、教えてください。
typedef と初めて接するのですが、分からないことがあります。
以下は、ネットにあったソースです。(作者さん、勝手に引用と改変すみません)

#include <stdio.h>
#include <stdlib.h>

typedef enum{
RUNNING   = '1',
STOPPED   = '2',
FAILED    = '3',
HIBERNATING = '4'
} MACHINE_STATE;  // (a)

int main(void) {
int input1;
MACHINE_STATE state;   // (b)
// char state;         // (c)

printf("type [1-4]: ");
input1 = getchar();
state = input1;       // (d)

switch (state) {
case RUNNING:   printf("running\n");  break;
case STOPPED:   printf("stopped\n");  break;
case FAILED:    printf("fail\n");    break;
case HIBERNATING: printf("hibernated\n"); break;
default:                  break;
}
  while(1){}
}

typedef unsigned char UCHAR と書くと、以降のところで 
UCHAR c; と書けば、unsigned char c; と同じ作用になると本などに書かれていました。まさにtypedefだと思います。
ところが上記のソースだと、typedef〜(a)までの間に、unsigned int とかの文字が書かれていません。
そして(b)で、MACHINE_STATE型でstsusという変数を取る、ということをしています。
ここまでの行でMACHINE_STATEが unsigned char なのか、intなのか、型のことに触れていません。
1. この場合、MACHINE_STATE は、何型になるのでしょうか。
2. このようなtypedefの使用は、(c)のように普通に取るのと比べて、どういうメリットがあるのでしょうか。
3. また、(d)の点で、input1を あえてstatusに入れ直していますが、これは、なぜなのでしょうか。
宜しくお願いします。
0088774ワット発電中さん
垢版 |
2021/05/01(土) 18:43:26.08ID:/bstjqti
>>87
enum は 整数値。
char や int で宣言しないのは、変数の意図をわかりやすくするためじゃないですかね。
コンパイラや設定によってはワーニングを出してくれるのかな?

ここに書かれている範囲だったら、いきなりstateにgetchar()値を入れても問題はなさそう。
でも、あとあとwhile(1){}の中に書き込んでいく意図があるとしたら、
その中でプログラムのステートを管理するstateはgetchar()でいきなりいじるのはしたくないはず。
getchar()は習慣的にいったんinput1みたいな変数に入れているのでは。
0089774ワット発電中さん
垢版 |
2021/05/01(土) 19:13:54.75ID:WlFJPGgI
>>88
ありがとうございます。

>char や int で宣言しないのは、変数の意図をわかりやすくするためじゃないですかね。
確かに本にもそのようなことが書いてありました。
ただ、メンバーの名前では、unsigned char なのか unsigned int なのかがわからないと思うのです。
というか、unsigned int 一択で、unsigned charは無いということでしょうか? でしたら、納得しました。
いつも型ばかり気にしているので、型が分からない宣言は、とても心配でした。
なんだか unsigned int 一択が正解な気がしてきました。

>その中でプログラムのステートを管理するstateはgetchar()でいきなりいじるのはしたくないはず。
>getchar()は習慣的にいったんinput1みたいな変数に入れているのでは。
たしかに、直接は嫌ですね。入力値の評価をしてOKを確認してから採用ですね。

どうもありがとうございました。
0090774ワット発電中さん
垢版 |
2021/05/01(土) 20:02:08.13ID:iIkZG58X
enum の型は基本intと同じ扱い

ただし、
intの範囲を越えたらより大きな型になる

コンパイラやコンパイラの設定によっては
charから拡張していく物もある
また、型を指定出来る物もある
詳細はコンパイラの仕様書を見て

enumはenumとして別の値に直接キャストしない
特定の値、特定のサイズを仮定しない
のが本来だけど
効率を考えるとそんな正論ばかりは言ってられない

単なる値の#defineの代わりにenumを使うこともある
0091774ワット発電中さん
垢版 |
2021/05/01(土) 20:50:43.94ID:WlFJPGgI
>>90
ありがとうございます。

>単なる値の#defineの代わりにenumを使うこともある
そうですよね。僕は逆でしたが、enumで並べるの代わりに、
#defineで数字を定義して使っていました。
数字の大小に意味は無いと思うのです。

>intの範囲を越えたらより大きな型になる
そうなんですか。65535の次は42億....とか。
それででしょうか、状態遷移などのとき、enum で、
idle, wait, start, stop などと列挙して、if()で比較するときに、
if( さきほどの例のstatus == enumのメンバ ){
という比較をしている例がありました。
型の大きさが同じもの同士の比較なら、問題も起きないですよね。

どうもありがとうございました。
0092774ワット発電中さん
垢版 |
2021/05/03(月) 09:27:09.29ID:pkgzH+PI
>>91
enum をtypedefするのは、その型の変数にはenumで定義した値しか入らないってことを明確にする意味がある

だから、typedefした型の変数にintの数値を代入したり、intと比較するところがあったらおかしいってわかるようになる
0095774ワット発電中さん
垢版 |
2021/05/03(月) 14:33:11.64ID:mqOsL7XC
>typedefした型の変数にintの数値を代入

STM32CubeIDEのgcc(.cファイル)だと設定を厳しくしてもワーニングが出ないっぽい。
適当に書いたから最適化で無視されたかもしれないけど。

gpp(.cppファイル)はキャストがないとワーニングが出る。
0096774ワット発電中さん
垢版 |
2021/05/03(月) 17:18:43.16ID:RSupmAVS
>>92
enumは、もともとint なんだから、
intを入れても問題ない。
何言ってんだか。
0097774ワット発電中さん
垢版 |
2021/05/03(月) 17:50:38.46ID:mqOsL7XC
>>96
C++のようにワーニングが出るなら、
enumで定義されていない値を、おかまいなしに int値で入れるようなことをしたらわかるしね。
0098774ワット発電中さん
垢版 |
2021/05/07(金) 11:16:06.87ID:kksbdgks
まとめ
MicroPythonは、基盤となるマイクロコントローラハードウェアに依存せずに
リアルタイム組み込みアプリケーションを実装したいと考える開発者にとって、
魅力的なプラットフォームです。
開発者は、MicroPythonで提供された標準ライブラリを使用して
高水準のPythonスクリプトを作成し、サポートされる任意のマイクロコントローラで実行できます。
これには、次を含む数多くのメリットがあります。

   アプリケーションの再利用性が高くなる
   市場投入までの時間を短縮できる
   アプリケーションとハードウェアを分離できる

MicroPythonはあらゆるアプリケーションに最適というわけではありませんが、
産業用および宇宙システムのアプリケーションやプロトタイピング、概念実証では、
これまでに高い効果を発揮しています。

試してみたいけど、Windowsでできるのか・・・
レスを投稿する


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