Jump to content

    

miheyk

Свой
  • Content Count

    162
  • Joined

  • Last visited

Everything posted by miheyk


  1. Не думали, что возможно эта файловая система тупо надёжнее в сравнении с FatFS? ТС спасибо за обратную связь!
  2. Увы, но надежность и размер буфера в ОЗУ противоречат друг друга. Любой журнал, любая таблица перемещений, будь то борьба с бэдблоками или неравномерным износом флеши требуют громадных затрат по ОЗУ. Пример - файловая система от Segger потребляет ~50 КБ для флеша в 64 МБ и тоже через malloc.
  3. Некорректно написал название - µC/OS. Не понял про свой, ну да ладно)
  4. За деньги можно вообще ничего не делать, только плати. Ту же uOS со стеком ФС пилят и продают все, кому не лень
  5. Не все так плохо, без линукса, но на фриртос ) Хотя эта FS заточена прежде всего под NAND, с NOR таких проблем нет. Вот тут, как и советовали ранее, как раз описано преимущество LittleFS на случай сбойного питания. SD и eMMC это уже другой уровень развития, и, используя их, можно как минимум решить проблему борьбы с BB. В общем, повышение надежности напрямую связано с качеством этих карт. Про безбажные ПЛК порадовали
  6. LPC1788 и EMC

    Цитата(jcxz @ Dec 8 2016, 18:37) Ошибаетесь. Хоть маленький, но всё же есть. +1 Цитата9.5.4 Data buffers The AHB interface reads and writes via buffers to improve memory bandwidth and reduce transaction latency. The EMC contains four 16-word buffers. The buffers can be used as read buffers, write buffers, or a combination of both. The buffers are allocated automatically. The buffers must be disabled during SDRAM initialization. The buffers must be enabled during normal operation. The buffers can be enabled or disabled for static memory using the EMCStaticConfig Registers. Попробуйте забить этот буфер, данные должны обновиться.
  7. Всем добра, уважаемые коллеги. Понадобилось обновить исходники проекта и сформировать hex-файл, дабы обновить прошивку на работающих девайсах силами зашитого в них бутлоадера. Подключаю в проекте доставшийся по наследству скрипт линкера APP24FJ64GA004IVTremap.gld, собираю hex. Подключаюсь через PIC24F Quick Programmer к камню, стираю, заливаю прошивку и на этапе верификации получаю это: КодVerify Error at 0x4 should be: 0xC02 but read: 0x2A8 Verify Error at 0x6 should be: 0xC06 but read: 0x2A8 Verify Error at 0x8 should be: 0xC0A but read: 0x2A8 Verify Error at 0xA should be: 0xC0E but read: 0x2A8 Verify Error at 0xC should be: 0xC12 but read: 0x2A8 Verify Error at 0xE should be: 0xC16 but read: 0x2A8 Verify Error at 0x10 should be: 0xC1A but read: 0x2A8 Verify Error at 0x12 should be: 0xC1E but read: 0x2A8 Verify Error at 0x14 should be: 0xC22 but read: 0x2A8 Verify Error at 0x16 should be: 0xC26 but read: 0x2A8 Verify Error at 0x18 should be: 0xC2A but read: 0x2A8 и т.д. Замена скриптов на родные из примера AN1157 картины не меняет. При этом имею hex-файл предыдущей прошивки, который успешно заливается загрузчиком. Вопрос: может есть какая-то хитрость в приготовлении прошивки для загрузчика? PS Исходники бутлоадера основаны на официальном загрузчике. Среда MPLAB X v3.40. Компилятор XC16. Камень PIC24FG64GA004.
  8. Спасибо, Владимир. Порадовали. Для схем давно форматки используем, а вот для плат по старинке >DXP>AutoCAD. Где-нибудь писали об этом?
  9. ЦитатаВиды снизу, сверху, выноски зон в масштабе уже и сейчас можно в алтиуме Таки с форматками?
  10. Power port по ГОСТ действительно давно появился, а форматки можно оформить прямо на листе в виде шаблонов (SchDot), включая титульную, там же сетку в 5 мм. задать. Сборочный оформлять увы, только через конструкторские CAD.
  11. Косяк у Кейла

    В защиту GCC - по умолчанию он молчалив, но Wall/Wextra никто не отменял. В защиту K&R - если кому-то что-то не нравится, то это ваше дело, но правила есть правила, и библия K&R в первую очередь явилась фундаментом для стандарта ANSI C (C89). С тех пор многое поменялось в лице сахара, новых типов, макросов и т.д., но никак не фундаментальные вещи. Например, найдите отличия между главой 3.5 Циклы for и while и 6.8.5.3 The for statement C11 или между А 6.5. Арифметические преобразования и 6.3.1 Arithmetic operands С11. Пример про преобразование типов, что я приводил ранее, все же из ранних трудов и сейчас неактуален, т.к. в новом издании K&R ANSI преобразование звучит иначе (см. ссылку выше) По поводу горячего спора for(;;){} vs while(1){} все точки над и уже расставлены, но for(;;) лег в основу FreeRTOS и ядра Linux.
  12. Как открыть драйвер из модуля

    Теперь понятнее, но всё же зачем /dev/ttyUSB0? ЦитатаЦель модуля: изолировать формирование и парсинг пакетов от проги юзера. Модуль ядра Это не цель модуля, а демона, и не нужно это смешивать.
  13. Для первой проблемы увеличьте буфер, чтобы он не переполнялся, но и не опустошался. Для второй проблемы постройте буферизацию, например, через кольцевой буфер. Это уже вопрос алгоритма. И не поленитесь прикрутить DMA к буферу.
  14. Как открыть драйвер из модуля

    Вопрос, зачем из модуля открывать /dev/ttyUSB0? 1 модуль - 1 задача. А для вывода/ввода есть потоки и ядро само решает в какую консоль это должно идти.
  15. Косяк у Кейла

    Сам по себе цикл с единичной итерацией да, бесмыслица. Но GCC молча делает дело. Про обрамление в ду вайл могу сказать на примере ядра linux - там почти все макросы с переносом строки, но в цикле - единицы, а вот инлайнов вагон. Пожалуй, ду вайл актуален лишь при включении в макрос ветвлений.
  16. Цитатаво вторых там калькалятор так себе Спасибо, Владимир. Замечал, что расчетная ширина в Altium разнится с таковой из других программ. Зря значит пользовался этой фичей
  17. Eclipcse - IAR plugin

    Цитатаэто не для IAR + eclipse Нет, это порт GCC для MSP. Про отладку из IAR не подскажу, т.к. пользовал MSPGCC с отладкой через mspdebug в режиме gdb.
  18. ЦитатаНо проблема с прерывающимся звуком осталась.В ARM чем больше число приоритета, тем ниже приоритет, выходит воспроизведение у вас выполняется в первую очередь, а уже потом USB-чтение. А если USB не может считать, то и играть нечего. Во-вторых, USB очень капризная вещь в плане таймингов, поэтому лучше ему поставить 0 и принять это отправной точкой для алгоритма программы.
  19. #define

    Препроцессор может считать только предопределенные значения, т.к. выполняется он до прохода компилятором, и понятия не имеет, какие входные данные ему могут быть поданы. Посему применять препроцессор есть смысл для регулярных выражений, либо для явного наименования численного значения для упрощения восприятия кода, уменьшения ошибок и облегчения сопровождения.
  20. Косяк у Кейла

    ЦитатаСначала любые операнды типа CHAR или SHORT преобразуются в INT, а любые операнды типа FLOAT преобразуются в DOUBLE. Затем, если какой-либо операнд имеет тип DOUBLE, то другой преобразуется к типу DOUBLE, и это будет типом результата. В противном случае, если какой-либо операнд имеет тип LONG, то другой операнд преобразуется к типу LONG, и это и будет типом результата. В противном случае, если какой-либо операнд имеет тип UNSIGNED, то другой операнд преобразуется к типу UNSIGNED, и это будет типом результата. В противном случае оба операнда будут иметь тип INT, и это будет типом результата. Керниган, Ричи. Язык C, гл. 14.6. Арифметические преобразования Учиться никогда не поздно
  21. #define

    Все правильно вы сделали, LL для long long, и эта возможность определяется стандартом, а не компилятором. Базовый тип целочисленного представления числа без модификатора равен битности платформы, т. ё. по умолчанию int. Ссылка
  22. Добавлю, что при включенной оптимизации если пишете в прерывании в глобальную переменную, всегда делайте ее volatile. Иначе компилятор просто не понимает, кто изменяет ее значение, и может, например, выпилить даже цикл, как бесполезный.
  23. Цитатаодин из вариантов прошлого века htonl(), htons(), ntohl(), ntohs() нас всех переживет :-)
  24. Проблема с прерыванием

    Кодvoid SisTick_Handler(void) это что такое. Если хотите свое имя функции-обработчика прерываний, то будьте добры их поправить в startup файле. Похоже проблема с самим проектом. CMSIS добавили?