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

Димон Безпарольный

Участник
  • Постов

    764
  • Зарегистрирован

  • Посещение

Весь контент Димон Безпарольный


  1. Создал правило для длин группы из 4 дифф. пар. Максимальная длина как видно - 25см. Когда выравниваю, движок показывает требование выровнять до 21см. Как такое возможно? Это глюк? И так во всех 4 группах, но требование к длинам разные.
  2. HEF4070 продам 90 штук. 8р штука. 700руб всего.
  3. МС78L09 180шт продам. По 3р штука всего 500р
  4. Микросхемы NE556 830 штук. 3 рубля штука. 2400руб всего.
  5. Галка стоит - эффекта нет. В других проектах галка стоит - эффект есть. Похоже что глюк. Разобрался. Снес напрочь файлы .uvguix, .uvoptx. И заработало. Некоторые сгенерировались заново. Спасибо за подсказку!
  6. Я про этот красный крест: В одном проекте он есть, в другом никак не могу найти где включать. Закипел. Подскажите пожалуйста.
  7. Так и сделал. Проблема ушла. 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 мне не нравится.
  8. Забыл написать, да. STM32L471. Сейчас в шапку кину. Добавил. //QUAD_SPI_WaitBusy(); //Полим флаг Busy регистра QUADSPI->SR uint8_t Data = DR_Read; // QUAD_SPI_Disable; // Но с ожиданием вообще чехарда какая - то. Не читается и не пишется - пока некогда разбираться. Поясните где у меня не пойми что - я перепишу.
  9. Это немного другое. Ключевое здесь 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.
  10. #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; Разницы нет. Оптимизацию также эта функция не проходит.
  11. Какую функцию? На момент написания темы не было известно вообще что происходит. Собственно вся тема - от безысходности была написана. Оптимизация нужна была чтобы ужать код - он не должен быть больше чем 0x4800. Это бутлоадер. Знал бы что здесь такие плаваю - не стал бы писать вообще. Это каким надо быть чтобы глумится и требовать к себе уважения. Вот такими глупостями я уже давно не занимаюсь.
  12. Жаль таких забанить в теме не могу. Толку никакого только срач один. Проблему локализовал до одной функции. Как тут намекают местные "знатоки" эта функция написана криво. Именно ее нельзя оптимизировать. Пока все что могу сказать. Нашел разбивая сишный файл на 2. Один с оптимизацией O3, другой О0. Перекидывая функции нашел. Не говори куда мне идти и я не скажу тебе что тебе делать.
  13. Разумеется, ничего не делать и критиковать проще всего. Я смотрю форум изрядно выродился раз тут такие "свои". Сюда приходят за советом, а получают высокомерный глум. Зачем? Тебя что все так сильно обижают что ты над другими глумишься? Описывать как я локализовал не буду - я смотрю тут критиканов полно. Для меня главное результат и он достигнут. Эти проблемы сначала надо выявить чтобы понять как не надо делать. Чем я и занялся. А ты видимо сразу умным родился или не понимаешь как приобретаются навыки? Да можешь не отвечать, все одно от тебя толку нет.
  14. Не знал что здесь все тоже самое что и на политических форумах. Интересно, зачем человек тратил самое драгоценное что у него есть и писало ЭТО. Пока локализовал глюк до двух файлов проекта используя индивидуальные настройки оптимизации.
  15. Любая оптимизация (О1-О3) делает проект глючным. Есть какой - нибудь подход чтобы выявить эти глюки? Может кто посоветует как применять Volatile?
  16. Нужно допилить код терминальной программы. Программа работает с 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++.
  17. Отвечаю сам себе 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) } }
  18. Есть бутлоадер и есть прошивка. Как передать прошивке текстовую строку? Т.е. массив. Секцию .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 файл:
  19. Position independence is not supported in microlib. Упс... А как тогда быть?
  20. Как - то надо изменить скаттер файл, но не пойму как. Почему линкер не хочет разместить PDT таблицу в RW_IRAM1 тоже непонятно.
  21. Также ругается на скаттер файл: Каким образом надо поменять скаттер чтобы таблица PDT разместилась первой? ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08004800 0x00100000 { ; load region size_region ER_IROM1 0x08004800 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 0x0000400 { ;no init section. Эта область памяти закрыта аппаратной защитой *(.noinit )} RW_IRAM3 0x10000400 0x00008000 - 0x400 { .ANY (+RW +ZI) } }
  22. Включил опцию ReadOnly Position Independed. Получаю 700 варнингов: Нарыл только то, что статические переменные должны инициализироваться до динамических. https://fullstackuser.com/questions/529011/initialisation-of-static-variable-with-itself
  23. Так вроде выше привел скаттер - там адреса явно указаны. Имеется ввиду секция RW_IRAM2
×
×
  • Создать...