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

Отладчик Keil MDK вытворяет непонятное

Друзья,

столкнулся с непонятным глюком отладчика Keil MDK 5.24.2 при изучении примера SPI  на отладочной плате STM32F746-Discovery:

При попытке пошагово пройти программу отладчик совершает невероятные прыжки то вверх по коду то на много команд вперед, потом снова назад, хотя программа линейная.

Если просто запустить без отладки, то программа один раз выполняется правильно, но при попытке ее зациклить с помощью "goto" она намертво где-то виснет.

Что посоветуете ?

 

Та же программа на отладочной плате STM32VL-Discovery (STM32F100) работает прекрасно и отладчик ведет себя хорошо.

Изменено пользователем TOG

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


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

1. Компиляция с оптимизация меняет порядок и оптимизирует несколько строк си в один блок ассемблерных команд. Поэтому если шагать в си коде курсов будет прыгать.

2. Кэши включены
 

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


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

Что посоветуете ?


На ассемблере эту тестуху написать (практически не шучу) - кроме вашего кода не будет ничего... Вопросов подобных просто не возникнет.

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


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

Спасибо друзья.

Выключил оптимизацию и отладчик заработал как надо. Выключил кэши и программа заработала как надо.

Одно не пойму. Это ведь пример из Cube F7, и там эти кэши включены были. Почему мне пришлось их выключить чтобы пример заработал ?

Изменено пользователем TOG

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


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

15 minutes ago, TOG said:

Почему мне пришлось их выключить чтобы пример заработал ?

Как бэ буду капитаном, но... найдите темы про куб на форуме... и придите в квыводу, что его выбросить надо, и надо начать с чтение документации))))

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


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

Столкнулся с такой проблемой на Keil (5.29)

Для проекта на STM32F427 не работает SPL,... ну как "не работает"... 

Например настройка clock и PLL проходит, SystemCoreClock равный 180000000 устанавливается, 

но стоит вызвать SystemCoreClockUpdate(), как она сбрасывается в 0.

"возвращаю" SystemCoreClock = 180000000;, камень запустился;

 

Дебажу SystemCoreClockUpdate(), внутри все временные переменные не отрабатываются, всегда 0.

 

Аналогично при и инициализации UART 

	USART_StructInit(&USART_InitStructure);
	USART_InitStructure.USART_BaudRate            	= 9600; 				
	USART_InitStructure.USART_WordLength          	= USART_WordLength_8b;  
	USART_InitStructure.USART_StopBits 				= USART_StopBits_1; 	
	USART_InitStructure.USART_Parity    			= USART_Parity_Even;	
	USART_InitStructure.USART_HardwareFlowControl 	= USART_HardwareFlowControl_None;          
	USART_InitStructure.USART_Mode                	= USART_Mode_Rx | USART_Mode_Tx;   
	USART_Init(USART_1RS485, &USART_InitStructure);

BRR = 0, т.е. настройки порта не устанавливаются

а флаги разрешения прерывания ставятся нормально

	
	NVIC_InitStructure.NVIC_IRQChannel = USART_1RS485_IRQn;	// UART7_IRQn
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  	
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	USART_ITConfig(USART_1RS485, USART_IT_RXNE, ENABLE);
	NVIC_EnableIRQ (USART_1RS485_IRQn);        

	USART_ClearITPendingBit(USART_1RS485, USART_IT_RXNE);
	USART_ClearITPendingBit(USART_1RS485, USART_IT_TXE);
	USART_ClearITPendingBit(USART_1RS485, USART_IT_TC);
	USART_ClearITPendingBit(USART_1RS485, USART_IT_ORE_RX);
	
	USART_Cmd(USART_1RS485, ENABLE);

Но прерывания по приему не возникает ...

--------

Прерывание от SysTim работает нормально, при инициализации

uint8_t SysTim_Init(uint16_t Tick) 	
{                                  	
    uint8_t result = 0;
    if ((Tick>4) && (Tick<=1000)){
        _iSysTick_Counter = 0;
        _iSysTick_Step = 1000 / Tick;
        if (_iSysTick_Step != 0){
            if (SysTick_Config(SystemCoreClock / Tick) == 0){
                result = 1;
				}
			}
		}
    return result;
}

Такой же примерно  проект (SysTim, GPIO, прерывания от TIMn, UART, ADC, DMA), но на STM32L151xxx работает и дебажится нормально...

Настройки  проектов аналогичны, кроме особенностей камня.

 

SPL и CMSYS пробовал разных релизов подключать, сейчас стоят последние скачанные с ST и Keil...

 

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

Впечатление, такое, что  что-то "не включил" в настройках, но чего не хватает не пойму ...

 

Изменено пользователем _dark_

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


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

Кажется сработал принцип "пока объяснял в чем проблема до самого дошло" ))

Пересобрал проект с "чистой" директории, скопировав все исходники, SPL, startup и CMSYS. 

После добавки всего этого в конфигурацию и минимальных настроек самого проекта, все завелось,

после добавления пары инклюдов в свои исходники

 

Вопрос закрыт. 

зы

После пересборки стало выдавать несколько элементарных ошибок,  хотя до этого хотя и чистил проект, но сборка была без них

(с полной перекомпиляцией).

 

Изменено пользователем _dark_

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


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

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

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

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

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

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

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

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

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

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