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

Что делать если большой проект перестает работать при оптимизации?

5 минут назад, x893 сказал:

Конечно, Все телодвижения уже записаны в startup

Я не пойму, в GCC бибиотека инициализации окружения C/C++ отсутствует? Все инициализации секций тоже руками пишут? Не верю.

В кейле всем этим занимается __main(), которая вызывается в startup-файле. Можно, конечно, и руками свою реализацию написать, но зачем?

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


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

On 7/22/2022 at 6:53 PM, Arlleex said:

Я не пойму, в GCC бибиотека инициализации окружения C/C++ отсутствует? Все инициализации секций тоже руками пишут? Не верю.

Руками пишут кому нравится. Но всё уже написано до нас.

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


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

On 7/22/2022 at 9:06 AM, AleksBak said:

Стиль тут по-моему не причем. Тут конкретный случай - ожидание сброса флага 'Busy' у модуля QUAD_SPI. Чтобы убедиться в неправильной работе тут - достаточно ТС вместо функции 

QUAD_SPI_WaitBusy();

поставить небольшую задержку. И если при разных оптимизациях будет работать, то дело тут именно.

Так и сделал. Проблема ушла. 

uint8_t SST26_ReadStatusRegistr(void)							//Функция читает байт статуса 26V016
{																//Для запуска в Quad режиме применить функцию SST26_Enable_Quad();
	QUAD_SPI_Enable;											//
	QUAD_SPI_WaitBusy();										//Полим флаг Busy регистра QUADSPI->SR
	QUADSPI->DLR = 0;											//Читаем 1 байт
//По 1 проводу:
//				   inst IMODE[1:0] ADMODE[1:0] ADSIZE[1:0] ABMODE[1:0] ABSIZE[1:0] DCYC[4:0] DMODE[1:0] FMODE[1:0] SIOO 
	QUADSPI->CCR = 0x05| 1<<8    |  0<<10    |   0<<12   |   0<<14   |   0<<16   |  0<<18  |  1<<24   |  1<<26   | 0<<28;
//По 4 проводам
//	QUADSPI->CCR =        3<<8    |  0<<10    |   0<<12   |   3<<14   |   0<<16   |  0<<18  |  3<<24   |  1<<26   | 0<<28;
	//HAL_Delay(1);


		for(int i = 0; i < 2 ; i++)
		{
		}
	uint8_t Data = DR_Read;										//По 4 проводам не пошла
	QUAD_SPI_Disable;											//
	return Data;												//
}																//

Оптимизация О3 прошла нормально. Вы были правы. Теперь чешу репу как уйти от этого кривого решения - задержка FOR мне не нравится.

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


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

On 7/22/2022 at 9:15 PM, x893 said:

Руками пишут кому нравится. Но всё уже написано до нас.

Руками пишут те, кто понимает, что ему нужно и для чего.

Например, стартап из Куба инициализирует память и вызывает конструкторы ещё до настройки частоты тактирования CPU, то есть на 16МГц. Мне в проекте нет нужды беречь каждый миллиампер, поэтому лучше сразу задать её в 216МГц, а потом уже заниматься прочими сервисными делами.

Ещё стартап из Куба искренне полагает как и все функции Куба, что тут он оказался исключительно в результате корректно выполненного сброса МК, а не программного или аппаратного сбоя. Видимо, поэтому он не выполняет сброс периферии МК, что видится логичным перед её настройкой в пользовательском коде.

Я привёл Куб только как пример, но, скорей всего, многие используют такие же стартапы как в Кубе.

Например, в своём стартапе и настраиваю механизм, делающий возможным использование виртуальных методов в качестве обработчиков прерываний.

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


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

On 8/4/2022 at 7:13 AM, tonyk_av said:

программного или аппаратного сбоя

Такой сбой приведет к вызову обработчика HardFault, который по умолчанию "завешивает" МК намертво. А если вы туда воткнули рестарт, то это - ваша проблема, что вы не сделали его корректным. Лично я из стартапа выбросил сброс периферии - нет смысла на это такты тратить.

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


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

12 часов назад, Димон Безпарольный сказал:

Теперь чешу репу как уйти от этого кривого решения - задержка FOR мне не нравится

Можно, по-быстрому, сбацать проект чисто с использованием HAL-а. Только для работы с QUAD_SPI. Отладить его, а потом перевести на регистровую работу как тут изначально.

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


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

В 03.08.2022 в 22:23, Димон Безпарольный сказал:

Оптимизация О3 прошла нормально.

В том виде как у вас написано любой компилятор цикл for вырежет под ноль. 

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


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

8 часов назад, tonyk_av сказал:

Например, в своём стартапе и настраиваю механизм, делающий возможным использование виртуальных методов в качестве обработчиков прерываний.

this руками забиваете при входе в обработчик, либо?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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