почему 0x40010800 + 0x0C равно 0x40010830?

Я попытался получить доступ к регистру RCC_APB2ENR в качестве первого шага, чтобы мигать зеленым светом на stm32nucleo f103rb

затем я добавил 0x0C к 0x40010800 (базовый адрес RCC).

Ожидаемый результат был 0x4001080C, но фактический результат был 0x40010830 !!!

Кажется, что 0x0C был сдвинут дважды, но я не могу понять, почему это произошло.

И даже в Ubuntu произошло то же самое.

пожалуйста, дайте мне знать

плата: stm32 nucleo f103rb IDE: uVision 5


person 김정우    schedule 06.03.2021    source источник


Ответы (1)


RCC_BASE указывает на unsigned int. На вашей платформе размер этого типа составляет 4 байта.

При добавлении или вычитании указателей вы увеличиваете (или уменьшаете) адрес на операнд, умноженный на размер элемента.

Подробнее см. Арифметика указателя

person tymmej    schedule 06.03.2021