- 1 名前:デフォルトの名無しさん [2005/09/06(火) 17:13:46 ]
- まったり逝きましょう。
ハード寄りの話も大歓迎です。 道具話も楽しくやれるならやってくらさい。 この世界は処理系依存はあたりまえだから、処理系明記するのを忘れないでね! 過去ログ 制御系なら俺に聞いてもいいぜ(7) pc8.2ch.net/test/read.cgi/tech/1109102528/ 制御系なら俺に聞いてもいいぜ(6) fun.kz/test/read.cgi/tech/1099574832/ (新タイプミラー) 制御系なら俺に聞いてもいいぜ(5) fun.kz/test/read.cgi/tech/1079102543/ (新タイプミラー) 制御系なら俺に聞いてもいいぞ(4) pc5.2ch.net/test/read.cgi/tech/1068869894/ (行方不明) 制御系なら俺に聞いてもいいぞ(3) pc2.2ch.net/tech/kako/1059/10594/1059488975.html 制御系なら俺に聞いてもいいぞ(2) pc2.2ch.net/tech/kako/1038/10380/1038094914.html 制御系なら、俺に聞け! pc3.2ch.net/tech/kako/1002/10021/1002176627.html 関連過去ログ ●●●くみこの組み込み相談室●●● pc3.2ch.net/tech/kako/988/988084737.html
- 193 名前:デフォルトの名無しさん [2006/01/15(日) 01:10:20 ]
- はじめまして。質問させてください。
この度、タスクを担当することになったのですが、例えばタスクAが割込み信号を受けて 処理を開始しますが、プログラムの処理中に別の割込みを受けた場合はどうなるのでしょう? その処理が中断されて新たな割込みの処理に走ってしまうのでしょうか? それともプライオリティにより、処理が終わるまで割込みが待たされたりするのでしょうか?
- 194 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 01:16:10 ]
- さーて、OSはなんだね
- 195 名前:193 [2006/01/15(日) 01:17:44 ]
- 失礼しました。OSはiTRONっす
- 196 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 01:28:12 ]
- >タスクAが割込み信号を受けて処理を開始
うーん、まぁいいや。 以下、割り込みを禁止していない状態での話ね。 あと細かい話も省略。 >プログラムの処理中に別の割込みを受けた場合はどうなるのでしょう? >その処理が中断されて新たな割込みの処理に走ってしまうのでしょうか? うん。プログラムというか、タスクの実行中なら割込み処理するよ。 >それともプライオリティにより、処理が終わるまで割込みが待たされたりするのでしょうか? タスク実行中なら割込まれちゃうね。
- 197 名前:193 [2006/01/15(日) 01:42:13 ]
- >>196
レスありがとうございます > >プログラムの処理中に別の割込みを受けた場合はどうなるのでしょう? > >その処理が中断されて新たな割込みの処理に走ってしまうのでしょうか? > うん。プログラムというか、タスクの実行中なら割込み処理するよ。 やはりそれまでの処理は途中で中断されてしまうのですね。 > >それともプライオリティにより、処理が終わるまで割込みが待たされたりするのでしょうか? > タスク実行中なら割込まれちゃうね。 つまり、処理に割込まれないようにするために割込み禁止にするって事ですか? ちなみに、やろうとしていることは、USB接続された他のPCのソフトから文字列が送られ、 その文字列毎に処理を行うものなんです。 "ABC"と叩かれたらAの処理"DEF"と叩かれたらまた別の処理をするみたいな。 ここで"ABC"の処理中に"DEF"の文字列を受け取ってしまった場合を考えていました。 行うものです。
- 198 名前:193 [2006/01/15(日) 01:44:23 ]
- >>197
> 行うものです。 ←ミスです^-^; 単純に割込みを禁止にしてしまうと他の割込み処理に影響しないかなぁ、など 馬鹿な頭で思ってしまったのです。
- 199 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 01:56:05 ]
- >>197
割込みはタスクより優先されて動くよ。 1.タスクはOSの同期オブジェクト待ちになって受信データを待つ。 2.割込み側はOSの同期オブジェクトをシグナル状態にしてタスクの待ち状態を解除して割込み処理を終了する。 3.タスクはOSによって待ちを解除されて受信したデータを取得して処理する 4.タスクは再び受信データ待ちになる。 って感じで同期するんではないかと。 同期オブジェクトについては先輩に聞いて下され。 たぶんそこが分かれば一歩前進できたといえるかと。 貴方の言うとおり、割込み禁止は他の割込みにも影響するよ。 タスク部を書く人はなるべく割込み禁止を使わないか、その期間が短くなるようなコードを 書くことを求められるだろうね。
- 200 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 01:57:28 ]
- 普通は、
割り込み処理では、送られて来た文字列をバッファに溜め込んで、 通常処理では、バッファに溜まった文字列を解析&実行させる。 ってえのが常識ってもんだ。 割り込みを禁止にするなんて、論外。 割り込み処理を使う意味が無い。
- 201 名前:193 [2006/01/15(日) 02:06:18 ]
- >>199
レスありがとうございます。 同期オブジェクトですか。初めて聞いた言葉なので後で調べてみるっす! 割込み禁止の処理を使う事があったら、ご指摘の点について注意してコーディングします。 >>200 レスありがとうございます。 仰る通りですね。イメージとしては文字列をバッファに溜めて・・だと思うのですが (まだソースコードをみていないので)、文字列をバッファに詰め込む前に、更に割込みが あがって来てしまった場合とかを考えてしまうのです。
- 202 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 02:15:03 ]
- >>201
文字が送られて来る時間の間隔を計算してみれば? よっぽどマヌケなコードでも書かない限り、バッファメモリに書き出す処理が終了する方が早いでしょ?
- 203 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 02:21:31 ]
- >>202
すげーw
- 204 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 03:37:58 ]
- >>201
> 文字列をバッファに詰め込む前に、更に割込みが > あがって来てしまった場合 そういう場合のために割り込み禁止という機能があるのよ。 割り込みハンドラ(){ 割り込み禁止 受信データを蓄積用のバッファにコピー 割り込み許可 必要があれば受信フラグを立てたり、タスクを起こしたり } 当然、割り込み禁止区間は極力短くしないとシステム全体に影響が及ぶ。 >>202のような、受信間隔なんていう不確定なものをあてにするのは、 不可解なバグの要因になるので、普通はしない。
- 205 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 03:44:58 ]
- >>204
おいおい、ハーウェアの通信性能以上に短い間隔にはならないんだよ? 確実に数値で計算出来る値だろうがw
- 206 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 03:45:40 ]
- ハードウェアだな・・・タイプミスしちまったw
- 207 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 03:47:33 ]
- つうか、ハードウェア割り込みに関係する所を作るのに、ハードウェアの性能とか動作タイミング計算しないでどうするの?
- 208 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 03:49:06 ]
- なんかよく分らないから割り込み禁止にしちゃおう って方が問題だな。
- 209 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:06:22 ]
- まあ、脳あるOS(CPU)ならハードウェア割り込みには、要求される動作速度や重要度に沿ったプライオリティーが付いてるからな。
- 210 名前:デフォルトの名無しさん [2006/01/15(日) 04:10:29 ]
- >>202
そのネタ面白いね
- 211 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:11:44 ]
- >>209
ネタ?
- 212 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:12:49 ]
- >>205
ノイズの可能性は無視?
- 213 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:13:36 ]
- >>205
通信以外の割り込みは無視?
- 214 名前:デフォルトの名無しさん [2006/01/15(日) 04:14:01 ]
- >>205
多重割り込みなんか関係無いよなw もっと続けてー
- 215 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:16:05 ]
- >>208
割込みマスクの必要性をよく分かってないのは誰ですか?
- 216 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:20:44 ]
- 他の割り込みが処理に要する時間と、通信割り込み内で要する処理時間を合計しても、次の通信割り込みには間に合うんだよ。
つうか、そう作る。
- 217 名前:デフォルトの名無しさん [2006/01/15(日) 04:23:16 ]
- イタタタ
- 218 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:24:45 ]
- 要は、割り込み処理内でダラダラと処理させないって事だな。
- 219 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:25:39 ]
- >>207>>216
そういう作り方自体は制御系としては別に間違ってないよ。 OSもないような小規模で、かつ、ハードが確実に特定できるターゲットならね。 >>193のターゲットはiTRONと言ってるんだが、 それでもそんな作り方を薦めるつもりなの?
- 220 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:28:03 ]
- >>219
OSが何であれ、そうしないと通信データ取りこぼすよ?
- 221 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:28:33 ]
- まーOSの無い小規模なシステムならそれでもいいんじゃね?
だがOS載せてる環境でタイミング依存するコードなど書くのは愚かだね
- 222 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:30:42 ]
- >>220
何のために受信バッファだのフロー制御だのがあるの?
- 223 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:32:14 ]
- ちょっとまて、
信号って言うのはハードウェア割り込みの事じゃないのか? だから、ハードウェア限定されてる話じゃないのか?? つうか、普通ならドライバーがやってる仕事を書いてるだけなんだが???
- 224 名前:デフォルトの名無しさん [2006/01/15(日) 04:32:48 ]
- ハードの動作タイミングなんかに依存してるほうがよっぽどヤバいだろ
- 225 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:33:30 ]
- >>222
だから、受信バッファに貯める処理自体の話をしてるし、フロー制御もありだよ?
- 226 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:33:51 ]
- >>223
……。 >>197を読み直したら?
- 227 名前:デフォルトの名無しさん [2006/01/15(日) 04:34:40 ]
- OS載っているのにタイミング「だけ」で何とかしようという輩がいるとは…
- 228 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:36:46 ]
- 割り込み処理内ではバッファに貯めるだけとか極力少ない最低限の処理をして、もうひとつの処理でゆっくり実装するって話の。
特に、クリティカルな方の話なのになぁ・・・。
- 229 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:39:11 ]
- なあ、普通は、通信割り込み内ではバッファに書き込むとか、ハードウェア制御だけとかするんだろ?
この部分はどんなOS乗ってようが、ハードウェア依存だし、タイミングの話からは逃れられないだろ。
- 230 名前:デフォルトの名無しさん [2006/01/15(日) 04:44:34 ]
- そんなもんは必要条件
なぜか割込み不要と言い切っているところがワロス
- 231 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:45:36 ]
- おまえら、割り込み処理内で"ABC"や"DEF"の解析まで全部やる気だった? バカだろ?
- 232 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:46:22 ]
- バカが湧きました
- 233 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:47:58 ]
- >>230
割り込み不要? そんな読解力無い奴相手だったのか??
- 234 名前:デフォルトの名無しさん [2006/01/15(日) 04:49:33 ]
- >なんかよく分らないから割り込み禁止にしちゃおう って方が問題だな。
おーい名無しばかりでよくわからんが、これ言った奴なんか言えよw
- 235 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:50:13 ]
- >>233
喪前さん以外(多分漏れ以外に2人くらいいそうだが)はそう読んでるぞ。 書き方の問題じゃないか?
- 236 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:52:05 ]
- 読解力ではなく書き手のry
- 237 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:54:42 ]
- >>234
俺のf読解力ではその一言を書いた奴が 一番分かってないように見えるね。
- 238 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:55:40 ]
- >>234
俺だ。 処理自体を吟味もせず、割り込み禁止すれば解決! みたいな考えは、危険だろ。 何故禁止にするのか、禁止期間は他の割り込みに影響が出ないか吟味した上で、最小限度の禁止区域を設ける。 そういうプロセスで考えないと、割り込み内で解析までやって頭から最後まで禁止にされちゃあ、かなわん。
- 239 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 04:56:50 ]
- うh
- 240 名前:デフォルトの名無しさん [2006/01/15(日) 05:00:05 ]
- おーい、>>200 に書いた奴も出て来いよ
- 241 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:00:52 ]
- 割り込みハンドラではデータコピー処理だけして、解析はタスク側だけでやる、
という前提の上で、割り込みハンドラと割り込み禁止の問題を話してる ・・・んじゃないのか?
- 242 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:02:09 ]
- >>240
200も割り込み禁止にすればどんな長い処理でも出来るって思ってる節がある事への反論じゃね?
- 243 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:09:30 ]
- >>242
そう読める? 反論ということならば、>>199に対してだろうが >>199が「割り込み禁止にすればどんな長い処理でも出来るって思ってる」節がある ようには見えないんだが。
- 244 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:11:02 ]
- >>242
>>200は「タスクで割り込み禁止するなんて論外」と言ってるだけで、 冒頭で「解析は通常処理(タスク)で」とも言ってるから、 そういう風には思ってなさそうだが。
- 245 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:12:46 ]
- >>243
>>199じゃなくて、元発言に対してだろ?
- 246 名前:デフォルトの名無しさん [2006/01/15(日) 05:13:26 ]
- >>200書いた奴でてこないのか〜
- 247 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:17:20 ]
- >>245
あー、そっちが自然だね レス先書かない奴がいるとワケワカラン
- 248 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:22:10 ]
- まあ、>>200が言葉足らずだった事は認める。
誰に対して言ってるのかは、勘違いしないでくれよ。 >>199と>>200は1分23秒差だ。 少し考える時間を含めれば、到底無理だ。
- 249 名前:デフォルトの名無しさん [2006/01/15(日) 05:22:24 ]
- 普通とか常識とか使って断言口調で書く奴と話がしたかったなぁw
寝る!
- 250 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:28:19 ]
- >>249
多分、2人だけだったんじゃねえの? ここにいたの。
- 251 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:30:58 ]
- 俺も寝ますよ?
- 252 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:31:42 ]
- いや、見てはいたが余りにアホ臭いので放置しておいた。
- 253 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:33:23 ]
- おまいら、分身の術上手いですね?
- 254 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:37:35 ]
- ネタはさておいて久しぶりに盛り上がったな
- 255 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 05:40:40 ]
- ですなぁ
ム板でもこのスレはやや年齢高いのか、荒れそうで荒れないような
- 256 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 08:39:52 ]
- まあ、みんな新人の同じようなミスと教育に疲れきっていますから。
新人のレベルによって、 「判らんのなら割り込み禁止しろ!」といってみたり 「判らんからといって割り込み禁止するな!」と言ってみたり
- 257 名前:名無し募集中。。。 mailto:sage [2006/01/15(日) 10:07:20 ]
- あれ?祭りだった?
- 258 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 13:02:26 ]
- これで「荒れてない」って感覚は相当ヤバいというか麻痺してると思うけどね。
海外の掲示板よく覗くが、こういう技術系の内容の板で こんな幼稚なやり取りをやってるところは見たことがない。 正直、いい歳した大人がこんな幼稚なことやってる国の将来が明るいはずがないと思う。 将来っていうか今でも十分ダメだけどね。
- 259 名前:デフォルトの名無しさん [2006/01/15(日) 13:50:07 ]
- あれてないよ
- 260 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 13:52:14 ]
- ここは2ちゃんだということを忘れてるなw
- 261 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 14:04:19 ]
- 幼稚だね本当。
赤信号みんなで渡れば怖くない、と。 なるほど、日本人を海に飛び込ませるには「もうみんな飛び込みましたよ」と 言ってやればいいわけだw ここがどこか、ではなく、どこであろうと自分自身が何をするがが問題だろうが。 こういう劣等民族は滅ればいいと思うね。
- 262 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 14:12:57 ]
- そういうおまいは、ここが2ちゃんであろうとなかろうと、
そういう煽り文章を書くんだなwwww
- 263 名前:デフォルトの名無しさん [2006/01/15(日) 14:29:08 ]
- 制御系やってる人って頭いいよね
- 264 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 15:24:04 ]
- 結論見えてから吠えてる方がいますね
- 265 名前:デフォルトの名無しさん [2006/01/15(日) 18:57:41 ]
- 組込み系の参考書でよいものがあったら教えてください。
イケメン技術者の方々
- 266 名前:俺も含めて大漁だな、オイ。(w mailto:sage [2006/01/15(日) 22:05:51 ]
- >>265
一言で制御系といっても範囲が広いから、どういう方面か ぐらい書いてね。 方面が良くわからんと言うレベルなら、とりあえず「イン ターフェース」とかの雑誌を買って読んでみそ。
- 267 名前:デフォルトの名無しさん [2006/01/15(日) 22:39:48 ]
- >>266
アリガト!(´▽`)イケメン技術者!!
- 268 名前:デフォルトの名無しさん [2006/01/19(木) 00:01:04 ]
- タスクの処理で
while(1) { なんか信号を受け取る関数 受け取った信号毎にswitchで処理 case A: mallocする なんか処理 freeする break; case そのた信号毎の処理: break; } みたいな処理をみかけたのですが、この場合ってmallocしてfreeするまでに割込みが 入ってきた場合、ヒープをfreeできない恐れがありますよね?
- 269 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 00:07:34 ]
- なんでですか?
- 270 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 00:21:54 ]
- 恐ろしい処理してるなおい。
メイン処理がまさにmallocの最中に、割り込み内でmalloc呼び出しするのかよ!!!!!!!!!
- 271 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 00:51:32 ]
- >>268
OSは? 一般的な定義の上でなら、 タスクの処理フローに割り込みは影響を与えないから free()できないなんてことにはならない。 割り込まれたらいきなり「なんか信号を受け取る関数」に 処理が飛んでいくようなOSであれば、そういうこともあるかもね。
- 272 名前:デフォルトの名無しさん [2006/01/19(木) 00:58:54 ]
- >>271
OSはよくわかんねス。一昨日から客先なもので。 携帯なんですけど。 割込みとかシグナル?とかよく分からんのですけど、なんか良い書籍ありますかね? 制御系ってムズイっす。
- 273 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 01:20:33 ]
- 再入可能か不可かって話か?
- 274 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 01:38:20 ]
- >>272
携帯だとiTRONか、malloc()とかもろにあるならRTLinuxとかかな。 とりあえず、もすこし知識付けないと、そもそも仕事にならんべ。 制御系の本はふつーのパソコン向けのコーナーよりも、 電子・電気系の棚にある可能性高いからそのへんをチェック。
- 275 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 01:38:40 ]
- >>268
>入ってきた場合、ヒープをfreeできない恐れがありますよね? なんでそう思うの? "なんか信号を受け取る関数”の箇所で割り込みをチェックしてるみたいだから リエントラントにならないから大丈夫じゃねーの? と、詳細も知らないくせに答えてみるテスト。
- 276 名前:デフォルトの名無しさん [2006/01/19(木) 01:54:42 ]
- >>273
初めて聞いた言葉でよく分からないス。。 >>274 ありがとございやす。もうちと知識つけたいです。 本屋にあるかどうか。。かなり田舎なので(´Д⊂ >>275 割込みが入るとそちらが優先され処理が中断されると聞いて、 mallocしてからfreeするまでに割込みが上がったらそこで処理が中断される?? と思ったッス。。。
- 277 名前:デフォルトの名無しさん [2006/01/19(木) 02:03:01 ]
- 今思ったッス。。割込みで処理が中断っていうのはもしかしてCPU割り当てが割込み処理
へと移ったって事なんすか、、? ワカンネ!!ムッキーヽ(`Д´)ノ 制御系の人達はマジ尊敬します(´Д⊂
- 278 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 02:52:38 ]
- >>277
タスクの処理 OSの処理 割り込み処理 -------------+------------------+------------------ タスク動作中 ↓ 割り込み発生 →タスクの状態を保存→割り込み処理開始 ↓ タスク動作再開←タスクの状態に戻す←割り込み処理終了 ↓ タスク終了 制御系に限らず、マルチタスクOSの一般的な動作。 割り込みを契機に、タスクの状態を保存・復帰するのがミソ。 複数のタスク動作の切り替えも基本的には同じこと。
- 279 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 06:44:03 ]
- 割り込みによって中断(と言っていいかどうか微妙)された方のタスクは
通常は割り込まれたことに気付かないという認識であってますか?
- 280 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 07:09:48 ]
- 時計見て時間が経ってたら気づくでしょうよ。
気づく気づかないじゃなくて、 割り込まれる前の場所にちゃんと帰ってくるってこと。
- 281 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 12:38:36 ]
- 割り込みが難しいと思ったことはないなあ。
まあアセンブラでコード書けるようなすごい単純な機械しか扱ってないからだろうけど。 .NETとかのマルチスレッドのコードの方がよほど難しく感じる。 なんていうか、最終的な実際の動作の具体的なイメージがつかみにくいっていう 抽象化の暗黒面が効いてくる感じがする。
- 282 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 23:06:51 ]
- >>281
非リアルタイム環境だとスケジューリングが決定的じゃないから 目的の現象が必ずしも発生するとは限らないしね。
- 283 名前:デフォルトの名無しさん [2006/01/20(金) 00:07:02 ]
- >>278-282
ありがとうございます。なんとなく分かってきたっス。 例えば、タスク内でいじっているバッファなんかを、割込み処理内で いじったりするのは良くないっすね?
- 284 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 00:21:03 ]
- >>283
ヒント: 排他制御
- 285 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 05:02:14 ]
- >>283 タスクと割り込みとでは共通の変数は極力持たないようにするのが一般的。
どうしても必要な場合は、タスク側が最小限の時間に限って割り込み禁止を使う。 典型的な例ね:受信文字カウンタnを、受信割込み処理で++、タスクが受信文字を取り出したら --する、なんて状況で、タスクがn--するときに割込みが起きたとする。 n--ってのはreg<--n, reg--, reg-->nという機械語になるが、この2つのカンマのところで 割り込むと、レジスタ保存、割込み処理でreg<--n, reg++, reg-->nして、割り込んだ所へ戻る。 その後3番目のreg-->nが実行されると、割り込みで++した結果が失われる。これを避ける為に タスク側は、割り込み禁止;n--;割込み許可;のように書く。この位なら待たせても割り込み 処理の遅れは許容できる。あまり長い処理を割り込み禁止で実行したりするのは顰蹙もの。 =割込み処理というのは、例えば9.6Kbpsの受信なら1mS以上遅れてはならないとかの 物理的制約があるのがふつうだから。
- 286 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 08:31:04 ]
- 32bitCPUで64bitの共有変数をタスク側で読み込み中に割り込み、
割り込み側が++してたまたま下位32bitが0で上位32bitに繰り上がり。 タスク側の読み取り値が出鱈目になると。 BIGendianかLITTLEendianかで変わってくるが。
- 287 名前:デフォルトの名無しさん [2006/01/23(月) 01:14:30 ]
- >>285-286
レスありがとうございます! ちょっと難しいっすね。ソース上1つの処理に見えても アセンブラでは複数の処理なんすね。 reg<--n, reg--, reg-->nとか32bitCPUで64bitの共有変数 の話はまだ勉強不足で分からないですが(´Д⊂
- 288 名前:デフォルトの名無しさん mailto:sage [2006/01/23(月) 01:28:29 ]
- アセンブラわからないで割り込み制御のコード書くなよw
- 289 名前:デフォルトの名無しさん [2006/01/23(月) 01:40:26 ]
- >>288
それが、まだ書いたことないんすよ・・・ 今回初めてやることになったんですがプレッシャーです。。
- 290 名前:デフォルトの名無しさん mailto:sage [2006/01/23(月) 01:48:05 ]
- >>289
新人さんでつか?
- 291 名前:デフォルトの名無しさん mailto:sage [2006/01/23(月) 08:58:49 ]
- >>289 cで書いてもオブジェクトコードリストは必ず取ってね。それを見るとずいぶん勉強になるよ。
- 292 名前:デフォルトの名無しさん mailto:sage [2006/01/23(月) 22:40:12 ]
- 最近の最適化コンパイラは、(初心者には) あっと驚
くような最適化する時があるから、オブジェクトコー ドリスト (*.cod のことだよね。) みる時は、最適 化を抑止しておいた方がいいかも。
- 293 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 01:51:05 ]
- リリース版のオブジェクトコードリスト見ないでどうするよ?
最後にゃあそこが勝負の分かれ目になる事もあるからなぁ。
|

|