Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.07.2007, 13:32
|
|
Прохожий
Регистрация: 28.08.2006
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
AVR+GCC+jacOS
Контроллер ATmega16, компилятор WinAVR, операционка jacOS 1.06, отлаживаю в Proteus 7.1.
Применяю операционную систему из-за сжатых сроков на разработку.
За день сделал первые 3 задачи - динамическую индикацию, обработку нажатия кнопок + часы. Дальше при добавлении каждой новой задачи стали возникать целые букеты глюков, и сейчас почти все время уходит не на написание самой программы, а устранение этих глюков. После 6-й задачи силы и терпение мои исчерпались. Нужно срочно что-то предпринимать, времени в обрез.
Основные глюки вот в чем: В jacOS-е единый стек для задач, причем в этом стеке как данные (static), так и адреса. Во время выполнения задачи указатель стека иногда смещается и при возвращении из задачи по команде "ret" в счетчик команд возвращается не адрес, а какие-нибудь данные и частенько программа просто вылетает за пределы.
Может кто применял jacOS на GCC, могли бы чем помочь.
Очень нужна помощь, времени катастрофически не хватает.
|
|
|
|
23.07.2007, 16:49
|
|
Частый гость
Регистрация: 26.08.2006
Сообщений: 34
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR+GCC+jacOS
Сообщение от DenisLeonidovich
|
Во время выполнения задачи указатель стека иногда смещается и при возвращении из задачи по команде "ret" в счетчик команд возвращается не адрес, а какие-нибудь данные и частенько программа просто вылетает за пределы.
Может кто применял jacOS на GCC, могли бы чем помочь.
Очень нужна помощь, времени катастрофически не хватает.
|
Применял, на IAR - особой разници нет на чем.
А глюк скорей всего у Вас из-за того, что вы пользуетесь командами jacOS за пределами задачи. То есть - есть задача, задача вызывает свою подпрограмму, а в этой подпрограмме использована например OS_Delay. Это первое и наиболее вероятное. Второе: отключите ВООБЩЕ оптимизацию при компилировании, возможно компилятор неверно трактует команду OS_Cooperate (не как CALL, а как JMP такое бывает). И третье: увеличьте размер стека раза в два.
А вообще не плохая операционка - простая и легкая. Мне понравилась. Только очень важно - нужно ВНИМАТЕЛЬНО читать описание к ней (лучше выучить наизусть ![Валяюсь от смеха](images/smilies/icon_biggrin.gif) ).
|
|
|
|
24.07.2007, 12:25
|
|
Прохожий
Регистрация: 28.08.2006
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Убрал все дополнительные подпрограммы, свел программу к двум задачам. Первая задача - часы реальногое времени и передача сообщения каждую секунду; вторая - индикация + прием сообщение от первой задачи и обновление данных на дисплее. Тип сообщения - указател на структура типа:
struct {
char hour;
char minute;
char second;
}
- в отправитель этот тип static, в получателе - auto;
результат - вылет!
Дальше чудеса: делаю получатель типа static - всё отлично.
Вот что заметил - во время глюка, когда вызывается задача, почему-то выполняется одна (!) команда PUSH - в конце задачи команда POP отсуствует, отсюда и смещение указателя стека, и после выхода из задачи ret происходит вылет.
Написал разработчику - молчок.
|
|
|
|
24.07.2007, 14:24
|
|
Частый гость
Регистрация: 26.08.2006
Сообщений: 34
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от DenisLeonidovich
|
... когда вызывается задача, почему-то выполняется одна (!) команда PUSH - в конце задачи команда POP отсуствует, отсюда и смещение указателя стека, и после выхода из задачи ret происходит вылет.
Написал разработчику - молчок.
|
Попробуйте в Make-файле указать оптимизацию “0” – отсутствует. И оттрасируйте тоже место.
Вообще сказать где собака порылась так очень сложно (не видя текста программы). У меня, например, в самом начале работы с этой ОС 100% всех ошибок стека и выхода за пределы программы были связаны с некорректным использованием команд ОС (внимательным чтением описания ОС – проблема решалась). Один раз проблема была в компиляторе (об этом тоже говориться в мануале). Разобравшись - сделал уже несколько проектов на этой ОС.
Попробуйте использовать библиотеку As3tin2 (хотя, возможно вы ее и используете).
И кстати, а почему версия 1.06? Уже давно есть 1.07.5.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Оптимизация в AVR GCC
|
alberio |
Микроконтроллеры, АЦП, память и т.д |
45 |
02.03.2018 12:38 |
gcc, iar, code vision AVR ?
|
schotki |
Микроконтроллеры, АЦП, память и т.д |
48 |
26.05.2009 20:15 |
Настройки gcc ARM под windows
|
__djan_ |
Микроконтроллеры, АЦП, память и т.д |
7 |
28.03.2009 02:49 |
GCC AVR не работает printf("Hello word")
|
Kabron |
Proteus, KiCAD и другие ECAD |
8 |
03.03.2007 14:33 |
GNU GCC AVR вопрос по переменным..
|
Mozart |
Микроконтроллеры, АЦП, память и т.д |
3 |
09.02.2007 20:00 |
Часовой пояс GMT +4, время: 00:44.
|
|