現在、動作確認を行っている基板があるのですが、経験が少なく、いろいろとわかる方に聞く日々が続いています。いろいろと教わった結果、メモリ領域の操作方法や、どのようにメモリ領域を使っているのかを把握することがとても重要と考えて来るようになりました。そこで、テストボードで、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言語の関数は内でしょうか?また、丸ごとコピーできるような簡単な書き方はないでしょうか?
No.1ベストアンサー
- 回答日時:
memcpyはだめですか?
回答ありがとうございます。
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);と記述すればよいということでしょうか?
No.3
- 回答日時:
どんなCPUなのかわかりまんが、
一般的には、FLASH領域に書き込むのは、単にメモリ転送すればいいわけではなくて、それ専用のAPIを使う必要があると思います。
No.2
- 回答日時:
#include<string.h>
memmove(void *distination,void *source,size_t size);
memcpyと異なり、メモリ領域が重複していても安全にコピーできます。
現在はコピー領域が重複していなくても、仕様変更が無いとは言え
ないので、注意しておくべきでしょう。
コピー元とコピー先が重複していて、コピー元が下位アドレスに
あると、memcpyではデータが壊れることがあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- スポーツサイクル SRAM Forceの10Sスプロケット(PG-1070 11-28T)にSHIMANO ULTEG 2 2022/04/23 10:30
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- スポーツサイクル 宜しくお願いいたします。 邪道な発想なのは重々承知の上での質問です… ジュニアスプロケットCS-66 5 2022/05/01 07:51
- スポーツサイクル ディレーラーについてです。 現装しているのはSHIMANO RD-5701SS 105(10速)です 1 2022/04/26 12:55
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- インターネットビジネス BASEの機能の相談です 1 2023/04/23 14:58
- その他(車) 軽自動車に普通車のタイヤ+ホイールsetは装着可能でしょうか? 4 2022/12/10 22:40
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- 英語 in the head の意味 4 2023/07/15 07:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
一行おきに貼り付ける 可能でし...
-
C++言語で、構造体のコピーは可...
-
Eclipseのコード入力時の、行コ...
-
バッチで当日日付で作成される...
-
Activesheet.Pasteで困っています
-
マウントしたディスクにcpで、...
-
Listviewに表示された文字のコ...
-
シートに張り付けたボタンがシ...
-
DataTableに入っているデータを...
-
VBAのコピーマクロがデバッグに...
-
ACCESS VBAでExcelを開き行をコ...
-
Ctrl + Cなど複数の入力キー...
-
エクセルVBA 実行時エラー'...
-
Eclipseでコピーするとき行数な...
-
文字列の切り出し
-
WEBでエクセルのような表を...
-
JP1の質問です。
-
Excelでコピーしたセル(テキス...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
Eclipseのコード入力時の、行コ...
-
DataTableに入っているデータを...
-
C++言語で、構造体のコピーは可...
-
エクセルのマクロについて教え...
-
マウントしたディスクにcpで、...
-
エクセルVBA 実行時エラー'...
-
Ctrl + Cなど複数の入力キー...
-
Activesheet.Pasteで困っています
-
Listviewに表示された文字のコ...
-
arduino unoからデータを読み出...
-
文字列の切り出し
-
ROBOCOPYをスペース付きのフォ...
-
一行おきに貼り付ける 可能でし...
-
Eclipseでコピーするとき行数な...
-
シートに張り付けたボタンがシ...
-
プログラムについて。
-
【UWSC】WEBページ内コピーした...
-
ブラウザからコピペすると文字...
-
OutlookVBAでコピーした文字を...
おすすめ情報