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

PIC16F876A

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

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

  • Посещение

Репутация

0 Обычный

Информация о PIC16F876A

  • Звание
    Участник
    Участник
  1. Бредни. Кто хотят, те работают. Даже подвальные конторы - и те работают. Если не сказать, что в основном они и работают. Возможно, это просто Вы не умеете договариваться, хотя бы с тем же государством, не говоря уже о переговорах с другими конторами? Мне кажется, вы реально капризничаете. Люди есть. Разберитесь для начала со своими управленцами на местах - возможно, нытьё что нет людей им просто выгодно.
  2. objcopy для pic30/xc16

    Нашёлся способ проще - в дереве проекта, Loadables, тыкнуть правой кнопкой и выбрать добавить .hex файл. Единственное исключение - в этом файле и в проекте не должно быть пересекающихся областей, содержащих данные, иначе выдаётся сообщение "Data conflict at address 0x000003". Потому как, похоже, ни приоритетов, ни порядка загрузки эти файлы не имеют и конфликты не разрешаются, что в общем случае может не проканать, если часть кода - чужая. Марк, предложенный Вами метод - с "формированием" "своего" канала обмена - по сути преставляет собой расширение метода со светодиодами и осциллографим, - метод безусловно полезный и правильный, и я его частенько применяю - не важно, является ли таким каналом какой-нибудь Modbus@UART или шина PCI. Но утверждать, что этот метод единственный, не только преждевременно, но и не совсем правильно (вообще, обычно, в Вашем возрасте становится понятно, что любые критичные высказывания, как правило, преждевременны и не совсем правильны). Потому что, постулируя что это единственно возможный метод, Вы фактически утверждаете одно из двух: - Либо что ничто другое невозможно, - Либо что ничего больше мне не должно быть нужно. Обратите внимание, что ни о том, ни о другом, Вас вообще-то не спрашивают. А именно, я не спрашивал Вас о том, надо мне это или нет - данный вопрос я решу самостоятельно. Вас же Я спрашивал о том, как это сделать. Ну а по первому пункту - как видите, Вам уже привели 2 (два) альтернативных метода. Симулятор много чего не симулирует, и что? Ещё раз повторяю, нужен он мне или нет и зачем - это я решу позже. Ваша потребность критиковать понятна по другим постам - можете не продолжать. К тому же, помоему, настоящие отладчики занимают часть ресурсов в конце памяти, так что ничего особо смещать не придётся. Всех остальных, если кто видел искомую утилиту или знает, чем её заменить, попрошу поделиться. Заранее спасибо.
  3. objcopy для pic30/xc16

    Решение не очень системное, но для конкретного проекта пойдёт. В теле программы резервируется место под загрузчик: const unsigned int BootloaderBody[0x1800] __attribute__ ((space(prog),section(".BootloaderSect"),address(0x00000000))); Утилита objdump расскажет, где это место оказалось в .elf файле: "c:\Program Files\Microchip\MPLAB C30\bin\bin\pic30-elf-objdump.exe" -x 1.elf > 1.txt Пример вывода из 1.txt: .BootloaderSect 00003000 00000000 00000000 00000154 2**1 154 - это смещение. А дальше другой кастомный скрипт запишет на это место мясо загрузчика, главное результат сохранить в тот же .elf файл, чтобы его потом схавал симулятор. В таком духе исполнение даже доходит до main()) ЗЫ. симулятор чем не устроил? Настоящего отладчика пока нет, я здесь причём?
  4. objcopy для pic30/xc16

    Здравствуйте! Я работаю с несамостоятельным проектом на PIC24 (MPLAB X), требующем загрузчика, и хочу отлаживать его вместе с загрузчиком. Я умею изготавливать .hex файл, содержащий код приложения вместе с загрузчиком, прописав пользовательский скрипт, выполняемый после компиляции. Если теперь выбрать в меню "Launch Debugger Main Project", то отладчик нормально исполняет суммарный код и даже доходит до запуска приложения, но не отображает отладочной информации, т.к. она не содержится в .hex файле. Но если выбрать "Debug Main Project", то вместо изготовленного .hex файла отладчиком загружается .elf файл, содержащий отладочную информацию, но не содержащий кода загрузчика. Есть ли способ заставить отладчик загружать отладочную информацию из одного файла, а код из другого файла? Или есть ли способ добавить секцию в .elf файл или совсем заменить исполнимый код в нём ? Не существует утилиты objcopy ни для pic30, ни для xc16, есть ли её аналоги?
  5. SasaVitebsk, Если в рамках тематики обсуждения, то в фирменном проекте от ST было подозрительное отличие от Cube-generated проектов такое: ETH_DMADescTypeDef DMARxDscrTab[ETH_RXBUFNB] __attribute__((at(0x20001000)));/* Ethernet Rx MA Descriptor */ ETH_DMADescTypeDef DMATxDscrTab[ETH_TXBUFNB] __attribute__((at(0x20001100)));/* Ethernet Tx DMA Descriptor */ Видимо ST уже знакомы с проблемой и знают как её обойти, но начинающим пользователям CubeMX не говорят. Если же вам нужен именно проект веб-сервера, то оригинала у меня нет и повторно найти его в сети не удалось. Поэтому могу выложить только тот проект, в котором я уже поковырялся. Это на случай, если Вам не приятно ковыряться в чужих черновиках. Кроме того, у меня сейчас нет платы 746-Discovery, поэтому проверить не могу, а отдаю как есть. Но в последний раз всё было настроено и начинало ра6отать сходу. Проект создан под Keil (к примеру, под IAR он так и не заработал). Вы можете скачать его здесь (270 мегабайт): yadi.sk/d/YBe4MA1k3E254v Распакуете целиком, потом смотрите путь в архиве: Projects\STM32746G-Discovery\Applications\LwIP\LwIP_HTTP_Server_Netconn_RTOS\MDK-ARM\Project.uvprojx Выберите таргет "Flash" и перекомпилируете программу, потому что по умолчанию у меня настроена отладка в оперативной памяти. Хотя в ней тоже всё работает: программа загружается кнопкой (d), как в начале обычного сеанса отладки, и крутится до первого сброса.
  6. Genadi Zawidowski, спасибо за инфу; а можно уточнение? __DSB() вообще не поможет, или отдельно взятая? В Cortex M4 Programming Manual пишут, что она уместна после записи в эти самые DCCIMVAC. Это правда?
  7. Здравствуйте ещё раз. Был опыт применения LwIP-стека на отладочной плате STM32F746-Discovery. И вот что выяснилось. Если в настройках процессорного ядра включены кеши инструкций и данных, то LwIP-стек работает только при 0-м уровне оптимизации кода (-o0). Как только захочешь включить люьорй другой уровень оптимизации, он перестаёт ра6отать. Если же кеши выключены, то для работы стека требуется другое странное условие (выяснилось методом тыка путём сравнения Cube-generated проекта с другим рабтающим проектом демонстрационного веб-сервера от ST). Буферы DMA приёма-передачи Ethernet (там их аж 4 штуки) должны быть расположены в первых 64 килобайтах оперативной памяти, которая у этого контроллера помечена как какая-то особая TCM-память (Tightly-Coupled Memory). Если при расширении и усложнении проекта эти буферы уползают в другое место, то стек перестаёт работать. В википедии написано, что после завершения любой операции с DMA, перед тем как полученные данные потребуются в программе, нужно вставлять барьеры синхронизации. но я так полагаю, в LwIP-стеке их конечно же нет: STM32F746 - один из последних, самых мощных камней, некоторые особенности которого уже вкрывают границу применимости стека, не отлаженного под такие мощные процессоры. Ведь вполне могло оказаться и то, что из этой особой TCM-памяти кеши быстрее прогружаются. Итого, у меня на этом камне LwIP-стек переставал ра6отать сходу при сочетании каких-то странных условий. До тестов на производительность/устройчивость дело даже не дошло. Судя по форуму, у других эксперотов этот стек перестаёт ра6отать, как только дело доходит до этих тестов. Вопрос: есть ли другие, надёжные стеки? Или коммерческие организации в основном пишут свои?
  8. Здравствуйте. Проблема временно решена следующим образом. Заведён выход прерывания, и DP83848 настроена на выдачу прерывания по изменению статуса линка. Но само прерывание не подключено, вместо этого в одном из потоков несколько раз в секунду вызывается следующая штука: #define PHY_MISR 0x12 #define PHY_SR 0x10 #define PHY_LINK_STATUS 0x0001 // Poll PHY Interrupt Output if (0==HAL_GPIO_ReadPin(Выход прерывания)) { uint32_t regvalue=0; HAL_ETH_ReadPHYRegister(&heth, PHY_MISR, &regvalue); // Clears PHY intterrupt output HAL_ETH_ReadPHYRegister(&heth, PHY_SR, &regvalue); // Get Link Status bool linkup=!!(regvalue & PHY_LINK_STATUS); if (linkup) { netif_set_link_up(&gnetif); } else { netif_set_link_down(&gnetif); }; // linkup if (netif_is_link_up(&gnetif)) { netif_set_up(&gnetif); } else { netif_set_down(&gnetif); }; // netif_is_link_up ethernetif_update_config(&gnetif); }; Всё ли здесь на вашэкспертный взгляд правильно и существуют ли другие решения ? И второй момент. Судя по форуму, у многихэкспертов в подобных реализациях Ethernet часто и беспричинно подыхает. У меня, например, начал подыхать как только дело дошло до тестов на производительность. Вопрос: все эти стеки вообще отлажены? Или единственный выход - писать свои? В частности, мой механизм подыхания изображён на картинке.
  9. Обычно в таких связках максимальная длина IP пакета по умолчанию 570 с чем то байт. Вы ничего не меняли в этих настройках ?
  10. Здравствуйте! Курю примеры реализаций lwIP под FreeRTOS от STM32 и CubeMX. Но во всех примерах общая проблема: если Ethernet кабель изначально отключен на запуске системы, то после его подключения всё равно ничего не работает. Вопрос. Допустим, прерывание об изменении физики получено; а что собственно в нём делать? Как уведомить стек об изменении статуса связи. чтобы он перезапустил процедуру назначения IP-адреса от DHCP, и что там ещё надо. Вот это с первого раза ни к чему не привело, что-то не так делаю или надо что-то ещё? if (netif_is_link_up(&gnetif)) { /* When the netif is fully configured this function must be called */ netif_set_up(&gnetif); } else { /* When the netif link is down this function must be called */ netif_set_down(&gnetif); }
  11. Здравствуйте! Что нужно доустановить в Keil или IAR, чтобы можно было под отладкой смотреть потоки FreeRTOS ?
  12. Всё так. Глючат только модемы. Хабы USB 1.1 уже не сохранились, не достанешь. Порты 1.1 тоже не в моде. Говорят, на некоторых биосах можно выставить режим USB 1.1, но не у всех такие биосы. Поэтому нужен чисто программный способ.
  13. Вопрос к знатокам, может кто знает? Не по теме, но на всякий случай. Не люблю я новые темы создавать Как под Windows скоростное устройство USB 2.0 заставить работать на медленной скорости как по USB 1.1 ? Только, пожалуйста, не нужно доказывать, что мне это не надо. Ещё как надо, и надо всем: половина 3G модемов глючат из-за скоростного USB, а когда втыкаешь в медленный USB, работают нормально. Заранее спасибо!
  14. Дико извеняюсь что лезу в тему. С плисинами не знаком, да и доки по 24C512 последний раз читал лет 5 назад. Но помоему там предельная частота SCK 100 килогерц, в лучщем случае 400, а если особо повезёт, то мегагерц. Но никак не десять o_O
×
×
  • Создать...