никак не могу разобраться, где посмотреть как лежат в памяти мои переменные.
Смотрю map-файл - в нем есть секции .bss, .data, .stack. Со стеком все понятно. в .data лежит список из нескольких файлов в формате *.obj:
CODE
.data 0 00002052 0000001a UNINITIALIZED
00002052 00000008 sensor_service.obj (.data)
0000205a 00000007 adc.obj (.data)
00002061 00000001 hci.obj (.data)
00002062 00000006 ble.obj (.data)
00002068 00000004 main.obj (.data)
00002052 00000008 sensor_service.obj (.data)
0000205a 00000007 adc.obj (.data)
00002061 00000001 hci.obj (.data)
00002062 00000006 ble.obj (.data)
00002068 00000004 main.obj (.data)
я так понимаю, это использование памяти автоматическими и/или статическими переменными, расположенными внутри функций в соответствующих файлах. окей, смотрим содержимое main.c:
есть внутри main() переменная uint32_t systick_old, больше там никаких переменных не создается. 4 байта. подходит. Далее смотрим adc.c. там переменных внутри ф-ций побольше:
static uint8_t adc_cnt;
static uint32_t adc_total;
uint8_t voltage;
uint8_t percents;
static uint8_t voltage_old;
получается 8 байт. все эти переменные используются. похоже, на счет того, что лежит в области .data я ошибаюсь. что же там лежит? это первый вопрос
в области .bss вероятно лежат глобальные переменные (если я ошибаюсь - скажите)
второй вопрос: как увидеть нормальный map-файл, где видно занимаемый объем памяти каждой переменной? допустим у меня есть глобальная переменная systick, в map-файле указано, где она лежит, но не указано, сколько занимает. с мелкими переменными в своем коде все просто. а если где-то в недрах библиотеки какой-то буфер жрет кучу памяти, как его найти в .map?
и третий вопрос. есть в CCS вкладка memory allocation, которая показывает, сколько памяти занимается. там указан объем используемой RAM == 1212 байт и FLASH == 10726 байт.
Когда же я захожу в дебаг, в консоли написано:
Loading complete. There were 10726 (code) and 48 (data) bytes written to FLASH/FRAM. The expected RAM usage is 1822 (uninitialized data + stack) bytes.
Отчего так разрослась используемая область RAM? где глянуть что ее сожрало? (в дебаге CIO отключено)