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

testerplus

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

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник
  • День рождения 01.01.1977

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

1 735 просмотров профиля
  1. Для начала напишите обработчик трапа по переполнению и убедитесь в том, что проблема именно в стеке (а по-хорошему написание программы надо начинать с написания обработчиков трапов). Если выяснится, что проблема в переполнении, то переопределяйте SPLIM в скрипте линкера.
  2. Так об этом при проектировании программы надо было думать (особенно, учитывая, что и из прерываний есть вызовы). Если точно нет рекурсии и функций, вызываемых и из программы, и из прерывания (или из разных уровней прерывания), то можно в обработчике приоритетного прерывания контролировать максимальное значение STKPTR. А оттуда вручную просчитать глубину вызываемых из него функций. Или в периодически выполняемом фрагменте кода вставить проверку содержимого стека (но придется на время проверки блокировать прерывания, т.к. нужно оперировать значением STKPTR) Но тоже не факт, что при выполнении программы отработают все варианты ветвления.
  3. Hello world

    Чтение документации укрепит дружбу. Особенно про таймер и про прерывания. А еще про то, что запись в TMR0 обнуляет счетчик прескейлера.
  4. Защита на PIC18F252

    Или о тупом копировании и запуске в серию. Нынешние ценники на вычитывание в районе $500-1000, что на порядок дешевле написания собственной программы.
  5. PIC18F45K22 and MCC18

    Просто для информации: http://caxapa.ru/236584.html
  6. Почитайте в мануале про атрибут packed: typedef struct __attribute__((packed)) PPP_Header { ... Но в некоторых случаях при неаккуратной работе с такими структурами (например при попытке обращения к полям через указатель) можно нарваться на трап "ошибка адреса".
  7. Да какой там дисклаймер... Лучше пока уберу этот абзац, его давно надо было переписать.
  8. Все правильно, Вы не первый мне это говорите. Просто нет времени на переработку материала. Спасибо, исправляю...
  9. 101007: Добавлена поддержка IAR и Raisonance для STM8 Ограничение: ROM <= 64K
  10. По этому коду, конечно, ничего не скажешь. Зря не оставили нерабочий вариант. МикроЕ'шники - единственные из пикокомпиляторописателей, кто реагируют на багрепорты.
  11. Это интересно. Не приведете фрагмент?
  12. OSA портирована на STM8 (ограничение: ROM <= 64K) для компилятора Cosmic. Исходники версии 101000. В учебник добавлен Урок 5, посвященный расширенному приоритетному режиму.
  13. Нашел вариант решения проблемы. Теперь на WinAVR+OSA можно использовать любой уровень оптимизации (если еще какая гадость не вылезет) Версия 100531
  14. Уважаемый zelvans! Вам и на казусе и здесь говорят, что Вы ерунду задумали. Понимаете, в самой идее того, что Вы предлагаете (я пока не говорю про реализацию), есть несколько моментов, которые не позволяют серьезно относиться к предлагаемому Вами решению: 1. Каждая переменная, к которой предполагается обращение по приведенной Вами схеме, должна иметь два адреса: один - для прямого доступа, другой - для доступа через Ваши функции. Очень неудобно. 2. Очень долго выполняются операции доступа к переменным. Тут отчасти причина в Вашей программной реализации (очеь неоптимальной), но в основном - это следствие самой концепции. 3. Ваши функции покрывают не всю область RAM. Понятно, конечно, что прораммист должен это предусматривать и размещать переменные так, чтобы они находились в области видимости линейных адресов, но сам факт того, что об этом придется заботиться, уже отговаривает от использования предлагаемых функций. И пару слов о реализации. Во-первых, видно, что код написан новичком (по крайней мере - в ПИКах), и предлагать его для всеобщего пользования несколько самонадеянно. А недостатки реализации очевидны: 1. Отъедает слишком много ресурсов: - несколько ненужных промежуточных переменных (которые, кстати, нужно размещать где-то вне области линейных адресов); при вызове функций можно обойтись регистрами W и FSR (если интересно, как, - могу написать в личку); - слишком длинные функции (код можно довольно сильно порезать), не говоря уже о теле макроса COPY_MEM (десяток вызовов отъест 250 слов ROM, не многовато ли?) 2. Следствием проверки кучи лишних условий и постоянного использования макросов banksel является увеличение времени работы функции. Сколько времени будет длиться копирование массива из 10 байт? (Я мог бы запустить в симуляторе, но что-то лениво) 3. Следствием использования временных переменных (всякие WRITE_BYTE, READ_BYTE, TEMP_BYTEx) является невозможность обращаться к линейным адресам и в программе и в прерывании. Т.е. при обращении в программе придется запрещать прерывания, а, учитывая большое время выполнения функций, это далеко не всегда преемлемо. То время, которое Вы тратите на попытки подогнать архитектуру нового для Вас контроллера под Ваши привычки, лучше потратьте на более глубокое изучение самой архитектуры с тем, чтобы максимально эффективно ее использовать, раз уж довелось работать с этим типом контроллеров.
×
×
  • Создать...