Это 64-битная операция записи в C - PullRequest
0 голосов
/ 09 марта 2011

Я написал функцию, которая должна выполнить 64-битную инициализацию памяти для встроенного устройства. Может кто-нибудь сказать мне, если эта функция будет выполнять эту задачу?

void write64BitValueTo(void* address, U_INT64 pattern)
{

    int i;

    U_INT64 size = (0x20000000 / sizeof(U_INT64));

    //printf("Size = 0x%8X \n",size);
    U_INT64 *ptr = (U_INT64 *) address;

    for(i = 0; i< size; i++)
    {
        *ptr = pattern;
        ptr++;
    }
}

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Вы должны объявить ptr как volatile U_INT64 *ptr, так как в противном случае компилятор мог бы оптимизировать удаление *ptr = pattern.

Если важно, чтобы шаблон действительно записывался в память, а не только в кэш данныхпри условии, что он есть), вы также должны очистить кеш впоследствии.В противном случае ваш код выглядит просто отлично.

0 голосов
/ 09 марта 2011

Это должно работать до тех пор, пока address правильно выровнен, чтобы позволить хранить 64-битные слова в вашей архитектуре.

Мне любопытно: почему ты пишешь

for(i = 0; i< size; i++)
{
    *ptr = pattern;
    ptr++;
}

когда

for(i = 0; i < size; i++)
    *ptr++ = pattern;

проще и легче писать и читать?

...