PIC AVR 工作室 ブログ

「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。

 
クリックで「PIC AVR 工作室」topに戻ります。
クリックで「PIC AVR 工作室 arduino別館」topに戻ります。

 

PIC AVR 工作室 掲示板

 

カレンダー

2017年
← November →
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

カウンター

  • 本日のアクセス  
  • 昨日のアクセス  
  • 総アクセス数      

 

過去ログ

ブログサービス

Powered by

teacup.ブログ
RSS
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
投稿者:nekosan
マイコンで巨大な配列定義を行うようなケースって、おおよそ「音声などのシリアルアクセスのバイナリデータ」や「デコード用の定数テーブル定義」とかに限られると思うので、いっそのこと用途限定の専用関数やマクロが組み込まれちゃうと楽でいいよなぁ…なんて思いました。

ハーバードアーキティクチャだから、無理に通常のC言語変数とシームレスなアクセス方法を踏襲させようとすると無理が出るし、8ピンのマイコンと多ピンのマイコンで同じ内部定義を流用すればやっぱり無理が出るだろうし…
投稿者:Chuck
GET_FAR_ADDRESS までたどり着きましたね。avr-gcc に公式に取り込んでもらいたいもののひとつです。

構造にしたがって pgm_read_byte_far() を繰り返し呼んで手元の構造体にコピーしてアクセスすればいいのではないでしょうか?
もっともread onlyの使い方だと思うのでそこまで頑張らなくても良いのかもしれません。
投稿者:nekosan
Chuckさん、ありがとうございます。

uint_farptr_t って指定の仕方があるんですね…。

1案としてインラインアセンブラで.db展開しておいて、そこにポインタで変数のガラを重ねて参照し様かとか考えていたんですが、重ねる変数の定義自体が仕様制約に引っかかっちゃうので、それじゃぁ元の木阿弥だな…と思って諦めてました。

早速イロイロ調べてみました。
http://www.nongnu.org/avr-libc/user-manual/group__avr__inttypes.html#g5082b177b7d7b2039652c26a72b96d18
こことか
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=34344&highlight=GET_FAR_ADDRESS
こことかでいろいろ触れられてました。
akibowさんのところで日本語訳もあるようです。感謝。

構造体にするのはちょっと難しいかも…。

でもまぁ、今回の件に限定したら、1バイト単位バラバラで読むんでも事足りるので、応用可能ですね。
投稿者:Chuck
以前に私もこの問題につき当たった事があります。
テーブルをアセンブリ言語で書いて、Cからはテーブル先頭アドレスを extern const の uint_farptr_t としてアクセスしました。
そのときはBYTE読み出ししただけでしたが、構造体だとちょっと面倒かもしれませんね。
teacup.ブログ “AutoPage”
AutoPage最新お知らせ