Безопасная запись непосредственно на адрес памяти - PullRequest
0 голосов
/ 07 марта 2019

Я пишу в регистр с известным адресом.

volatile uint32_t *my_address =
    (volatile uint32_t *)MY_ADDRESS;

*my_address = 0x1234;

Какой самый безопасный способ записи в память?Я читал, что он должен быть помещен за макрос и / или я должен проверить, что указатель не является нулевым.

Спасибо

1 Ответ

1 голос
/ 08 марта 2019

Если вы хотите безопасно писать / читать отображенную память, вы можете использовать уже существующий фрагмент кода, предназначенный именно для этой цели, например, заголовочный файл ARM mmio.h .

Результирующий код, эквивалентный коду в вашем примере, будет:

#include<mmio.h>
// ...
mmio_write_32(MY_ADDRESS, 0x1234);

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

Поскольку этот заголовочный файл широко используется, вы можете разумно прекратить беспокоиться об операциях чтения / записи в вашем реестре, используя его.

И поскольку он лицензирован в соответствии с BSD 3-Clause , вы можете использовать его как в своих коммерческих, так и в домашних проектах.

...