マイコンソフト 悩み事相談室 4
.
∧ ∧
( ´・ω・) < コンフィグって何? 昆布なら知ってる。 ボラチルって何? ボラは魚だよ。
( ∪ ∪ ,.-、 ,.-、 ,.-、 ,.-、
と__)__) (,,■) (,,■) (,,■) (,,■)
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/
では、質問、ドゾ〜 ポケモンをきっかけにマイコンに興味持ったんだけどhexファイルをなんとかしてATmega32U4系で使う方法ってない?
逆は出てくるんだが ダメと君が判断した理由が逆に分からん。
HEXは入れ物に過ぎん。 何のhexファイルなんだろう。
なんかdocxファイルを手に入れたんだけど、卒論に使えるかな?
みたいな。
HEXファイルは、世の中のさまざまなマイコンのプログラムや、ROMに書き込む
データのフォーマットで、マイコンの機種が違ったり、同じマイコンでも、
マイコンの周辺の回路が違えば使えないと思った方がいいよ。 >>102
マイコンの動作を考えて→プログラムにして→コンパイルをすると→機械語が生成されます。
その機械語ファイルの形式を、hexファイルと呼びます。
プログラム→コンパイル→機械語ファイル生成(hexファイル)という流れは逆行できません。
もちろん、あのマイコンで作ったhexファイルを、機種の違うマイコンで使うこともできません。 >>105
ファミコンのROMがPCで使えるのは何故なんだぜ? 機械的にか人手かしらんがリソースかければ逆行できるよ。 逆コンパイルしてコンパイルしても動かないだろ
同じマイコンじゃなきゃ >>106
それはもしかしてエミュレータ?
だとしたら、パソコンの中にソフトウェア的にファミコンを作っているからできること。 マイコンも別のマイコンのエミュレータを走らせればいい。 質問させてください。
ほとんどのマイコンで、複数のタイマーモジュールがあると思います。
この複数のタイマーは、どのような使用を想定して装備してあるのでしょうか?
例えば、main()処理中にtimer1割り込みが発生しました。その処理をします。main()に戻ります。
これは普通に使いますし便利な機能だと思いますが、timer1, timer2のつを動作させた場合、
timer1の割り込み処理中に、たまたまtimer2の割り込みが発生します。
優先順位が高ければtimer1の処理をそっちのけで、timer2を処理しに行きます。
timer2から戻ってtimer1が再開して、その後main()に戻ります。
通常はtimer1とtimer2の周期は違いますから、
多重割り込みが発生するときもあれば、しないときもあります。
そうすると、せっかくのtimer1の定時性が崩れてしまうと思うのです。
ではtimer1のpriorityを上げれば今度はtimer2の定時性が維持できないと思います。
timer1の処理中で、if( n++ > T2 ){ T=0; timer2の処理 } とやれば、timer1 1本なので、
どちらの定時性も確保できて良いと思うのですが、この考え方は間違っているでしょうか?
現実にtimerが5本も6本もあるところを見ると、私の考えは正しくないことは想像できるのですが、
学生時代からずっと疑問に思っているのでお尋ねしました。 ・タイマーはいろんな用途がある
波形の幅測定、波形出力、ソフト処理用タイマー、フリーラン、...
・完全な一定間隔でのソフト処理は難しい
実行中の命令、割り込み禁止区間、多重割り込み、キャッシュ
などにより命令サイクルレベルの一定間隔での処理は(ほぼ)不可能
>>113の方法も、処理1の処理時間がifや可変数ループなどで一定でなければ処理2は一定間隔でなはなくなってしまう
その程度のばらつきが許容される用途にしかソフト処理は使えない
・タイマーの共有
単純に使用リソースを減らす意味でタイマーを共有するのは一般的
規模が大きなソフトなら一定間隔で行いたい処理は100個以上にもなる
・割り込みの優先順位
どの程度処理が遅延していいか、どの程度処理に時間がかかるか、その処理のクリティカル性
などによって割り込み優先度を決める
許容遅延10usオーダーのタイムクリティカルな処理はタイマーA、1ms程度ならタイマーB、10ms以上ならメインループ
のような階層にする >>113
そもそも多重割込で定時性が許容できないような処理を割り込みルーチンでやるなよって話 >>116
重たい処理はスレッドに通知してやらせるとかが普通かと 定時性ってどれぐらいを定時って考えるかによる。±1m秒ぐらいでOKなら、とか、±100nsでないといけないとか。
ひとつのタイマー割り込みでソフトウェアで分岐するやりかたもありだし、タイマーが少ないマイコンだったらそうしてた。
それでも、ソフトの処理の分岐や、タイマー割り込みルーチンに入るまでの時間ばらつきで、応答のばらつきはあるし
定時性のばらつきをどこまでを許容するのかを想定しないと。
たくさんのタイマーは、必ずしもそれぞれで別個の割り込み処理につかうわけでもない。
別のペリフェラルの直接に起動に使ったり、I/Oピンからタイマーの状態をソフトを介さずに使うこともあるわけだし。
定時性のばらつきは、クロックのジッター程度しか許さない。ってことだったら、そういう処理は外部デバイスに任せる
しかないのでは。 6800 6809 のアセンブリをやってみたいのですが、
フリーのアセンブラーってありますか?
6502 や 68000 もさわってみたい。チップがあるかわかんないけど。
CPU, PIO, TIMER, SCI ぐらいあれば、デバッグもできそうだし。 >>119
6502は秋月でも売ってる。
アセンブラもC コンパイラなんかもある。
ただ、ROMに書き込むのはどうするかとか、そもそも最初はCPUがROMやRAMを読めるのか?ってあたりからテストしていかないといけないから、それなりのスキルと道具は必要かな?
トラ技でも以前6502マイコンボードを製作していて、スイッチパチパチしてRAMにプートローダを書き込んで、PC上で作成したプログラムをシリアルでダウンロードして動かすなんてやってたな。 >>119
6800、6809、6502、68000のアセンブラで思い出したけど、
昔、汎用の(複数のCPUに対応している)メタ・アセンブラなるものがあった。
検索してみたらCross-32は今でもあるみたいだが、残念ながらタダではない。
https://www.cdadapter.com/cross32.htm asm6809とかググれば一発目に出てくるが
コレ
6309にも対応とか遊べそう いまさらROMライタとか胸アツだわ
もうやり方すらわからねえよ イレーサーの蓋開けたときの
オゾン臭がなつかしいにほひ O-Zoneってマイヤヒーの?
苦しいな
フラッシュ式で消すやつと紫外線で消すやつが有るのよね
でROMライタでブランクチェックするのがルーティン 昔は遊技機から外されたものと思しき窓付きの27256とかが出回っていたけど、
今ならどうするんだろう。FLASHとかEEPROMで代替かな。
実験だったらOTPは使いにくいし。 主計機は書き換えられんようマスクだったと思う。
演出用は何でもあり。 医療用のX線だったか粒子加速器だったかで消去を試みたが
デバイス自体がお亡くなりになったという話を聞いたことがある。 あれは特定波長の紫外線が必要
ブラックライトじゃ消えないよ
消毒用じゃないとだめ うちは自作したのがあるな。
といっても、紫外線ランプと安定期、グローランプをつないだだけだけど。
今ならレジン用のが手芸用品店で手に入るかな? なんか料理してるみたいな感じだった
あれはあれで味があったな
面倒だけど 普通にROMイレーサーの製品を使ってたわ
測定器と同じ括りになるから自作じゃ無くて銘板が貼ってある製品 ストロボ式で、すぐ消えるっていうのもあったけど、一回では上手く行かなかったり、色々あったな。 トラ技のコラムか何かで
新製品発表会で製品を動作させてるとき、撮影でフラッシュをたかれたら誤動作してしまい
UV-EPROMに遮光シールを貼ってなかったから、みたいな話があったな 光で発電するからね
LEDも光当てると発電する
意外とこれ知られてないんですけど ストロボの方が合ってるの?フラッシュ(メモリじゃ無い)の方が合ってるの?
言葉はどうでも良いのだけど、発光させて(たしか10回くらいだった)消すやつが有ったけど消えたり消えなかったりでブランクチェックする手間考えたらUVのイレーサー使ってた
あっちの方が確実だった 開発時はローテさせてやってたな
ROMエミュは便利だった 底辺職やってたとき開発じゃ無くてマスターROMを空のROMへコピーする簡単なお仕事してました フラッシュっていうのは、本来は使い捨てのフラッシュバルブ(閃光電球)
を使った奴のことなんだろう。
アセンブルし直すとすごい時間がかかるのと、開発装置自体が取り合いに
なるので、今みたいにソースを修正して再アセンブルなんてできなくて、
ROMライター使って、パッチあてるなんていうこともやってたな。
命令コード記憶していたしね(笑) そう、ストロボタイプの商品もあった。
でも、実際に使うとEPROMの不良が多発して使うのをやめたっけな。
「やっぱり、じっくりこんがり焼かないと駄目なんだね」なんて言いながら・・ >>146
開けたらズラーっとUV-EPROM?
ちょっと怖いかも笑 昔、IA80というコンパイラーって無かった? たしかフロッピーベースで動くという。
それで6801のソフトをやっていた。 コンパイラはないだろ
PROASM(IA80 アセンブラ、IR80 リンカ)じゃないの? 昔はたいていフロッピーで動作してたよ。 BDS CとかLSI-C 80とかあったよな。
パソコン用でもMS-C、Lattice C、Turbo C/C++、LSI-C 86 をフロッピーで使ってた。 >CP/Mとかはそれ以前の問題だったね
それ以前の問題、ってどういう意味? >>154
その当時から、構造体とか共用体、ポインターもあったんですか? >>160
あった。
というか、Cって高水準アセンブラみたいなものだからね。
ポインタがあってこそのCって感じで。 CP/M の BDS-C だったか α-C だったかの本まだあるかな
探してみよう >>165
すまん。たしかα-Cは、BDS-Cと違って、何かのファイルが付いてなくてROM化ができなかった。 始める前は なんでROMライターは10個も一度に消去できるんだろう? って思ったけど、
自分でやり出したら、すぐに理由がわかった。
その後FLASH ROMになったときは、考えた人スゲエと思った。
オンボード書き込みになった時は、考えた人 天才だと思った。
進歩していないのは、俺だけ。 >進歩していないのは、俺だけ。
そうか?
理由がわかったとき、スゲエと思ったとき、天才だと思ったとき、進歩してないと自省したとき、
全部自分をアップデートしてるよ。 フラッシュでROMを消去するのがあったから
フラッシュメモリは消去するフラッシュが内蔵されてるんだと
思ったのはオレだけじゃないはず。 DRAMが破壊読み込みなのに読み込みでリフレッシュされるという書き方に納得がいかなかったけど、仕組みを見て、そういうことか!と思ったっけな。
UV-EPROMとかフラッシュのフローティングゲートも、そんなんで本当に大丈夫なん??と思ったっけ。 なぜ消去すると1と決めたんだろう、別に0でも構わなそうなのに
電子がある=マイナス=0? >>80
速度遅くても、用途によっては十分だから。 >>172
> 速度遅くても
お前のレスが遅すぎやろ… Pythonでマイコンのプログラムを書くのが流行っているみたいだけど、
I/Oアクセスの記述は、どのように書くんでしょうか? 環境によって違うけど例えばこんなのとか
# モジュールインポート
import board
import digitalio
import time
# ピンの出力設定
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
# 点滅の繰り返し
while True:
led.value = True
time.sleep(1.0)
led.value = False
time.sleep(1.0)
https://stardust-news.net/research/1199/ C言語でISR内部で任意のデータを使いたい場合ってグローバル変数を経由するしかない?
グローバル変数がどんどん増えていってイマイチな感じなんだけど・・・ 例えば通信のISRだとポインタと長さとカウンタはISRごとに持たないと仕事にならない
長さとカウンタを終端ポインタにすれば1個節約できるけどスコープ外でデータを保持する必要ある
状況は変わらない
ISRだけでなく非同期的な動作を実装しようとすると同じ状況になるような >>179
クラスか構造体にまとめる
オブジェクト指向が分からんなら勉強しろ >>177が言ってる任意のデータは、「ISR内で使うローカルな任意の変数」ではなくて、
「プログラム全体の中の任意のデータ」のことでは? >>184
>177じゃねぇんだし、単に「ISR内部で任意のデータを使いたい場合」としか
言ってないんだから、そんなこと知らねぇやな。
だいたい、「プログラム全体の中の任意のデータを使いたい」
としたって、「任意のデータ」ってそもそも何だ?
「自分は悪くない、エスパーしてくれないスレ住人が悪い」
とか言い出しちゃうのかな? ひとまずデータを渡す部分と使う部分を同じファイルにして
staticを付けたグローバルな構造体にしてみました
>>183
staticを関数内で付けたら外部からデータを書き換えられなくない? 任意のデータ
なんて質問するヤツに回答しちゃダメ
っていう良い例 「任意の」の意味をどうとらえるかだけど、答える立場として範囲やニュアンスが分からないなら質問者に聞けばいいのでは。
双方向のコミュニケーションができるのが掲示板なんだし。
新聞や雑誌のQ&Aコーナーでも、ものによったら Answer の掲載にあたって編集部から質問の意図の確認があるのに。
もちろん回答しちゃダメって思うのも自由だし、そんな人は答えなきゃいいだけで、他の答える気持ちがある人が答えればいい。 教えてください。
最近の自動車のウインカーは「流れるウインカー」が多いです。
右折時は→→→→→、左折時は←←←←← という感じです。マイコンでプログラムしたことがあります。
しかし、今日信号待ちで見た前車のウインカーは、トランクと車体を「またぐように」、
ウインカーが流れていました。下の図のような感じです。
https://imgur.com/a/FJdlKax
これは、どのようにして流しているのでしょうか?
・車体側にあるマイコンの線がトランクに行っているのでしょうか?
パラレル点灯だとすると何本もの線がトランクの「腕」の部分を通ることになり、現実的でないです。
・トランク側マイコンとボデー側マイコンが、シリアルで繋がっていて、
どちらかが親になって子に「お前の点灯の番だ、今だ、行け」と指示しているのでしょうか?
・トランク側マイコンとボデー側マイコンが、車内のCANとかLINで繋がって動いているとしたら
ウインカーのデータ通信で通常のCAN通信の邪魔になりそうです。
どうなっているのでしょうか? 車板で、こんなに詳しい内容がわかりますでしょうか?
電気以外のスレだと、オーディオ板のように、電気の素人が多い気がするのですが。 マイコンスレに車関連の具体的な実装方法がわかる人がいるとは思えないけど
想像で語るだけなら出来ても >>192の疑問は途中で切れている部分がどう連携しているか、じゃないかな。
ウィンカー部分だけでなんらかの通信をしてるのかな?と思ったけど、誤動作が怖い。
↓これに一票。(多数決じゃないけど)
>トランク側マイコンとボデー側マイコンが、シリアルで繋がっていて、