こんにちは。
よこです。
const uint8_tで宣言した配列(ここではu8_src[8])の値を別の配列(ここではu8_dst[8])にコピーしたいのですが、値がコピーできずに困っています。
デバッグの"式"という機能でu8_srcの値を見ようとしたところ、u8_srcの値は"Cannot access memory at address 0xf0a29"というエラーが出ており内容の確認ができませんでした。
u8_src[] = {1,2,3,4,5,6,7,8};
(constなのでromに保管されていて中が見れない??)
なので、試しに変数(uint8_t u8_Array)を作ってu8_src[0]の値をコピーしたところ、u8_Arrayには"0"が入っており正しい値が入っておりませんでした。(期待値は"1")
多分、u8_srcにアクセスできないのがエラーの原因だと思いますが、どのように対処すれば良いのかわかりません。
どなたかご助言いただけませんでしょうか。
使用している環境は以下のとおりです。
IDE: Renesas e² studio
Version: 2022-04 (22.4.0)Build Id: R20220331-2313
Compiler: CC-RL
Version: v1.11.00
RL78だと高位番地側にRAMがあり、RAMが少ないデバイスなら0xf0a29にはRAMが存在しません。リンクして出力されたmapファイルとハードウェアマニュアルに載っているメモリマップを比べてみましたか?リンカオプションのセクション設定で変なアドレスを指定してもリンクエラーにはならないのでmapファイルの確認は必要です。
チョコです。
RL78は、0xF0800~0xF0FFFhの領域は使用不可の領域です。
ほやさん、チョコさん
ご返事ありがとうございます。
解決できました。
原因はコピーしたい配列がnearのデータ領域に保管されておらず、
far領域に保管されていたため、
関数の(uint8_t near)*型の引数に"&u8_src"を入れるとアクセスできない領域にアクセスして
"Cannot access memory at address 0xf0a29"というエラーが出ていることがわかりました。
そのため、引数を(uint8_t far*)に変更することで問題が解決できました。
ありがとうございました!
> 引数を(uint8_t far*)に変更することで問題が解決できました。なるほど。これもRL78あるあるですね。