STM32CubeIDE (вопросы и ответы)

От оно и понятно. Надо вставлять ровно. А то не туда попасть можно.
Видимо попал в просак )))

Эта кнопка/иконка в левом верхнем углу окна ввода сообщения воду мутит похоже, после обновления движка форума.

Я сразу «отключил» (ну переключил на привычное).

Эту мыслю и проверял + ``` в разных вариантах :slightly_smiling_face: С компа.

Итак отчитываюсь:

достаточно локальной переменной прописать static - проблема исчезает, чего то я не понимаю :thinking: .

	constexpr unsigned int testSector = qw25countAllSectors - 1237;
	unsigned char tempBuf[qw25sectorSize];
	for(unsigned int i = 0; i < qw25sectorSize; ++i) tempBuf[i] = i;
	unsigned long * bD = (unsigned long *)&tempBuf[0];
	printf("bD %08X\r\n", (unsigned int)(*(bD+687)));
	w25QSPIwriteSector(testSector, (unsigned char *)&tempBuf[0]);
	for(unsigned int i = 0; i < qw25sectorSize; ++i) tempBuf[i] = 0x00;
	w25QSPIreadSector(testSector, (unsigned char *)&tempBuf[0]);
	printf("In %08X\r\n", (unsigned int)(*bD));
	printf("2n %08X\r\n", (unsigned int)(*(bD+1)));
	printf("3n %08X\r\n", (unsigned int)(*(bD+687)));
	printf("4n %08X\r\n", (unsigned int)(*(bD+3)));
	for(static unsigned int j = 0; j < qw25sectorSize; ++j) {
		if (tempBuf[j] != (unsigned char)(j & 0x000000FF)) {
			printf("W25QSPI err\r\n");
			break;
		}
	}

А стека-то хватит? Размер сектора там 4кб, емнип.

увеличь размер стека раза в два. Или вынеси свой буфер наружу и сделай его статическим. Размер сектора у тебя все равно фиксирован, так и сделай эту переменную глобальной. Хотя бы для теста.

попробую, спасибо.

Но вряд ли, на F411 аналогично тестирование написано для такого же чипа памяти W25Q64

и размер стека такой же небольшой

_Min_Stack_Size = 0x400; /* required amount of stack */

А разве static изменяет размер буфера? Или я опять что-то пропустил?

Без static не работает.

Ну… static перемещает данные переменной в другую область. Может быть с этим связано?

смысл гадать на кофейной гуще если есть отладчик, поставить точку отладки и вуаля, где, кто, что

2 лайка

А что твм с настройками оптимизации? :thinking:

Оптимизацию volatile отключил бы, но он вроде бы пробовал и не помогало…

Да вообще хочется узнать в чем выражается “не работает”, нули выводит или что?

Перечитал, вроде бы volatile автор не применял. Интересно, как поменяется поведение (и поменяется ли вообще)?

И что я там должен увидеть?

Ещё раз: я регистр quad spi делаю enable, интерфейс запускается, считывает данные с флэш памяти (они там есть!), лог анализатором я вижу эти данные, они идут.

Если я в коде перед или после чтения данных объявляю тупо любую переменную - в лог анализаторе вижу мусор, точнее FF первые кучу байт.

Ну что я должен увидит отладчиком?:man_facepalming:

Нолики и единички на интерфейсных пинах :grinning_face:

Не помогло.

И оптимизация отключена.

Логично. Значит что-то с памятью.