文中に『それぞれの位置を調べて2 番目の作業のために反転する』と、
コメントがありますが、この構文で反転されているのでしょうか?
/********************************************************************** * * 関数: memTestDevice * * 内容: 加算検査や減算検査をすべての領域に対して行うこと * により、物理メモリデバイスが完全な状態かどうかを * 検査をする。この作業においては、デバイスに格納 * されているすべてのビットが0 が1 か検査される。 * ベースアドレスとその領域の大きさは呼び出し側にて * 指定される。 * * 注意事項: * * 戻り値: 検査が異常を検知すれば0。そのアドレスは引数 * ppFailAddr に入れて返される。 * 検査が正常終了すれば1。引数ppFailAddr には * NULL が入れられる。 * **********************************************************************/ int memtestDevice(datum *pBaseAddress, uint32_t numBytes, datum **ppFailAddr) { uint32_t offset; uint32_t numWords = numBytes / sizeof(datum); datum pattern; *ppFailAddr = NULL; /* あらかじめ分かっているパターンでメモリを埋めつくす */ for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++) pBaseAddress[offset] = pattern; /* それぞれの位置を調べて2 番目の作業のために反転する */ for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++) { if (pBaseAddress[offset] != pattern) { *ppFailAddr = &pBaseAddress[offset]; return 0; } ・ ・ ・ ・ ・
> /* それぞれの位置を調べて2 番目の作業のために反転する */
> for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++)
この for-loop の最後の } が現れるまでを呈示してもらわんと判断できません。
これが構文の全てです。
int memtestAddressBus(datum *pBaseAddress, uint32_t numBytes, datum **ppFailAddr)
{
uint32_t addressMask = (numBytes - 1);
uint32_t offset;
uint32_t testOffset;
datum pattern = (datum) 0xAAAAAAAA;
datum antipattern = (datum) pattern;
*ppFailAddr = NULL;
/* 2 のべき乗のオフセットにあらかじめ決めておいたパターンを書く */
for (offset = sizeof(datum); (offset & addressMask) != 0; offset <<= 1)
pBaseAddress[offset] = pattern;
/* アドレスビットが高電位かどうか調べる */
pBaseAddress[0] = antipattern;
for (offset = sizeof(datum); offset & addressMask; offset <<= 1)
{
if (pBaseAddress[offset] != pattern)
{
*ppFailAddr = &pBaseAddress[offset];
return 0;
}
}
pBaseAddress[0] = pattern;
/* アドレスビットが低電位かまたはショートしているか調べる */
for (testOffset = sizeof(datum); testOffset & addressMask; testOffset <<= 1)
{
pBaseAddress[testOffset] = antipattern;
for (offset = sizeof(datum); offset & addressMask; offset <<= 1)
{
if ((pBaseAddress[offset] != pattern) && (offset != testOffset))
{
*ppFailAddr = &pBaseAddress[offset];
return 0;
}
}
pBaseAddress[testOffset] = pattern;
}
return 1;
}
なにそれ? あなたの質問は memtestDevice の中のことでしょ?
なぜに memtestAddressBus を示したんです?
そのコードはどこから持ってきたもんなんでしょうか
申し訳ありません。
構文を間違えました。
こちらが質問内容の構文です。
この構文はO'REILLYの参考書のものです。
int memtestDevice(datum *pBaseAddress, uint32_t numBytes, datum **ppFailAddr)
{
uint32_t offset;
uint32_t numWords = numBytes / sizeof(datum);
datum pattern;
6.4 メモリの検査 107
*ppFailAddr = NULL;
/* あらかじめ分かっているパターンでメモリを埋めつくす */
for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++)
pBaseAddress[offset] = pattern;
/* それぞれの位置を調べて2 番目の作業のために反転する */
for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++)
{
if (pBaseAddress[offset] != pattern)
{
*ppFailAddr = &pBaseAddress[offset];
return 0;
}
pBaseAddress[offset] = pattern;
}
/* それぞれの位置の反転されたパターンを調べて0 にする */
for (pattern = 1, offset = 0; offset < numWords; pattern++, offset++)
{
if (pBaseAddress[offset] != pattern)
{
*ppFailAddr = &pBaseAddress[offset];
return 0;
}
pBaseAddress[offset] = 0;
}
return 1;
}
回答1件
あなたの回答
tips
プレビュー