От оно и понятно. Надо вставлять ровно. А то не туда попасть можно.
Видимо попал в просак )))
Эта кнопка/иконка в левом верхнем углу окна ввода сообщения воду мутит похоже, после обновления движка форума.
Я сразу «отключил» (ну переключил на привычное).
Эту мыслю и проверял + ``` в разных вариантах
С компа.
Итак отчитываюсь:
достаточно локальной переменной прописать static - проблема исчезает, чего то я не понимаю
.
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 перемещает данные переменной в другую область. Может быть с этим связано?
смысл гадать на кофейной гуще если есть отладчик, поставить точку отладки и вуаля, где, кто, что
А что твм с настройками оптимизации? ![]()
Оптимизацию volatile отключил бы, но он вроде бы пробовал и не помогало…
Да вообще хочется узнать в чем выражается “не работает”, нули выводит или что?
Перечитал, вроде бы volatile автор не применял. Интересно, как поменяется поведение (и поменяется ли вообще)?
И что я там должен увидеть?
Ещё раз: я регистр quad spi делаю enable, интерфейс запускается, считывает данные с флэш памяти (они там есть!), лог анализатором я вижу эти данные, они идут.
Если я в коде перед или после чтения данных объявляю тупо любую переменную - в лог анализаторе вижу мусор, точнее FF первые кучу байт.
Ну что я должен увидит отладчиком?![]()
Нолики и единички на интерфейсных пинах ![]()
Не помогло.
И оптимизация отключена.
Логично. Значит что-то с памятью.