

Димон Безпарольный
Участник-
Posts
760 -
Joined
-
Last visited
-
Галка стоит - эффекта нет. В других проектах галка стоит - эффект есть. Похоже что глюк. Разобрался. Снес напрочь файлы .uvguix, .uvoptx. И заработало. Некоторые сгенерировались заново. Спасибо за подсказку!
-
Я про этот красный крест: В одном проекте он есть, в другом никак не могу найти где включать. Закипел. Подскажите пожалуйста.
-
Так и сделал. Проблема ушла. 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 мне не нравится.
-
Забыл написать, да. STM32L471. Сейчас в шапку кину. Добавил. //QUAD_SPI_WaitBusy(); //Полим флаг Busy регистра QUADSPI->SR uint8_t Data = DR_Read; // QUAD_SPI_Disable; // Но с ожиданием вообще чехарда какая - то. Не читается и не пишется - пока некогда разбираться. Поясните где у меня не пойми что - я перепишу.
-
Это немного другое. Ключевое здесь QUAD_SPI. Т.е. это ожидание готовности интерфейса и к микросхеме не имеет отношения. uint32_t QUAD_SPI_WaitBusy(void) //Функция полит флаг Busy регистра QUADSPI->SR { // unsigned long timerStart = HAL_GetTick(); // while (QUADSPI->SR & QUADSPI_SR_BUSY) //QUADSPI_SR_BUSY имеет иную полярность чем { //все остальные if ((HAL_GetTick() - timerStart) > 10) //Таймаут в милисекундах { // return 1; // } // }; // return 0; // } // До этого еще не дошел. Вечером посмотрю ассемблерный код. А это не volatile: #define DR_Read *(__IO uint8_t *) & QUADSPI->DR ? __IO и есть volatile.
-
#define QUAD_SPI_Disable QUADSPI->CR &= ~(QUADSPI_CR_EN) #define QUAD_SPI_Enable QUADSPI->CR |= (QUADSPI_CR_EN) #define DR_Read *(__IO uint8_t *) & QUADSPI->DR Используется Status-flag polling mode. Делал и так: QUAD_SPI_WaitBusy(); //Полим флаг Busy регистра QUADSPI->SR uint8_t Data = DR_Read; Разницы нет. Оптимизацию также эта функция не проходит.
-
Какую функцию? На момент написания темы не было известно вообще что происходит. Собственно вся тема - от безысходности была написана. Оптимизация нужна была чтобы ужать код - он не должен быть больше чем 0x4800. Это бутлоадер. Знал бы что здесь такие плаваю - не стал бы писать вообще. Это каким надо быть чтобы глумится и требовать к себе уважения. Вот такими глупостями я уже давно не занимаюсь.
-
Жаль таких забанить в теме не могу. Толку никакого только срач один. Проблему локализовал до одной функции. Как тут намекают местные "знатоки" эта функция написана криво. Именно ее нельзя оптимизировать. Пока все что могу сказать. Нашел разбивая сишный файл на 2. Один с оптимизацией O3, другой О0. Перекидывая функции нашел. Не говори куда мне идти и я не скажу тебе что тебе делать.
-
Разумеется, ничего не делать и критиковать проще всего. Я смотрю форум изрядно выродился раз тут такие "свои". Сюда приходят за советом, а получают высокомерный глум. Зачем? Тебя что все так сильно обижают что ты над другими глумишься? Описывать как я локализовал не буду - я смотрю тут критиканов полно. Для меня главное результат и он достигнут. Эти проблемы сначала надо выявить чтобы понять как не надо делать. Чем я и занялся. А ты видимо сразу умным родился или не понимаешь как приобретаются навыки? Да можешь не отвечать, все одно от тебя толку нет.
-
Видимо мало практики. Локализовал до файла, потом до функции.
-
Не знал что здесь все тоже самое что и на политических форумах. Интересно, зачем человек тратил самое драгоценное что у него есть и писало ЭТО. Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации.
-
Любая оптимизация (О1-О3) делает проект глючным. Есть какой - нибудь подход чтобы выявить эти глюки? Может кто посоветует как применять Volatile?
-
Нужно допилить код терминальной программы. Программа работает с COM поротом. Передача комманд отлажена, а вывод на терминал работает плохо. Примерно вот так: Символы перескакивают, невпопад вставляются переносы строки. Прием из COM порта - это просто терминал. Нужно принять и правильно вывести в текстовое окно. Код приема - отдельная триада уже написан. Результат работы - выше. Нужно разобраться и подправить чтобы вывод осуществлялся правильно и без задержек (когда работают другие функции, вывод замораживается). Бюджет обсуждается. Пытался сделать сам, но я не програмист под Windows. Обсуждение проблемы и советы здесь: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=166521&do=findComment&comment=1811071 Добавлю что описанная выше проблема - это проблема именно софта под Win. В терминале 1.9 все исправно и правильно выводится. Код написан под DEV C++.
-
STM32L476 Keil размещение массива по определенному адресу
Димон Безпарольный replied to Димон Безпарольный's topic in Keil
Отвечаю сам себе char URLTCP[128] __attribute__ ((at(0x10000200), zero_init)); LR_IROM1 0x08000000 0x00100000 ; load region size_region { ER_IROM1 0x08000000 0x00100000 ; load address = execution address { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00018000 ; RW data { .ANY (+RW +ZI) } RW_IRAM2 0x10000000 UNINIT 0x0000200 ;no init section. { } RW_IRAM3 0x10000200 UNINIT 0x0000200 ;no init section. { *(.ARM.__AT_0x10000200) } RW_IRAM4 0x10000400 0x00008000 - 0x400 { .ANY (+RW +ZI) } } -
STM32L476 Keil размещение массива по определенному адресу
Димон Безпарольный posted a topic in Keil
Есть бутлоадер и есть прошивка. Как передать прошивке текстовую строку? Т.е. массив. Секцию .noinit я в скаттере сделал в обоих проектах. Как поместить массив в эту секцию чтобы он начинался с конкретного адреса? LR_IROM1 0x08000000 0x00100000 ; load region size_region { ER_IROM1 0x08000000 0x00100000 ; load address = execution address { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00018000 ; RW data { .ANY (+RW +ZI) } RW_IRAM2 0x10000000 UNINIT 0x0000200 ;no init section. { *(.noinit ) } RW_IRAM3 0x10000200 UNINIT 0x0000200 ;no init section. { URLTCP(.noinit ) main.o (+RW +ZI) } RW_IRAM4 0x10000400 0x00008000 - 0x400 { .ANY (+RW +ZI) } } Я прописал main.o (+RW +ZI). Но тогда в этой секции присутствуют все переменные. А мне надо чтобы был только массив. char URLTCP[128] __attribute__ ((section ("(URLTCP) .noinit"),zero_init)); Map файл: