Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader&application
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
KSN
В IAR есть два отдельных проекта: приложение и загрузчик. Оба этих проекта используют несколько одинаковых функций. Из экономии памяти решил, в проекте загрузчика создать сегмент, куда поместить общие функции. А в проекте приложения в xcl файле указал адреса этих функций, чтобы можно было вызывать эти функции. Скомпилировал два проекта по отдельности, объединил прошивки - все работает, но не стабильно. Глючить начинает, когда приложение вызывает общие функции. Проекты компилировались с разными уровнями оптимизации: загрузчик - максимум по размеру, а приложение - среднее по размеру. Есть подозрение, что в этом и дело, надо разбираться, чем и занимаюсь.
Попутно хочу спросить, каким образом люди решают подобные задачи? Применять одинаковые уровни оптимизации обоих проектов; не оптимизировать общие функции; использовать общие функции на ассемблере и т.д.
HARMHARM
Оптимизация не должна влиять на стабильность вообще.
Тоже рассматривал такой подход, отказался из-за экономии времени и нервов. В итоге многие общие функции подверглись рефакторингу, и были бы все равно заменены.
Определитесь, какие глюки возникают?
KSN
Глюки: перестает работать основной цикл программы после вызова общей функции. Прерывания отрабатываются нормально. У меня есть несколько общих функции, которые вызывает приложение. Также есть еще несколько функции(назовем их дочерними функциями), которые расположены в том же сегменте, что и общие функции и которые вызываются общими функциями. Сейчас установил цепочку "ловушек"(дергание ножками) при вызове одной из общих функций. Результат: подвисание происходить внутри общей функции при вызове дочерних функций, причем, разных дочерних.
Ну, мне все-таки надо попытаться сделать работоспособным приложением, т.к. при компиляции приложения и загрузчика с исходными текстами общих функций я не укладываюсь в размеры памяти кристалла.
Палыч
Цитата(KSN @ Jul 6 2009, 11:37) *
Глюки: перестает работать основной цикл программы после вызова общей функции.
А нет ли у Вас в загрузчике переменных, которые не ложатся в стек - глобальных переменных. Может быть, загрузчик и приложение "дерутся" за один и тотже участок ОЗУ? Или стека в приложении не хватает?
KSN
Загрузчик и приложение одновременно не работают, поэтому им не из-за чего драться. В загрузчике есть глобальные переменные, но они используются только в нем,а в общих функция не используются. Общие функции не используют глобальных переменных, только те, что им передали во время вызова (все функции с параматерами). При компиляции приложения глянул map файл, там оценака стека:CSTACK=0x5B RSTACK=0x1A. У меня в xcl файле CSTACK=0x120 RSTACK=0x60
KSN
Проблема решена. Глюк был в том, что общие функции вызывались как из прерывания приложения, так и из основного цикла приложения. В общих функция есть обращение по SPI к внешним контроллерам. В результате одновременного (прерывание + основной цикл) доступа вешался внешний девайс по SPI.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.