Не считываются значения регистров под отладкой в окне Watch

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Не считываются значения регистров под отладкой в окне Watch

Сообщение maksimdag0 »

Доброго дня! Нужны дополнительные умы!)
Решил создать проект с нуля без cubeMX, ручками. Появилась такая проблема - не отображаются данные регистров под отладкой(в окне Watch), место значения укзанао <cannot evaluate>. Причем если просматривать значения регистров через средство от keil "Periphery" то все работает, значения показываются и изменяются в процессе работы программы. Причем значения переменных показывается как нодо.
Я думал может тактирования не включено, но значения не показываются даже на таких регистрах как "FLASH->ACR, RCC-CR", а для них в программе тактирование не нужно включать. Но если создать проект через cubeMX, то все работает как надо. Так и кажется что в какой-то мелочи проблема, что-то может в настройках, или файл какой добавить, но сижу уже два дня над этой проблемой много что перепробовал, но в итоге так ничего и не нашел. Кто сталкивался с таким, подскажи в чем может быть проблема?



В файле system_stm32f4xx.c я оставил только следующий код:

#include "system_stm32f4xx.h"

uint32_t SystemCoreClock = 168000000;
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};

void SystemInit(void)
{
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
}



В файле main.с я настраиваю flash, системную частоту(на168МГц) и systick. Все делаю только библиотекой CMSIS(не спрашивайте почему, :D)

Микроконтроллер STM32F407VET6. Работаю в IDE Keil
Вложения
Screenshot_11.png
(5.63 КБ) 72 скачивания
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Не считываются значения регистров под отладкой в окне Wa

Сообщение jcxz »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4674150#p4674150"]Я думал может тактирования не включено, но значения не показываются даже на таких регистрах как "FLASH->ACR, RCC-CR"[/uquote]А почему они у вас имеют тип 'uchar'? Они ведь должны быть 32-битными.

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4674150#p4674150"], а для них в программе тактирование не нужно включать.[/uquote]Имхо - тактирование тут не при чём. Если было бы из-за этого, то отображались бы или случайные значения или что-то типа "Unable to access".
Скорее всего - что-то у вас неправильно объявлено. Может быть есть конфликт нескольких дублирующих объявлений или что-то подобное.
Для теста попробуйте создать свою структуру описания проблемных регистров периферии (со своим неконфликтующим именем естественно), натянуть её на адресное пространство соответствующей периферии и посмотреть в "Watch".

Вот как FLASH.ACR выглядит у меня в Watch IAR для STM32F429:
Изображение
как видно - регистры 32-битные. И это ещё до включений всяческих тактирований, на самом старте прошивки.
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Не считываются значения регистров под отладкой в окне Wa

Сообщение maksimdag0 »

uchar пишется keil всегда если какая-то проблема. Например если мы в watch запиши несуществующий регистр то тоже тип будет uchar.
До сих пор я еще ищу решение для этой проблемы. Есть небольшая зацепка, в проекте, сгенерированном Cubemx, как я уже писал, регистры все показывает нормально, но если удалить библиотеку HAL, то возникает такая же песня(регистры перестают видеться). Ищу проблему, страдаю
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Не считываются значения регистров под отладкой в окне Wa

Сообщение maksimdag0 »

Вроде победил, а вроде и нет.
В общем, если использовать в функции main какую нибудь функцию HAL, то значение регистров показываются. Например если в пустую функцию main записать функцию «HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)» то регистры в watch показываются. Но это работает не со всем функции HAL.
Я не могу понять почему такое поведение, конкретно из-за чего зависит отображения значение регистров в watch?
Есть у кого нибудь какие догадки, ибо у меня в голове уже ничего не приходит?

Добавлено after 4 hours 40 minutes 14 seconds:
Re: Не считываются значения регистров под отладкой в окне Watch
Вообщем все что было выяснено:
в проекте с библиотекой SPL, в пустом проекте тоже значение регистров не отображаются в окне watch. Но если написать следующий код:
GPIO_InitTypeDef GPIO_InitStructure = {0};
GPIO_Init(GPIOA, &GPIO_InitStructure);
то отображаться регистры будут(даже если функция GPIO_Init пустая). Если передачу структуры в функцию GPIO_Init удалить то регистры НЕ будут отображаться.
Когда значение регистров отображаются(для примера взят регистр FLASH->ACR) то в окне Command отображается следующею:
Screenshot_16.png
(12.79 КБ) 62 скачивания
если НЕ отображается:
Screenshot_17.png
(11.88 КБ) 54 скачивания
В итоге я думаю что если возникает какая-о операция, где необходимо обраться в flash, то тогда keil считывает и отображается в watch значение регистров.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Не считываются значения регистров под отладкой в окне Wa

Сообщение jcxz »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4677756#p4677756"]Ищу проблему, страдаю[/uquote]Страдаете, а советы игнорируете... :dont_know:
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Не считываются значения регистров под отладкой в окне Wa

Сообщение maksimdag0 »

Забыл написать, не получилось у меня так сделать
Ответить

Вернуться в «ARM»