- 1 名前:774ワット発電中さん [2008/02/03(日) 21:17:18 ID:x4TTjR6q]
- /Microchip ./|
/( ゚∀゚) / | アセンブラのアの字もわからない |~ ̄ ̄ ̄ ̄ ̄| /. 超初心者からHEXが読めてしまう |/Z./Z./Z./Z_|/ || 鬼プロフェッショナルの為のスッドレ(#゚Д゚)だ!ゴルァ ||. ||. ||. || 例の如く基本リンクだ www.microchip.com/ マイクロチップ本社 www.microchip.co.jp/ マイクロチップ日本支社 またーりやっておくんなまし。 教えて君はとりあえずGoogle(www.google.co.jp/) くらい使おう 前スレ 【米粒から】PIC専用のスレPart17【32ビットまで】 science6.2ch.net/test/read.cgi/denki/1196633878/ その他 >>2-5
- 701 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 21:16:46 ID:tT7tCfdD]
- Baseline MCUの最新版、PIC12F519でとうとうEEPROMが内蔵されたが、
>>700と同様の要請が多かったのかな。
- 702 名前:774ワット発電中さん [2008/03/05(水) 21:45:53 ID:BHxn+Sfm]
- 10F200ちっせーーー
虫かよ! ってどうやって焼けばいいんだろw
- 703 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 21:58:57 ID:PS4hFe7x]
- >>690
16F819はADCが5ch取れるから捨てられない
- 704 名前:774ワット発電中さん [2008/03/05(水) 22:02:20 ID:r/MIrdVp]
- 識者の方に質問です
PIC16F887でアセンブラで書いている者です テーブルの作り方について教えてください というのも 下記のようなテーブル(2次元)を作ったのですが サイズが224ワードになってしまい テーブルのケツの方を取得しようとすると PCLのサイズを超えてしまうため 暴走してしまいました ADDWF PCL,F RETLW 0xFF RETLW 0xFF ・ ・ 自分が出せる解決案としては下記2点ぐらいで よいと思える案が思いつきません ・org でプログラム先頭にテーブルを配置する (ただし割り込みルーチンも orgで移動することになる) ・テーブルを分割する (あまりエレガントでない様に感じますが) 識者の方 どうかご教示いただければ幸いです
- 705 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 22:04:29 ID:tT7tCfdD]
- >>702
こんな感じ feng3.cool.ne.jp/10f/index.html
- 706 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 22:11:16 ID:tT7tCfdD]
- >>704
基本はその2つ。 ただし前者の場合、テーブルをゼロ(に近い)番地から置く必要はない。 0x100〜でも0x200〜でも、同じ256ワード境界内の適当なところに置けばよい。 また後者の場合、テーブルを分割して不連続に配置する必要はない。 テーブルが256ワード境界を超える場合のみPCLATHをインクリメントすればよい。
- 707 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 22:15:43 ID:ysEtSTow]
- 6pinPICのICSPに5本の線が必要なのか・・・
- 708 名前:774ワット発電中さん mailto:sage [2008/03/05(水) 22:18:29 ID:cLR33ngQ]
- >>704
orgで後ろのほうに配置して、PCLATHを設定するのが一般的じゃないかな。 org 0x800 TABLE bsf PCLATH,2 addwf PCL,f retlw 0xff retlw 0xff ・ ・
- 709 名前:706 mailto:sage [2008/03/05(水) 22:31:58 ID:tT7tCfdD]
- >>704
>>706の後者の方法はこんな感じ。動作確認してないが。 ; 既にPCLATHは適切に設定されているものと仮定。 ; そうでないと5ができないし。 ADDLW _table ; 1. 5と同じ計算をやってみる BTFSC STATUS, C ; 2. 256ワード境界を越えるかどうかチェック INCF PCLATH ; 3. 越えるのでPCLATHをインクリメント ADDLW 0x100 - _table ; 4. 1で加算した値を減算 ADDWF PCL, F ; 5. テーブルジャンプ _table: RETLW 0xFF RETLW 0xFF ...
- 710 名前:774ワット発電中さん [2008/03/05(水) 22:32:45 ID:m2St0ld/]
- >>704
1)PIC18を使う 2)PIC24を使う 3)dsPICを使う 4)AVRを使え
- 711 名前:706 mailto:sage [2008/03/05(水) 22:35:52 ID:tT7tCfdD]
- 何度もすまん。
ひょっとして4と5はMOVWF PCLの1命令で済むような気もしてきた。
- 712 名前:704 [2008/03/05(水) 22:42:42 ID:r/MIrdVp]
- >>706 >708
早速 のお答えありがとうございます テーブルを後ろに配置すること と PCLATHへの設定がポイントですね こうして答えを聞いて理解してみると なんとまあ愚問でもあったのかとすこし反省するしだいです ありがとうございました
- 713 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 00:05:24 ID:xTdZQiKe]
- これすげーよ
ttp://sho1.jp/sho1/index.html
- 714 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 00:12:21 ID:hEV3AOZL]
- ↑
ブラクラではない 本当だぞ!!!
- 715 名前:近藤@日シ相 [2008/03/06(木) 00:15:39 ID:NRvujtX9]
- 内容を書きましょう。
それが掲示板のマナーです。(^。^)
- 716 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 00:42:32 ID:xTdZQiKe]
- 私はそのようなマナーを聞いたことがありません。
どこに記載されていますか? --------------------------------- ヘ_ヘ ミ・・ ミ ( )〜 ---------------------------------
- 717 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 00:45:00 ID:4HQ372LE]
- >>713のサイトは音が出る。注意。
これくらいは書いた方が親切心じゃないですか?
- 718 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 01:13:59 ID:t2NoFiy4]
- >>713
>どんな ばしょでも ひけちゃうよ! おともだちと なかよく えんそうかいを ひらこう!
- 719 名前:302 mailto:sage [2008/03/06(木) 09:03:39 ID:n9caGLQn]
- どうも僕です。
タイマーにTMR1を使い、コンペアマッチで割り込み周期をリロードする ようにしたら、特に遅延もなく正確に表示できるようになりました。 ダイナミック表示も1セグメントあたり2ms弱で4桁表示で8msで安定して 表示できるようになったのでちらつきも減りました。 プログラムは、ポーリングをやめて元通り割り込みに戻せたので簡単に なり、一気にくみ上げれました。 乾電池使用による消費電力の問題は、5分ボタンに反応がなければ 低消費電力モード(7セグを一瞬だけつける)ようにしたり、深夜と 早朝の2期間を、一秒ごとに真ん中のセグメントのドットのみ点灯 するように設定するモードをつけました。 なおその場合でもボタンを操作すると、3分間は通常点灯になります。 とりあえず時計はできたので、次はハードを弄らずスロットマシン のプログラムでも組んでみます。 ありがとうございました。
- 720 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 11:18:41 ID:EKm4epzD]
- >>719
おーがんばったな。
- 721 名前:774ワット発電中さん [2008/03/06(木) 13:19:25 ID:6dqaej3f]
- 18F1230/1330を使っているのだが、インクルードファイルの定義間違いを
見つけてしまった。ブラウンアウトリセットレベル(BORV1,BORV0)の設定 故、特段の実害はなかったけど、こういう間違いは良くあることなの?
- 722 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 13:24:55 ID:CC0mqrA3]
- 使ってるソフトの名前くらい書こうよ
- 723 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 14:20:16 ID:6dqaej3f]
- 貧乏人なので無料のMPLAB IDE(v8.01)以外を使うという発想が湧かなかった。
タダだからって手を抜くことないよね -> Microchip
- 724 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 14:56:12 ID:EKm4epzD]
- データシートもタダだが、間違いがあって修正が入ることはよくある。
- 725 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 15:20:12 ID:CXjPRfW4]
- >>721
人間のやることだミスは付きものだろう。 そのままメーカに指摘しないと修正されないままかもね。
- 726 名前:774ワット発電中さん [2008/03/06(木) 15:49:01 ID:9FhpT+dw]
- 間違いはあるぞ。
挙動がおかしくてハード もソフトもみーんな見直して どこも悪くなくて、最後にマニュアルの間違いということは1度や2度じゃない。 さらには、知らんあいだにマニュアルpdfが直されていて その間違いが無かったことにされていた >mplab7.0
- 727 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 16:39:42 ID:HYiT895i]
- >725
データシートならば英文でも頑張れるけど、英作文はしんどい。 ということで、マイクロチップジャパンにメールした。
- 728 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 22:58:04 ID:bCKT1KAo]
- ありそうでなかった 16F88 i2c/mster mode ・・・
- 729 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 23:25:06 ID:UWODgjJF]
- 左利き用のミットか。
- 730 名前:774ワット発電中さん mailto:sage [2008/03/06(木) 23:53:56 ID:EKm4epzD]
- >>728
確かに、ありそうでない。 I2C Masterでデータのシリアル送受信をハード的にやってくれるのはPIC18Fからだね。
- 731 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 00:37:47 ID:EKbHSZO4]
- SPI ではmaster/slave があるのでそちらでやってみようと思う
- 732 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 02:49:05 ID:f31gD6vC]
- >713 ttp://blog.livedoor.jp/toru_saito/archives/50017509.html
既視感で悶々としていたのだが、ようやく安心して寝ることが出来る。
- 733 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 03:54:53 ID:nDX+Dbeg]
- org 0x000 ;0番地からスタートするよ
goto main ;0番地 org 0x004 ;4番地からスタートするよ bsf 〜〜 ;4番地 bcf 〜〜 ;5番地 retfie ;6番地 main bsf 〜〜 ;1番地 bcf 〜〜 ;2番地 movwf 〜〜 ;3番地 movf 〜〜 ;4番地 割り込み処理がかかった場合は4番地から開始されるんですよね? 上記の様なプログラムの場合、4番地が二つあるあることになって しまい割り込みがかかったらmovfを実行しちゃわないですか? それとも根本的に番地についての考えかたが間違ってます? ご教授よろしくお願いします。
- 734 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 03:59:05 ID:QdWQku+9]
- orz 2ch で嵌りかけた俺が(ry
お前は何かカンチガイしているようだ。 org 0x000 ;0番地からスタートするよ goto main ;0番地 org 0x004 ;4番地からスタートするよ bsf 〜〜 ;4番地 bcf 〜〜 ;5番地 retfie ;6番地 main bsf 〜〜 ;7番地 bcf 〜〜 ;8番地 movwf 〜〜 ;9番地 movf 〜〜 ;10番地 こうなるわけだが。何か反論はあるかね?
- 735 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 05:06:26 ID:HhmS7pcu]
- >>733
結論は>>734の言うとおりです。アセンブルしたときに出来る.lstファイル にソースコードと番地の対応が書いてあるので見てみて下さい。
- 736 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 05:06:33 ID:nDX+Dbeg]
- >>734
おはようございます。 オナニーした後のようにスッキリしました。 ありがとうございました。
- 737 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 05:11:02 ID:nDX+Dbeg]
- >>735
おお、こんなファイルが生成されてたとは.....勉強になります。 朝からありがとうございます。
- 738 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 10:09:00 ID:3KiAkwmp]
- >>730
何でPIC18Fからなんだよ。 PIC16C717とかPIC16F87xあたりでも桶だろ。
- 739 名前:774ワット発電中さん mailto:sage [2008/03/07(金) 13:08:25 ID:+5F/JsI+]
- >>735
そんなものがあったとは!勉強になります。 テーブルがページに引っかかってないか見れるわけですな。
- 740 名前:あぼーん mailto:あぼーん [あぼーん]
- あぼーん
- 741 名前:774ワット発電中さん mailto:sage [2008/03/08(土) 17:53:14 ID:WMiPWa60]
- メルアドくらい伏せてやれよ
関係者ではないが そんなこともできないカスは消えろ
- 742 名前:774ワット発電中さん [2008/03/08(土) 17:53:23 ID:vPAFiuvh]
- 伊藤さんはメールしても返事をされないので、こちらで連絡
させていただきました。
- 743 名前:近藤@日湘 mailto:sage [2008/03/08(土) 18:06:56 ID:OAZL+3y+]
- >740
名前かハンドルネームをな(ry もしかしてダメンジョン?
- 744 名前:(;´Д`)ハァハァ mailto:sage [2008/03/08(土) 21:08:56 ID:ncPiuVEh]
- あたしでハァハァしたいと思うなんて、許さない!!!
- 745 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 17:32:07 ID:Jpj4DI15]
- >>497
この様なスイッチング波形の乱れは、秋月で売っている4万円くらいのデジタルオシロでも見れますか?
- 746 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 17:51:01 ID:dVjMVQ/u]
- >>745
みえる
- 747 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 20:44:17 ID:Jpj4DI15]
- >>746
どうもありがとう。安いのは性能が悪くて駄目なのかと思いました。 あと、PIC使ってサイクルでon・offさせた場合は、オシロでは早すぎて見れませんよね。 それを考えるとマイコンって凄いな。あまり意味無いと思いますがふと思いました。
- 748 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 20:51:20 ID:JL56mFJK]
- むしろ20MHzくらいで鈍い方が見やすいな
高価な機材でフィルターかけずに見ると優良な電源でもスパイクだらけ…
- 749 名前:774ワット発電中さん [2008/03/09(日) 22:31:49 ID:UUq7y5pb]
- mikroCの挙動が怪しいので、マイクロチップ純正C18コンパイラ(Student
Ed. Ver.3.16)を試したんだけど、変数にvolatile宣言しているにも関わ らず、ちゃんと正しいコードが出ていない悪寒がするんだが、こんなもん? volatile char s_chrTestData; として宣言した変数を使って、EUSARTの送信割込で... s_chrTestData+=1; if(s_chrTestData>'Z') s_chrTestData='A'; TXREG1=s_chrTestData; てなコードを書いたが、出力される送信データは、0x00の連続。 試しに、上記を TXREG1=0x55; と書き換えると、ちゃんと0x55('U')が連続で送信される。 ちなみに、デバイスはPIC18F8722(PIC18F8720)でつ。CONFIGのXINSTと ビルド設定をExtendedでやってみたけど変わらず。orz あと、romとか、near/farを指定する必要があるのかもしれんけど、C18 では関数ポインタがうまくコンパイルされていないっぽい。 結局、mikroCの方がまだマシという結論に至ったんだけど、騙しながら 使うしかないのか?
- 750 名前:774ワット発電中さん [2008/03/09(日) 22:39:36 ID:TiK/O25B]
- >>749
Atmelマンセー
- 751 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 22:57:26 ID:i4AjUHxv]
- s_chrTestData
はグローバル変数? グローバルだったとしても、 if(s_chrTestData>'Z') だから最初の50数回は0x00になると思うのは気のせい?
- 752 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 23:00:00 ID:i4AjUHxv]
- 50数回じゃないな...
Uが0x55ならZは0x5Aだから90か。
- 753 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 23:02:56 ID:i4AjUHxv]
- あ...何言ってんだ俺。。
>グローバルだったとしても、 以下はムシしてちょ
- 754 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 23:04:55 ID:i4AjUHxv]
- あう。。
>>751は丸々無視してくだされ。。。 一回逝ってくるorz
- 755 名前:774ワット発電中さん [2008/03/09(日) 23:43:26 ID:ec7RTfie]
- なんかこのスレ壊れてるらしいのですが...。
- 756 名前:749 [2008/03/09(日) 23:44:37 ID:UUq7y5pb]
- もちろん変数はグローバルで、main()の最初の方で初期化(='A')して
ますし、元々このへんはmikroCではちゃんと動いていたソースを持って きてます。(レジスタ名などの違いは直してます) 他にも、volatile宣言したフラグ(グローバル変数)を、タイマ割込ルー チン内でセットして、main()側のループでフラグを監視して、セット されていたらある処理をしてフラグをクリアするという、ごく普通の コードを書いたけど、最初うまく動かなくて、タイマ割込が発生して いないのかと思いLEDを点滅させる処理を割込内に入れてみたら、 ちゃんと点滅しており、こちらも同様にフラグの更新やチェックの コードが正しく生成されていないという結論になりました。 どうも、volatileをいじるコードが別ソース(.c)に存在するとおかしな コードを吐く気がする。 mikroCは、多重(といっても二重の)forループの中でbreakすると、動き がおかしいみたいだったので、C18への移行を検討したんだけど、無駄 だったみたい。 結局、mikroCは、ネストした中のforループを独立した関数に分割して、 戻り値の違いで呼び出し元の関数から抜けるようにした。あと、どうも POR時、PIRxレジスタの値が不定で、割り込み使う前にクリアする必要 があるっぽい。
- 757 名前:774ワット発電中さん mailto:sage [2008/03/09(日) 23:53:47 ID:S+BYwzBI]
- >>747
>あと、PIC使ってサイクルでon・offさせた場合は、オシロでは早すぎて見れませんよね。 on/off周期と使うオシロ次第。 うちのは秋月の安いオシロだが、PIC16Fなら最高速でon/offさせても十分見える。 dsPICの最高速だとちと厳しい。
- 758 名前:774ワット発電中さん [2008/03/09(日) 23:59:33 ID:TiK/O25B]
- >>755
一度ログ消して、もう一度全部読み直せばOK
- 759 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:02:25 ID:ec7RTfie]
- >785
直りました!ありがとうございますです。
- 760 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:05:35 ID:S+BYwzBI]
- >>756
>どうも、volatileをいじるコードが別ソース(.c)に存在するとおかしな >コードを吐く気がする。 あるソースではvolatile宣言あり、別のソースではvolatile宣言なし、ってな具合に なってたりはしないだろうか。 そのvolatile変数の宣言(定義じゃなくて)を.hに入れて、その変数を使う.cでは その.hを#includeしてる?
- 761 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:28:22 ID:zCSgn/Rp]
- 専ブラまでおかしくなった
- 762 名前:749 [2008/03/10(月) 00:31:03 ID:8vCVgGRK]
- >>760
> そのvolatile変数の宣言(定義じゃなくて)を.hに入れて、 > その変数を使う.cでは その.hを#includeしてる? 当然、.hで「extern volatile char xxxx;」で宣言し、特定の ソース(.c)のみで「volatile char xxxx;」と実体化しています。 PICのCは使い込んでないけど、昨日や今日、C/C++を触り始めたわけ じゃないので。(w フツー、片方(.c or .h)だけvolatileだと、コンパイル時にエラーが 出ますし、変数の実体が複数あればリンクエラーが出ますよ。 そういえば、C18って、「//」コメントは通るくせに、引数を持たない関数 のプロトタイプ宣言は「void func();」じゃダメで「void func(void);」 と書かなきゃならんのも気になった。(w
- 763 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:32:44 ID:UNBZqdYT]
- >>749
volatileを取ったらどうなるの? バグだとして、回避できる可能性は高いんじゃない? なんつうか、そもそもvolatile装飾っての自体が 最適化のバグを回避しようって修飾子なんだよな… 「ループ中にも割り込み処理等で値が変化する変数なんだぜ」 ということを明確にする意味で書いちゃう人が多いと思うけど、 元々はそういう装飾子なんだから無いに越したことはないと思うんだが… それよか、初心者はvolatileなんて知らない&使わないし、 組み込み用に特化したコンパイラって事もあから、 むしろ「グローバル変数は言われなくともデフォでvolatileみたいな扱い」 してると考えた方が良いのかと思ったり
- 764 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:32:57 ID:UVGfxUrE]
- >>762
せっかく答えてくれている人に対して 俺は知ってるんだぜ的な態度をとるならもっと自分でかんがえろよ(w
- 765 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:48:04 ID:08V8cKg+]
- >>762
よく考えたら、割り込みルーチン内で完結しているs_chrTestDataのアップデートに 対しても動作がおかしいから、volatile修飾の有無以前の話だな。 MPLAB SIMで、s_chrTestDataへの代入(メモリへの値の書き込み)にブレークポイントを 設定して 1. その割り込みルーチン内でs_chrTestDataが期待どおりに更新されているか(2ヶ所) 2. 割り込みルーチン以外のどこでs_chrTestDataが更新されているのか を確認してみては。 >>764 まぁまぁ。ここは2chだから、どっち側の人間でも、気に入らなければ無視すればいい だけのことで。
- 766 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:48:40 ID:M4KxFBHp]
- ためしに>>749のコードをMPLAB-SIMで動かしたら値はちゃんと代入されました。
割り込みはタイマ、同じcファイル上で、だけど。
- 767 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 00:49:22 ID:qh6uFiaS]
- 昨日今日じゃないなら、なぜアセンブラのリスティングを・・・
- 768 名前:749 [2008/03/10(月) 00:50:38 ID:8vCVgGRK]
- >>763
もちろん、volatileを取ってもやってみた(というか当初は付けてない)し、 変数の代入による初期化で変数をROMへ配置する可能性(もっともその場合 'A'が連続送信されるはずだが)もあって、コードで初期化するようにして みたりしたんだが、状況変わらず。(w ちなみにStudent Editionなので最適化オプションはもともと使えません。 さすがに、5万以上出してまでバグの検証はやりたくない。 そもそも、割込関数の共通処理で変数に初期値を代入していないので、 volatileなしでも最適化はされないはずなんだが。 PICユーザって、大容量のROMを持つPICも、あの使いにくいアセンブラで 書いてるの?それとも単に大容量flashは不揮発データを置いておくため だけに使ってるの? まさか、LEDチカチカさせておしまい?
- 769 名前:749 [2008/03/10(月) 00:58:36 ID:8vCVgGRK]
- コードの最適化が変というより、バンクレジスタの管理か何かがおか
しくて、まったく別の領域をアクセスしようとしている感じ。
- 770 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:00:20 ID:UNBZqdYT]
- >>764
762(=749)は、教えて欲しいんじゃなくて 「C18コンパイラにバグが有るのではないか」という話をしてると思う 君も言い方が悪いよ。 「俺は知ってるんだぜ的に見えて気分が悪い」…で止めとけば 「悪かったね、反省汁」という事にならね? >>749 初心者扱いしてるように見えたらスマソ。 グローバルで static char buff[8]; volatile char s_chrTestData; という感じで宣言してたとして、 プログラム中のどこかで buff[8]=0; みたいな事になってるとか。 buffは[0]から[7]までの8個だから[8]はオーバーフロー。 実際にはs_chrTestDataが0に書き換わる とりあえず、 static char buff[8]; static char dummy[16]; volatile char s_chrTestData; とか、ダミーを挟んでみて改善するならビンゴじゃないか?
- 771 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:14:04 ID:ktvuBSIm]
- 今頃はソースにバグハケーンしてガクブル中か。(w
- 772 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:31:33 ID:G9raQcrq]
- エラソーに構えてたら自分のミスだったってのはよくあることだな。
- 773 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:36:05 ID:xNV6wEel]
- コンパイラのバグと疑うなら再現する最小限のソースを示すのが
まず最初だと思うんだが。 ああ、そのくらいは解かってますよね、昨日今日始めたわけじゃないし。
- 774 名前:749 [2008/03/10(月) 01:36:10 ID:8vCVgGRK]
- >>770
あくまでテストコードの段階なので、指摘のような複雑なコードは 書いてません。初期化が終わったメインは無限ループだし。 ヒマがあれば再現する最小コードを確認したいところだが、余計な回り道 でずいぶんと時間を浪費したので、C18への乗換案は捨てて、製品版を購入 済のmikroCでやっつけることにした。 CCS-Cとか他のコンパイラもあまり評判良くないみたいやし。PICって 開発環境が貧弱なのね。(w ところで、日本語版がないのは仕方ないとしても、PIC18F8722って、 データシート(39646b.pdf)も暫定版(Preliminary)のままで、'04年 からまったく更新されてないよな?
- 775 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:42:17 ID:XSYgkBu5]
- まーそんなとこだろうな。
要はデバッグ能力不足をツールのせいにしたいと。 気にすんな、そんな開発者は大勢いる。お前だけじゃない。
- 776 名前:749 [2008/03/10(月) 01:45:01 ID:8vCVgGRK]
- >>773
コンパイルの単純なバグならね。 致命的だし、こんなバグが簡単に再現するなら、Microchipが見落としても、 さすがにユーザは納得しないかと。 たぶん、単一のソースなら問題は起こらないと思うし、複数ソースに分か れているからという単純な理由だけでも起こらない気がする。
- 777 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:45:35 ID:+HDaq5zJ]
- >>774
開発環境に重点置くならもっと高価で高機能のCPU使えばいいのでは? ARMでもSH/Tinyでもええやん。 オレには君が何故PICを使ってるのかが良く判らんw
- 778 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:46:47 ID:G9raQcrq]
- 結局ソース出さずじまいでワロタ
- 779 名前:749 [2008/03/10(月) 01:47:23 ID:8vCVgGRK]
- >>775
コンパイラのバグ出しをやりたくないだけ。 結局、PICユーザって、スレタイ通り、ライタを作るのが精いっぱいで ロクに使っていないのね。
- 780 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:54:31 ID:+HDaq5zJ]
- 使いこなせてないだけで、コンパイラのバグじゃないと思うw。
確かに、8bit-PICでC使うは制限事項が多いのでハマる可能性は高いとは思うが 誰にも助けてもらえないのはコンパイラのバグせいではあるまい。
- 781 名前:749 [2008/03/10(月) 01:56:25 ID:8vCVgGRK]
- >>777
元あったハードがmikroBASIC(PIC877)で組んであって、そのソースを 流用したいから&ソフト担当がCは(BASICしか)判らんという理由で (ピン数が多い)PIC18F8722になった。秋月で買えるし。 んで、漏れはハードの動作確認目的を兼ねて、それとは別にCでソフトを 書いている。
- 782 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 01:58:41 ID:9dv+XC8h]
- 正直言えば、いつもこのスレ見てても他人の質問はそのまま読み流して後で同じ質問をしてボッコボコにされるのがいつもの自分。
他人様の質問を見るだけでなく、自分もそれに対して考えたり悩んだりすれば役に立つのはわかるが、頭が受け付けない。 困ったもんだ。
- 783 名前:760 mailto:sage [2008/03/10(月) 01:58:50 ID:08V8cKg+]
- なんか荒れてる感じだが、>>765の作業は数分でできて(MPLAB SIMの使い方を
調べる時間は除く)、コンパイラのバグかどうかはそれですぐ分かると思うんで、 まぁ気が向いたらやってみてくれ。
- 784 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 02:17:14 ID:G4IUBvMq]
- 少なくともソースのうpぐらいはできるわな。
- 785 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 02:23:10 ID:+HDaq5zJ]
- >>784
仕事の一貫なら出来ないかもよ。 でも仕事なら2chで聞くのもどうかとは思うが。横の繋がり無いのかよw
- 786 名前:749 [2008/03/10(月) 03:05:05 ID:8vCVgGRK]
- 新規にプロジェクトを起こして、不要なソースは外し、割り込み要因も
EUSARTだけに限定した最小コードにしてみたが、まったく同じだな。 ワーク(0xF0A)のインクリメントを含めて、確かにSIM上では正しく動い たが、やはり実機では0x00を送信する。ポート反転で割込の発生周期が 正常なことも確認した。 割込処理での送信レジスタへの代入を0x55に変更すると、0x55('U')を 送信する。 まぁ、おまえらがC18を使っていないことだけはよくわかった。 無駄に5万円を使うこともなかったことがせめてもの救いかな?
- 787 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 03:07:43 ID:+HDaq5zJ]
- 子供だなあw
- 788 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 03:23:26 ID:Uc3fcFms]
- >>787
picスレにはpicの使いにくさにやたら食いつく粘着質の荒らしが 数人いる。 彼らは、picが使いこなせなくて恥をかいた経験があるのだが 自分の実力の無さを棚に上げてpic批判に走る。
- 789 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 03:28:28 ID:Lfo+sg5I]
- それはPICがポピュラーなことの裏返しだから仕方がないな。
有名税みたいなもんだ。
- 790 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 03:39:07 ID:+HDaq5zJ]
- >>788
正直PICがソフトウェア的に使いやすいとは思わないがw だったら自分の目的に合ったチップ選べばいいじゃんと思う PICが悪いのじゃなくて、自分の選択が誤ってるだけだろう。 >>789 PICがポピュラー? 確かに秋月ではポピュラーだがww。
- 791 名前:749 [2008/03/10(月) 03:46:55 ID:8vCVgGRK]
- とりあえず、以下のことがわかった。
テストに使ってるのが、18F8722ではなく18F8720だったのだが、mikroC では、8722用にビルドしたHEX(COFIGを含む)を18F8720に書いて問題なく 正常に動くが、C18では動かない。 C18では、デバイス設定,インクルードファイル、リンカスクリプトを18F 8722から18F8720に差し替えて、18F8720には存在しないBAUDCON1,SPBRGH1 レジスタへの設定をスキップしたら動いた。 ちなみに、どちらも割込のプライオリティは使っていないし、コンパイラ 付属のライブラリは使用していない。(mikroCは、割込処理が1つに固定)
- 792 名前:749 [2008/03/10(月) 03:47:45 ID:8vCVgGRK]
- さて、寝るか。(w
- 793 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 03:57:51 ID:fWC7aww6]
- 結局、バグってたのは>>749のソースのほうだったんだな。
正解オメ>>771>>772>>775>>780>>788
- 794 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 04:26:09 ID:UNBZqdYT]
- >当然、.hで「extern volatile char xxxx;」で宣言し、
>特定のソース(.c)のみで「volatile char xxxx;」と実体化しています。 s_chrTestDataが複数有るように聞こえる… 「特定のソース」でなく「1つのソース」だよね??? 例えばmain()の有るソースにのみs_chrTestDataの実体があって、 他のソースは全てextern。で、実体は1個というのが正解でしょ? もしかして複数のソースにextern無しで 「volatile char s_chrTestData;」と記述が有るのでは…
- 795 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 05:38:46 ID:ghVCMiOd]
- 乗り遅れにも限度ってあるだろ・・・
- 796 名前:749 mailto:sage [2008/03/10(月) 08:01:52 ID:8vCVgGRK]
- ソース自体はバグってはいないよ。C18でも「SIM上では」ちゃんと動く
(wんだから。 それに、mikroCでは8720用に書き直さずともちゃんと動くし、mikerCの 方は再現する最小コードよりもっと複雑な処理をやらせている。 他にもC18の場合、mikroCでは触っていない、POR時に初期値でDisabled されているようなレジスタまで、わざわざ明示的に再設定しないと動か ないことがあった。 スタートアップの変数領域の初期化か何かで、勝手にレジスタまで書き 換えてしまっているような印象だな。
- 797 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 10:45:22 ID:fRSJBPOR]
- >>769
あー、もういいよ。 再現するコードをうpする気ないなら、説得力ゼロだし。 ネタも無しに「俺の業務(デバッグ)に付き合え」って、 図々しいにも程があるw
- 798 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 10:50:03 ID:m74vVO5Z]
- そうだな、ソース以前にビルド時のターゲットと、
実際に動作させるデバイスが違ってた、っていう 「使い方間違えた」くらいのレベルだもんな。
- 799 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 11:49:46 ID:Eiqp934G]
- 実チップで動かないなら、そりゃあシミュレータが実チップの
動作を完全にシミュレートできていないおかげで動いているだけ と考えるほうが自然だろう。
- 800 名前:774ワット発電中さん mailto:sage [2008/03/10(月) 15:25:58 ID:ktvuBSIm]
- ネタ枯れ中だったから、良い煽りネタだったな。反面教師ってやつだ。
しかし、こんなに必死にmikroCマンセーするやつも珍しいwww
|
|