Метка, экспортированная из файла сборки, недоступна в c - PullRequest
0 голосов
/ 08 февраля 2019

Когда я запускаю свой код в симуляторе keil, переменная __heap_base (которая является меткой в ​​файле запуска) не содержит базы кучи (я обнаружил, что база кучи равна 0x20000000), но всегда показывает 0x00000000.Как сделать, чтобы __heap_base содержал правильное значение, чтобы я мог увеличивать и уменьшать базу кучи.

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

            #include <stdint.h>
            extern uint32_t __heap_base;
            uint32_t memallocate(int size)
            {
                 uint32_t temp=__heap_base;
                 __heap_base=__heap_base+size;
                 return temp;
            }
            int maina()
            {
                int *p=(int*)memallocate(sizeof(int));
                *p=5;
                return 0;
            }

Адрес памяти 0x20000000 должен содержать значение 5

...