Невозможно обновить значение указателя - PullRequest
0 голосов
/ 04 мая 2019

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

volatile uint32_t *myAddress = (volatile uint32_t*)0x12341234;

uint32_t timestamp = 0x1111;

*myAddress = timestamp;

Ответы [ 2 ]

4 голосов
/ 04 мая 2019

Невозможно обновить значение указателя

То есть, вы не можете обновить указанное значение

Выполнение

 volatile uint32_t *myAddress = (volatile uint32_t*)0x12341234;

 uint32_t timestamp = 0x1111;

 *myAddress = timestamp;

, которое вы используете(очень вероятно) недопустимый адрес 0x12341234, из-за чего он имеет неопределенное поведение

Сделайте что-то подобное:

uint32_t v;

volatile uint32_t *myAddress = &v;

uint32_t timestamp = 0x1111;

*myAddress = timestamp;
// now v values 0x1111

Пример:

#include <stdio.h>
#include <stdint.h>

int main()
{
  uint32_t v = 0;

  volatile uint32_t *myAddress = &v;

  uint32_t timestamp = 0x1111;

  *myAddress = timestamp; // now v values 0x1111

  printf("0x%x 0x%x\n", (unsigned) v, (unsigned) *myAddress);

  return 0;
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
0x1111 0x1111
pi@raspberrypi:/tmp $ 
0 голосов
/ 04 мая 2019
volatile uint32_t *myAddress = (volatile uint32_t*)0x12341234;

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

например:

(ARM STM32)

volatile uint32_t *initialSP = (volatile uint32_t *)(0x8000000);

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
GPIOA -> MODER = value;

Адрес должен иметь физический смысл - т.е.быть действительным.

Вероятно, это не так, и вы получаете ошибку оборудования или памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...