Я видел Как найти адрес переменной при использовании AVR? - и вывод там в основном:
printf () - отладка по встроенным целямнемного сложнее, вам нужно покопаться и выяснить, есть ли код для соединения printf () с последовательным портом и так далее.Кроме того, полный printf () может быть немного тяжелым, так что, возможно, вы уже используете урезанную стандартную библиотеку.Это не ответственность компилятора, вам нужно выяснить, как он реализован.
... но я не могу понять, почему возникла моя проблема.
У меня есть переменнаякоторый я хотел бы использовать как «массив строк» и который я хотел бы использовать для malloc и realloc:
char** my_array = malloc(sizeof(char*)*1);
Затем я перенаправил printf
для «печати» на последовательный порт USBпорт, а затем я читаю распечатки в последовательном терминале.
Насколько я знаю, спецификатор формата %p
для printf должен печатать адрес переменной в виде шестнадцатеричного числа.И у меня есть такое утверждение:
printf("my_array %p\r\n", (void *)&my_array);
Я также пробовал:
printf("my_array %p\r\n", &my_array);
printf("my_array %p\r\n", my_array);
Во всех случаях полученная распечатка выглядит следующим образом:
my_array ▒▒▒ꓣ▒▒▒▒/▒▒f'w'▒`$▒▒W*▒▒X▒f'w'▒`$▒▒Y*▒▒Z▒f'w'▒`▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒#▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒j▒{▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒i▒z▒▒`$▒▒
... что явно не шестнадцатеричное число.
Почему это происходит, и что я делаю неправильно?И как я могу получить адрес переменной, напечатанной в виде шестнадцатеричного числа в AVR?Если это имеет значение, я использую компилятор CodeVisionAVR ...
РЕДАКТИРОВАТЬ: нашел это:
https://www.avrfreaks.net/forum/format-specifier-pointers-0
Но люди на самом деле используют% pи особенно на AVR.На AVR указатель представляет собой 16-битное число без знака.Обычно я просто использовал бы% 04X или что-то другое.
(ОК, просто понял, что этот форум может означать 32-битную ARM или UC3, где, я думаю, указатели 32-битные? Даже если в этом случае% 08X)
... поэтому я просто использовал вместо этого:
printf("my_array %08X\r\n", (void *)&my_array);
... и теперь я получаю в качестве распечатки:
my_array 00003FFB
... но теперь у меня естьне знаю, фактический ли это адрес :)