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

Сергей Борщ

Модератор
  • Постов

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

  • Посещение

  • Победитель дней

    28

Весь контент Сергей Борщ


  1. А я не часто. За всю жизнь (а использую ИАР с 98 года) - 2 или 3 глюка именно ИАРа. И продолжаю спорить на ящик пива, что это глюки НЕ ИАРа. В sdcc наловил глюков 5 или 6 за один проект, но он еще довольно молодой и, увы, единственный свободный компилятор С для PIC/PIC18.
  2. Мы все надеемся, что REQUIRED_LEFT объявлена как глобальная переменная, или как локальная с квалификатором volatile, или что REQUIRED_LEFT используется в выражении, являющимся параметром какой-либо (не-инлайн) функции, или что REQUIRED_LEFT в дальнейшем используется в выражении, результатом которого является обновление какой-нибудь глобальной или volatile переменной. В противном случае оптимизатор выкидывает это чтение, ибо его результат не нужен и это чтение есть просто ненужная трата времени.
  3. Функция объявлена по умолчанию. Т.е. перед использованием функции она не была объявлена. Либо не включен заголовочный файл, в котором она объявлена, либо вы ошиблись в написании ее имени.
  4. У вас где-то в проект включен (#include) файл iom8.h, а в опциях оболочки выбран какой-то другой процессор. В IAR хорошо реализована возможность автоматического включения нужного файла описания sfr - для этого вместо iomXXX.h достаточно включать ioavr.h, а уже в нем автоматически включится нужный iomXXX.h или ioATtinyXXX.h
  5. Что-то я сомневаюсь, что в комплекте с mspgcc идет make имени Борланда. Похоже, у вас где-то стоит какой-то пакет от Борланда, он прописан в path первым и по умолчанию вызывается его make. А этот make сильно несовместим с make из GNU binutils. Что вы и наблюдаете.
  6. В конце концов выяснится, что какие-то из ног питания или земли оставлены в воздухе или на какие-то из входов до включения питания подается напряжение без ограничения тока и возникает тиристорный эффект.
  7. Примерно так (нашел в очень старом исходнике):.h: typedef struct { unsigned char Freq; unsigned Time; } NoteType; extern void beep(NoteType *); extern NoteType PowerOnBeep[]; extern NoteType PowerOffBeep[]; extern NoteType LegalKeyBeep[]; extern NoteType IllegalKeyBeep[]; .c: NoteType const PowerOnBeep[]= { {Hz(2000),100 ms}, {Hz(1000),100 ms}, {Hz(500),100 ms}, {Hz(200),200 ms}, {0,0} }; NoteType const PowerOffBeep[]= { {Hz(100),200 ms}, {Hz(500),100 ms}, {0,0} }; NoteType const LegalKeyBeep[]={{Hz(1000),100 ms},{0,0}}; NoteType const IllegalKeyBeep[]={{Hz(200),100 ms},{0,0}};
  8. __flash

    Без static можно объявлять во флеше только глобальные переменные. Внутри функции переменные, размещенные во флеш должны быть объявлены с static, чтобы запретить компилятору создавать эту переменную при каждом входе в функцию, поскольку он этого сделать не может физически (о чем и ругается Be009).
  9. Код практически один-в-один как у меня, только непонятно, зачем led_is_on, ведь можно считывать if(signal(LED_PIN)). Еще у меня состояния перечислены в порядке их приоритетов, первое состояние IDLE (не горим): enum tLEDState { LED_IDLE, LED_GPS_OFF, LED_GPS_NOT_VALID, LED_GPS_VALID }; typedef struct { tFastTime OnTime; tFastTime Period; } tLEDBlink; #define sec *(OSC/65536) __flash tLEDBlink const LEDBlink[] = { {0,0}, {0.15 sec, 10 sec}, {1.35 sec, 1.5 sec}, {0.15 sec, 1.5 sec}, }; После откончания цикла состояние возвращается в IDLE и функция blink(), через которую прописывается новое состояние, проверяет - если новое состояние более приоритетно, чем текущее - оно принимается и процесс перезапускается. Если менее - игнорируется. В программе blink() вызывается на каждом проходе основного цикла (можно в нескольких разных местах).
  10. Почему? Достаточно написать в исключении SWI чтение номера SWI из вызвавшей исключение инструкции, переключение в user(system) mode и ветвление по номеру swi на соответствующие библиотечные функции.
  11. Обратите внимание на эти две строчки. В какой-то из них у вас точно ошибка.
  12. А толку? К моменту исполнения первой команды С - функции-обработчика прерывания уже будут разрешены. P.S. Ой... Сам залез в документацию и обнаружил, что SIGNAL() и ISR() в последних версиях - одно и то же, но пользование SIGNAL() не рекомендуется - она будет исключена в следующих версиях. Что-то в память запало из предыдущих версий. Автору - проверьте, как объявлен SIGNAL() в заголовочном файле - attribute((interrupt)) или attribute((signal)). Если interrupt - обязательно замените в своей программе SIGNAL() на ISR().
  13. Достаточно его не инициализировать при объявлении. Неинициализированные глобальные переменные обнуляются перед вызовом main(). Зачем вы его объявили как int? Достаточно char - код будет короче. Судя по исходному коду, вы используете WinAVR. Какую версию? В последних надо вместо SIGNAL() использовать ISR(). SIGNAL() при входе в обработчик разрешает прерывания, а поскольку вы не вычитали UDR, то снова вызывается прерывание и вы снова заходите в обработчик. И так пока стек не закончится.
  14. Какой упор? Режет фреза, двигает ее ЧПУ. Дополнительная операция - дополнительные деньги. А то так можно договориться, что и маску не сделают - чего в нее упираться? По своему опыту: ограничение обычно - на минимальный диаметр фрезы в зависимости от толщины материала платы, т.е. на скругленность во внутренних углах. Еще может быть полезно указать, где осталять недорезанные участки, чтобы платы из заготовки не вываливались. Т.е. его (скорее всего) все равно оставят, но возможно вам виднее, где такой дефект кромки будет вам меньше всего мешать.
  15. Тогда пользуйтесь он-лайн переводчиками, купите пакет PROMPT или обычный бумажный словарь. Сомневаюсь, что тут у кого-то есть желание сделать для вас перевод или вольный пересказ (чреватый ошибками) хелпа. И надежд на то, что следующая версия будет комплектоваться русскоязычной документацией тоже нет. Так что придется либо изучить необходимый минимум технического английского, либо отказаться от использования зарубежной элементной базы. Да все там же:
  16. ААААА!!!!! Только надо обязательно к этому добавить, что после программирования этого фуза процессор перестанет программироваться через SCLK, MOSI, MISO, распрограммировать его можно будет только параллельным высоковольтным программатором вроде STK500, иначе следующий вопрос будет "А чем теперь оживить кристалл?".
  17. Вот это смущает. Поставьте точку останова на вектор сброса и посмотрите - происходит ли повторный сброс собаки. Если да - то как раз ваш случай, но непонятно - что же может ИАР в стартапе вашей программе из нескольких строчек делать столько времени? Ведь если нет глобальных переменных, то обнулять и копировать нечего, а больше там ничего и не делается.
  18. Сдвиговые регистры или спец. драйвера. Посмотрите вот эту тему, при таком количестве знакомест уже лучше использовать посегментную, а не поразрядную развертку.
  19. Попробуйте кликнуть на любой атрибут удерживая клавишу shift - приятно удивитесь. Развивая мысль seltec: В комплекте пкада идет утилита RefDesud.exe, которая копирует содержимое атрибута RefDes в RefDes2. Можно написать утилитку, которая будет в сохраненном в ASСII-формате файле заменять в содержимом RefDes2 двоеточие на точку. А разве ГОСТ 2.004 не позволяет использовать двоеточие?
  20. Мне почему-то кажется, что это 5G DKI, значит транзистор - BC808.
  21. Тогда вернитесь к истокам. Создайте новый проект, напишите в нем моргалку светодиодом из четырех команд и вылизывая железо добейтесь ее устойчивой работы. Если даже такая простая программа работать не будет - надо менять или железо или профессию. Вы питание и землю на все ножки питания/земли процессора подали или только на одну пару? Потом постепенно добавите кусочки из своего нынешнего проекта. Проверять команды перехода - полная фигня. Что вы будете делать, если тест покажет ошибку? Будете крутиться в замкнутом цикле? Но какой командой вы цикл организуете, ведь переходы-то не работают! Запрещать переходить в main тоже не нужно - если переходы не работают, вы туда просто не попадете по XCALL main, ведь переходы-то не работают. Менять cstartup для выполнения кода перед main не нужно - почитайте про функцию __low_level_init() в IAR и секции .initX в avr-gcc.
  22. MSP430-USB

    Да. Но кроме хоста для поддержки файловой системы нужно какое-то количество ОЗУ и код.
  23. С теми, которые изменяются неизвестными компилятору способами. Он видит, что перед циклом вы ac обнулили, а в цикле не изменяете - он и считает, что она осталась равной нулю и значит ваши условия не сработают. Так зачем их проверять?
  24. Не предвидется, но по другой причине - я с ARM9 не работаю и в обозримом будущем не собираюсь (нет соответствующих задач). Изучать его специально, чтобы написать порт, которым не буду пользоваться сам - не вижу смысла. Если кто-то с ними работает и желает сделать (или уже сделал) порт - добро пожаловать. Помощь и консультации через ICQ или мылом гарантирую. В репозитории лежит рабочий порт имени ReAlа под GCC для AVR и кое-какие наброски порта под GCC для ARM7 (пока работает только компиляция в режиме ARM и схема переключения 0). Вот он пишется в свободное время параллельно с освоением GCC. Это уже каждый решает для себя сам - есть такое же готовое или придется приложить усилия. Для начала определитесь - будут у вас процессы создаваться в процессе выполнения, или их количество фиксировано на этапе компиляции? Если нужно создавать процессы в процессе :laughing: работы, то scmRTOS вам не подойдет.
  25. Тут, на форуме. Можно напрямую письмо послать.
×
×
  • Создать...