プロが教えるわが家の防犯対策術!

現在、動作確認を行っている基板があるのですが、経験が少なく、いろいろとわかる方に聞く日々が続いています。いろいろと教わった結果、メモリ領域の操作方法や、どのようにメモリ領域を使っているのかを把握することがとても重要と考えて来るようになりました。そこで、テストボードで、CPUにつながったメモリの番地を聞いてみたところ、開発で使用している”memmap.h”というファイルがあると教わりました。それを閲覧してみると次のようにかかれていました。


#include "comm.h"
#include "event.h"
#include "ethernet/dhcp.h"
/*
FALSE Memory Map
*/

#define FLASH_BASE0x200000

#define FLASH_FONT_ADDRFLASH_BASE
#define FLASH_AUDIO_ADDRFLASH_BASE + 0x0B0000
#define FLASH_NUMBER_ADDRFLASH_BASE + 0x1F0000
#define FLASH_ENV_ADDRFLASH_BASE + 0x1F8000


/*
SRAM Memory Map
*/

#define SRAM_BASE0x400000

#defineSARM_TCP_PVC_BUF(BYTE *)(SRAM_BASE + 0x008000) //8
#define SRAM_NUMBER_BUF(BYTE *)(SRAM_BASE + 0x010000) //8
#define SRAM_ENV_BUF(BYTE *)(SRAM_BASE + 0x018000) //8
#defineSRAM_FLASH_BUF(BYTE *)(SRAM_BASE + 0x020000) //8
#define SRAM_NET_BUF(BYTE *)(SRAM_BASE + 0x030000) //1
#define SRAM_AUDIO_BUF(BYTE *)(SRAM_BASE + 0x040000) //2

#define SRAM_MISC_USE(BYTE *)(SRAM_BASE + 0x060000) //8
#define SRAM_STACK_BUF(BYTE *)(SRAM_BASE + 0x069000) //8
#define SRAM_JURNEL_BUF(BYTE *)(SRAM_BASE + 0x070000)
#define SRAM_JURNEL_BUF2(BYTE *)(SRAM_BASE + 0x078000)

それで、0x400000番地からのSRAMは常に基板の電源を切っても電池で守られているためデータは消えないのですが、ここにパスワード関連の410000番地からのSRAM_NUMBER_BUFでいったんデータを登録したら、FLASH領域のSRAM_NUMBER_BUF(3F0000番地から)に丸ごとコピーしているそうなのですが、そのように丸ごとコピーできるC言語の関数は内でしょうか?また、丸ごとコピーできるような簡単な書き方はないでしょうか?

A 回答 (3件)

memcpyはだめですか?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

http://www.geocities.jp/ky_webid/c/058.htmlここのWEBサイトでmemcpy関数の使い方をみたのですが、

今回の場合だと、SRAM_NUMBER_BUF(0x410000番地)から0x8000分のデータをFLASH_NUMBER_ADDR(0x3F0000番地)から書き込むという風にするには

memcpy(FLASH_NUMBER_ADDR,SRAM_NUMBER_BUF,0x8000);と記述すればよいということでしょうか?

お礼日時:2009/01/23 16:45

#include<string.h>


memmove(void *distination,void *source,size_t size);
memcpyと異なり、メモリ領域が重複していても安全にコピーできます。
現在はコピー領域が重複していなくても、仕様変更が無いとは言え
ないので、注意しておくべきでしょう。
コピー元とコピー先が重複していて、コピー元が下位アドレスに
あると、memcpyではデータが壊れることがあります。
    • good
    • 0

どんなCPUなのかわかりまんが、


一般的には、FLASH領域に書き込むのは、単にメモリ転送すればいいわけではなくて、それ専用のAPIを使う必要があると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!