реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Bootloader&application, доступ к общим функциям
KSN
сообщение Jul 6 2009, 08:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



В IAR есть два отдельных проекта: приложение и загрузчик. Оба этих проекта используют несколько одинаковых функций. Из экономии памяти решил, в проекте загрузчика создать сегмент, куда поместить общие функции. А в проекте приложения в xcl файле указал адреса этих функций, чтобы можно было вызывать эти функции. Скомпилировал два проекта по отдельности, объединил прошивки - все работает, но не стабильно. Глючить начинает, когда приложение вызывает общие функции. Проекты компилировались с разными уровнями оптимизации: загрузчик - максимум по размеру, а приложение - среднее по размеру. Есть подозрение, что в этом и дело, надо разбираться, чем и занимаюсь.
Попутно хочу спросить, каким образом люди решают подобные задачи? Применять одинаковые уровни оптимизации обоих проектов; не оптимизировать общие функции; использовать общие функции на ассемблере и т.д.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jul 6 2009, 08:24
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Оптимизация не должна влиять на стабильность вообще.
Тоже рассматривал такой подход, отказался из-за экономии времени и нервов. В итоге многие общие функции подверглись рефакторингу, и были бы все равно заменены.
Определитесь, какие глюки возникают?
Go to the top of the page
 
+Quote Post
KSN
сообщение Jul 6 2009, 08:37
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Глюки: перестает работать основной цикл программы после вызова общей функции. Прерывания отрабатываются нормально. У меня есть несколько общих функции, которые вызывает приложение. Также есть еще несколько функции(назовем их дочерними функциями), которые расположены в том же сегменте, что и общие функции и которые вызываются общими функциями. Сейчас установил цепочку "ловушек"(дергание ножками) при вызове одной из общих функций. Результат: подвисание происходить внутри общей функции при вызове дочерних функций, причем, разных дочерних.
Ну, мне все-таки надо попытаться сделать работоспособным приложением, т.к. при компиляции приложения и загрузчика с исходными текстами общих функций я не укладываюсь в размеры памяти кристалла.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 6 2009, 08:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(KSN @ Jul 6 2009, 11:37) *
Глюки: перестает работать основной цикл программы после вызова общей функции.
А нет ли у Вас в загрузчике переменных, которые не ложатся в стек - глобальных переменных. Может быть, загрузчик и приложение "дерутся" за один и тотже участок ОЗУ? Или стека в приложении не хватает?
Go to the top of the page
 
+Quote Post
KSN
сообщение Jul 6 2009, 08:55
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Загрузчик и приложение одновременно не работают, поэтому им не из-за чего драться. В загрузчике есть глобальные переменные, но они используются только в нем,а в общих функция не используются. Общие функции не используют глобальных переменных, только те, что им передали во время вызова (все функции с параматерами). При компиляции приложения глянул map файл, там оценака стека:CSTACK=0x5B RSTACK=0x1A. У меня в xcl файле CSTACK=0x120 RSTACK=0x60
Go to the top of the page
 
+Quote Post
KSN
сообщение Jul 6 2009, 10:07
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Проблема решена. Глюк был в том, что общие функции вызывались как из прерывания приложения, так и из основного цикла приложения. В общих функция есть обращение по SPI к внешним контроллерам. В результате одновременного (прерывание + основной цикл) доступа вешался внешний девайс по SPI.
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.03308 секунд с 7
ELECTRONIX ©2004-2016