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

 
 
> Не могу включить оптимизацию, иниализировать переменные
yuragv
сообщение Dec 19 2008, 22:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 19-12-08
Пользователь №: 42 616



Иар 2.10 для Hitachi H8S. проц 36049.

проект дорос до максимального размера флеш 92к.
при включении оптимазации по размеру Low - работает, а при медиум и high
размер получившегося кода становиться меньше 1кб. походже только стартап остаеться.
можно как-то побороться с этим?

модель памяти huge, если включить small, то код уменьшаеться до 80 кб,
но тогда не получаеться нормально работать с указателями на константы,
может быть в этом случае можно хитрость какую применить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 25 2008, 14:05
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(yuragv @ Dec 23 2008, 11:15) *
отладчика нет у меня, поэтому мин. проект будет все равно великовал. отладочную инфу я через уарт выводил.
Проект с одним-единственным исходным файлом с текстом из сообщения №6 занимает много места? Для его проверки отладчик не нужен - достаточно встроенного в IAR симулятора.
Цитата(yuragv @ Dec 23 2008, 11:15) *
функции дисплея некоторые в асме. попробую убрать их пока.
Вы соблюдаете правила совместного использования С и асм? Возможно вы иногда портите какой-либо из регистров, который должны были бы сохранить при входе в функцию и восстановить при выходе.
Цитата(yuragv @ Dec 25 2008, 14:32) *
вопрос с оптимизацией решен.
Обычно принято сообщать, в чем была ошибка, чтобы наступившие на эти же грабли нашли здесь не только уверенность, что они не одиноки, но и решение.
Цитата(yuragv @ Dec 25 2008, 14:32) *
осталось только разобраться с инициализацией переменных
Родилось предположение - а вы случайно не используете самописный стартап? В таком случае вы должны из него вызывать библиотечные функции инициализации данных или писать свои аналоги.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
yuragv
сообщение Dec 28 2008, 15:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 19-12-08
Пользователь №: 42 616



Спасибо большое за ответы.
Я прошу прощения за сумбурность и невнятность.

С оптимизацией не удалось разобраться, просто я перевел память данных в модель small и программа уменьшилась процентов на 10%.
А память портилась из-за неправильной очистки ее же, которая осталась от проекта в старом железе и не была вовремя замечена. К оптимизации еще придеться вернуться.

По поводу инициализация, я кажеться понял в чем дело. Поскольку в устройстве имеется сторониий загрузчик, необходимое условие - программа должна располагаться с адреса 0x6000. Таблица векторов в загрузчике перенаправляет прерывание на адрес 0x6000+addr_vector. я соответственно прописал свои переходы на функции прерываний. по адресу 0x6000 я поставил jmp main. то есть в стартап у меня не попадает программа при старте. как сделать чтобы программа стартовала в стартап?


нашел. стартую в __program_start. все инициализируется.

Сообщение отредактировал yuragv - Dec 28 2008, 15:52
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 28 2008, 18:51
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(yuragv @ Dec 28 2008, 17:50) *
я соответственно прописал свои переходы на функции прерываний.
Каким образом? Возможно именно здесь и кроется ошибка, из-за которой оптимизатор все выкидывает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
yuragv
сообщение Dec 28 2008, 19:24
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 19-12-08
Пользователь №: 42 616



org 6000H
jmp @__program_start
; прерывание TPU0 - системный таймер
org 6080H
jmp @InterruptSysTimer
; прерывание TPU3 - uart2
org 60C0H
jmp @IntUart2Function


зря модератор свел две темы в одну.

про оптимизацию это один проект,
а про инициализацию - другой(там где программу перенести потребовалось по адресу 0x6000)

кстати все равно локальные переменные внутри ф-ции не инициализируються

Сообщение отредактировал yuragv - Dec 28 2008, 19:26
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 28 2008, 19:45
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(yuragv @ Dec 28 2008, 21:24) *
org 6000H
jmp @__program_start
А перед этим стоит ASEG:ROOT?
P.S. И используйте кнопку '#' на форме ввода для оформления исходников.
Цитата(yuragv @ Dec 28 2008, 21:24) *
кстати все равно локальные переменные внутри ф-ции не инициализируються
Приводите пример кода. Инициализация локальных переменных никак не связана со стартапом. Или вы имеете ввиду, что не обнуляются неинициализированные локальные переменные? Так они и не должны, их надо инициализировать явно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yuragv   Не могу включить оптимизацию, иниализировать переменные   Dec 19 2008, 22:01
- - yuragv   IAR 2.10 проц Hitachi H8. модель памяти HUGE. Потр...   Dec 20 2008, 16:57
|- - yuragv   модератор собрал два мои сообщения в одну тему, но...   Dec 20 2008, 19:10
|- - Сергей Борщ   Цитата(yuragv @ Dec 20 2008, 18:57) Не пр...   Dec 22 2008, 22:25
|- - yuragv   xcl-файл полностью -ch8 -P(CONST)INTVEC=0-3FF -P(...   Dec 23 2008, 09:15
|- - yuragv   вопрос с оптимизацией решен. осталось только разо...   Dec 25 2008, 12:32
- - sergik_vrn   Цитата(yuragv @ Dec 20 2008, 01:01) Иар 2...   Dec 22 2008, 06:46
|- - yuragv   ссылка на листинг http://upload.com.ua/get/9006126...   Dec 22 2008, 20:44
|- - yuragv   может подскажите еще такую вещь: процессор 16-ти ...   Dec 28 2008, 20:01
|- - HARMHARM   Цитата(yuragv @ Dec 28 2008, 22:01) как с...   Dec 28 2008, 20:16
|- - yuragv   Кодvoid FuncTest(void) { byte buf[...   Dec 28 2008, 20:40
|- - Сергей Борщ   А что показывает листинг?   Dec 29 2008, 06:08
- - sergeeff   Сегмент данных лежит там, где ожидается?   Dec 29 2008, 10:57
- - yuragv   нашел я где собачка порылась. при инициализации ...   Jan 4 2009, 13:50
- - Сергей Борщ   Цитата(yuragv @ Jan 4 2009, 15:50) функци...   Jan 4 2009, 16:32
- - yuragv   в загрузчике все вектора перенаправлены на адрес 0...   Jan 5 2009, 10:23
- - Сергей Борщ   Цитата(yuragv @ Jan 5 2009, 12:23) Дело в...   Jan 5 2009, 11:15
- - yuragv   спасибо. пока оставлю так как есть. тем более что ...   Jan 5 2009, 13:26


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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 22:37
Рейтинг@Mail.ru


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