Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба Добрый день, Имеется плата stm32mp157 с Линуксом на борту. Пытаюсь отладить прогу для сопроцессора М4 с помощью stm32CubeIde в режиме Debug, с использованием GDB. Прога грузится и стартует, но некоторые точки останова (ТО) игнорируются. Например, при старте прога не останавливается в начале main(). Все ТО до вечного цикла игнорируются, на ТО, установленной на while() {} останавливается и работает уже как надо. Может кто встречался с подобной проблемой? Как её решить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба Тут что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба Серое и нельзя выбрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 8 minutes ago, Алексей ВМ1 said: Серое и нельзя выбрать Он вам как бы намекает, что нету в вас 'main' 😞 Возможно файл с main был собран без отладочной информации? (Так, в порядке бреда) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба В файле main.c три точки остановки. Останавливается на последней (там где while (1)). Предыдущие просто игнорирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 17 минут назад, Алексей ВМ1 сказал: В файле main.c три точки остановки. Останавливается на последней (там где while (1)). Предыдущие просто игнорирует. 1. Откройоте ассемблерный листинг и посмотрите что там у вас получилось из main(). 2. Попробуйте поставить оптимизацию на минимум. Или вообще без оптимизации собрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 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. Оптимизацию первым делом отключил. Если отлаживать в Engineering mode, все работает как надо,на всех ТО останавливается. Проблема возникает в Production mode. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 9 минут назад, Алексей ВМ1 сказал: С main() все норм, код есть: Тогда откройте окошко с ассемблером в отладчике и поставьте бряк там. Если поставился и сработал, значит проблема у Вас быстрее всего - со связыванием кода с исходником (т.е. - в отладочной информации, которая это связывание задаёт). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 6 минут назад, jcxz сказал: Тогда откройте окошко с ассемблером в отладчике и поставьте бряк там. Если поставился и сработал - значит проблема у Вас со связыванием кода с исходником (т.е. - в отладочной информации, которая это связывание задаёт). Не помогло, ставлю бряки прямо в окошке дизассемблера. Игнорирует. Скорей все особенность Production mode, видимо GDB чего-то не подгружает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 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. Оптимизацию первым делом отключил. Если отлаживать в Engineering mode, все работает как надо,на всех ТО останавливается. Проблема возникает в Production mode. Кто бы сомневался! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 (изменено) · Жалоба 2 минуты назад, tonyk_av сказал: Кто бы сомневался! эм все установлено Изменено 5 апреля, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию и включают максимальный уровень оптимизации. Попробуйте в отладочной конфигурации включить максимальный уровень оптимизации, тогда понятней станет. Just now, Алексей ВМ1 said: эм Выключ-включи. Часто помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 2 минуты назад, tonyk_av сказал: Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию Если не срабатывают бряки установленные даже в ассеблерном окошке, то дело не в отладочной информации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 12 минут назад, tonyk_av сказал: Так ведь потому и делают две конфигурации! В итоговую не включают отладочную информацию и включают максимальный уровень оптимизации. Попробуйте в отладочной конфигурации включить максимальный уровень оптимизации, тогда понятней станет. Выключ-включи. Часто помогает. не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба Судя по адресам - код выполняется из ОЗУ? Посмотрите какого типа бряки у вас ставит IDE: аппаратные или программные? В IAR это позволяет сделать следующее окошко: Как у Вас - не знаю. Специально для вас поставил бряки двух разных типов. Это на XMC4700. На нём из ОЗУ работают оба типа бряков. Но сталкивался с таким, что на некоторых МК, hardware-бряки установленные в ОЗУ - не работают. А нужно ставить только software-бряки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться