Например TDA7294

Форум РадиоКот :: Просмотр темы - Не считываются значения регистров под отладкой в окне Watch
Форум РадиоКот
https://radiokot.ru/forum/

Не считываются значения регистров под отладкой в окне Watch
https://radiokot.ru/forum/viewtopic.php?f=59&t=196493
Страница 1 из 1

Автор:  maksimdag0 [ Ср янв 22, 2025 07:55:31 ]
Заголовок сообщения:  Не считываются значения регистров под отладкой в окне Watch

Доброго дня! Нужны дополнительные умы!)
Решил создать проект с нуля без 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 KiB]
Скачиваний: 47

Автор:  jcxz [ Вт янв 28, 2025 06:15:28 ]
Заголовок сообщения:  Re: Не считываются значения регистров под отладкой в окне Wa

Я думал может тактирования не включено, но значения не показываются даже на таких регистрах как "FLASH->ACR, RCC-CR"
А почему они у вас имеют тип 'uchar'? Они ведь должны быть 32-битными.

, а для них в программе тактирование не нужно включать.
Имхо - тактирование тут не при чём. Если было бы из-за этого, то отображались бы или случайные значения или что-то типа "Unable to access".
Скорее всего - что-то у вас неправильно объявлено. Может быть есть конфликт нескольких дублирующих объявлений или что-то подобное.
Для теста попробуйте создать свою структуру описания проблемных регистров периферии (со своим неконфликтующим именем естественно), натянуть её на адресное пространство соответствующей периферии и посмотреть в "Watch".

Вот как FLASH.ACR выглядит у меня в Watch IAR для STM32F429:
Изображение
как видно - регистры 32-битные. И это ещё до включений всяческих тактирований, на самом старте прошивки.

Автор:  maksimdag0 [ Пт янв 31, 2025 18:36:14 ]
Заголовок сообщения:  Re: Не считываются значения регистров под отладкой в окне Wa

uchar пишется keil всегда если какая-то проблема. Например если мы в watch запиши несуществующий регистр то тоже тип будет uchar.
До сих пор я еще ищу решение для этой проблемы. Есть небольшая зацепка, в проекте, сгенерированном Cubemx, как я уже писал, регистры все показывает нормально, но если удалить библиотеку HAL, то возникает такая же песня(регистры перестают видеться). Ищу проблему, страдаю

Автор:  maksimdag0 [ Сб фев 01, 2025 23:18:14 ]
Заголовок сообщения:  Re: Не считываются значения регистров под отладкой в окне Wa

Вроде победил, а вроде и нет.
В общем, если использовать в функции 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 KiB]
Скачиваний: 34


если НЕ отображается:
Вложение:
Screenshot_17.png [11.88 KiB]
Скачиваний: 29


В итоге я думаю что если возникает какая-о операция, где необходимо обраться в flash, то тогда keil считывает и отображается в watch значение регистров.

Автор:  jcxz [ Вс фев 02, 2025 00:12:14 ]
Заголовок сообщения:  Re: Не считываются значения регистров под отладкой в окне Wa

Ищу проблему, страдаю
Страдаете, а советы игнорируете... :dont_know:

Автор:  maksimdag0 [ Вс фев 02, 2025 12:46:52 ]
Заголовок сообщения:  Re: Не считываются значения регистров под отладкой в окне Wa

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/