Перейти к содержанию
    

STM32CubeIDE игнорирует точки остановки

Добрый день,

Имеется плата stm32mp157 с Линуксом на борту. Пытаюсь отладить прогу для сопроцессора М4 с помощью stm32CubeIde в режиме Debug, с использованием GDB. Прога грузится и стартует, но некоторые точки останова (ТО) игнорируются. Например, при старте прога не останавливается в начале main(). Все ТО до вечного цикла игнорируются, на ТО, установленной на while() {} останавливается и работает уже как надо. Может кто встречался с подобной проблемой? Как её решить?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Алексей ВМ1 said:

Серое и нельзя выбрать

Он вам как бы намекает, что нету в вас 'main' 😞 Возможно файл с main был собран без отладочной информации? (Так, в порядке бреда)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

image.thumb.png.12b87f1e58bd159cd57e51c828916428.png

В файле main.c три точки остановки. Останавливается на последней (там где while (1)). Предыдущие просто игнорирует.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, Алексей ВМ1 сказал:

В файле main.c три точки остановки. Останавливается на последней (там где while (1)). Предыдущие просто игнорирует.

1. Откройоте ассемблерный листинг и посмотрите что там у вас получилось из main().

2. Попробуйте поставить оптимизацию на минимум. Или вообще без оптимизации собрать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. С main() все норм, код есть:

int main(void)
{
10000118:	b580      	push	{r7, lr}
1000011a:	af00      	add	r7, sp, #0
  /* USER CODE BEGIN 1 */
	flag = 1;
1000011c:	4b18      	ldr	r3, [pc, #96]	; (10000180 <main+0x68>)
1000011e:	2201      	movs	r2, #1
10000120:	701a      	strb	r2, [r3, #0]
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
10000122:	f000 fded 	bl	10000d00 <HAL_Init>

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  if(IS_ENGINEERING_BOOT_MODE())
10000126:	4b17      	ldr	r3, [pc, #92]	; (10000184 <main+0x6c>)
10000128:	681b      	ldr	r3, [r3, #0]
1000012a:	f003 0307 	and.w	r3, r3, #7
1000012e:	2b04      	cmp	r3, #4
10000130:	d101      	bne.n	10000136 <main+0x1e>
  {
    /* Configure the system clock */
    SystemClock_Config();
10000132:	f000 f82d 	bl	10000190 <SystemClock_Config>
  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
10000136:	f7ff ffa9 	bl	1000008c <MX_GPIO_Init>

  LOOP_Init();
1000013a:	f7ff ffb9 	bl	100000b0 <LOOP_Init>

  //MX_ADC1_Init();
#if 1
  MX_TIM_Init();
1000013e:	f000 fbe1 	bl	10000904 <MX_TIM_Init>
  /* USER CODE BEGIN 2 */
  TIM2->CCER |= TIM_CCER_CC1E;
10000142:	f04f 4380 	mov.w	r3, #1073741824	; 0x40000000
10000146:	6a1b      	ldr	r3, [r3, #32]
10000148:	f04f 4280 	mov.w	r2, #1073741824	; 0x40000000
1000014c:	f043 0301 	orr.w	r3, r3, #1
10000150:	6213      	str	r3, [r2, #32]
  TIM2->CCER |= TIM_CCER_CC1P;
10000152:	f04f 4380 	mov.w	r3, #1073741824	; 0x40000000
10000156:	6a1b      	ldr	r3, [r3, #32]
10000158:	f04f 4280 	mov.w	r2, #1073741824	; 0x40000000
1000015c:	f043 0302 	orr.w	r3, r3, #2
10000160:	6213      	str	r3, [r2, #32]

2. Оптимизацию первым делом отключил.

image.thumb.png.d7c140ca5980d06f255b0fc5060f4a58.png

Если отлаживать в Engineering mode, все работает как надо,на всех ТО останавливается. Проблема возникает в Production mode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Алексей ВМ1 сказал:

С main() все норм, код есть:

Тогда откройте окошко с ассемблером в отладчике и поставьте бряк там. Если поставился и сработал, значит проблема у Вас быстрее всего - со связыванием кода с исходником (т.е. - в отладочной информации, которая это связывание задаёт).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, jcxz сказал:

Тогда откройте окошко с ассемблером в отладчике и поставьте бряк там. Если поставился и сработал - значит проблема у Вас со связыванием кода с исходником (т.е. - в отладочной информации, которая это связывание задаёт).

Не помогло, ставлю бряки прямо в окошке дизассемблера. Игнорирует. Скорей все особенность Production mode, видимо GDB чего-то не подгружает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, Алексей ВМ1 said:

1. С main() все норм, код есть:

int main(void)
{
10000118:	b580      	push	{r7, lr}
1000011a:	af00      	add	r7, sp, #0
  /* USER CODE BEGIN 1 */
	flag = 1;
1000011c:	4b18      	ldr	r3, [pc, #96]	; (10000180 <main+0x68>)
1000011e:	2201      	movs	r2, #1
10000120:	701a      	strb	r2, [r3, #0]
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
10000122:	f000 fded 	bl	10000d00 <HAL_Init>

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  if(IS_ENGINEERING_BOOT_MODE())
10000126:	4b17      	ldr	r3, [pc, #92]	; (10000184 <main+0x6c>)
10000128:	681b      	ldr	r3, [r3, #0]
1000012a:	f003 0307 	and.w	r3, r3, #7
1000012e:	2b04      	cmp	r3, #4
10000130:	d101      	bne.n	10000136 <main+0x1e>
  {
    /* Configure the system clock */
    SystemClock_Config();
10000132:	f000 f82d 	bl	10000190 <SystemClock_Config>
  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
10000136:	f7ff ffa9 	bl	1000008c <MX_GPIO_Init>

  LOOP_Init();
1000013a:	f7ff ffb9 	bl	100000b0 <LOOP_Init>

  //MX_ADC1_Init();
#if 1
  MX_TIM_Init();
1000013e:	f000 fbe1 	bl	10000904 <MX_TIM_Init>
  /* USER CODE BEGIN 2 */
  TIM2->CCER |= TIM_CCER_CC1E;
10000142:	f04f 4380 	mov.w	r3, #1073741824	; 0x40000000
10000146:	6a1b      	ldr	r3, [r3, #32]
10000148:	f04f 4280 	mov.w	r2, #1073741824	; 0x40000000
1000014c:	f043 0301 	orr.w	r3, r3, #1
10000150:	6213      	str	r3, [r2, #32]
  TIM2->CCER |= TIM_CCER_CC1P;
10000152:	f04f 4380 	mov.w	r3, #1073741824	; 0x40000000
10000156:	6a1b      	ldr	r3, [r3, #32]
10000158:	f04f 4280 	mov.w	r2, #1073741824	; 0x40000000
1000015c:	f043 0302 	orr.w	r3, r3, #2
10000160:	6213      	str	r3, [r2, #32]

2. Оптимизацию первым делом отключил.

image.thumb.png.d7c140ca5980d06f255b0fc5060f4a58.png

Если отлаживать в Engineering mode, все работает как надо,на всех ТО останавливается. Проблема возникает в Production mode.

Кто бы сомневался!

image.thumb.png.2539333dc34c3b38ecc6f92e4faa5239.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, tonyk_av сказал:

Кто бы сомневался!

 

эм

image.thumb.png.bf746d4c00e55ac522e37204c0da3a8b.png

все установлено

Изменено пользователем Алексей ВМ1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию и включают максимальный уровень оптимизации. Попробуйте в отладочной конфигурации включить максимальный уровень оптимизации, тогда понятней станет.

Just now, Алексей ВМ1 said:

эм

image.thumb.png.bf746d4c00e55ac522e37204c0da3a8b.png

Выключ-включи. Часто помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, tonyk_av сказал:

Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию

Если не срабатывают бряки установленные даже в ассеблерном окошке, то дело не в отладочной информации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, tonyk_av сказал:

Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию и включают максимальный уровень оптимизации. Попробуйте в отладочной конфигурации включить максимальный уровень оптимизации, тогда понятней станет.

Выключ-включи. Часто помогает.

не помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по адресам - код выполняется из ОЗУ? Посмотрите какого типа бряки у вас ставит IDE: аппаратные или программные?

В IAR это позволяет сделать следующее окошко:

image.png.af1567cf731451a7eeb790d9f0f24578.png

Как у Вас - не знаю. Специально для вас поставил бряки двух разных типов.

Это на XMC4700. На нём из ОЗУ работают оба типа бряков. Но сталкивался с таким, что на некоторых МК, hardware-бряки установленные в ОЗУ - не работают. А нужно ставить только software-бряки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...