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

 
 
> Не могу включить оптимизацию, иниализировать переменные
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
yuragv
сообщение Dec 28 2008, 20:01
Сообщение #6


Участник
*

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



может подскажите еще такую вещь:

процессор 16-ти битный.


пример:

byte TmpBuf[1000];
byte Board;

*((dword *)(TmpBuf+10))=0x06000100;

в данном случае дает правильный результат.

если поменять местами byte TmpBuf[1000] и byte Board;

то в итоге TmpBuf будет заполнен так 00,01,00,00
то есть 0x06 выйдет за границу массива.

как сделать так чтобы TmpBuf всегда лежал по четному адресу?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Dec 28 2008, 20:16
Сообщение #7


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

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



Цитата(yuragv @ Dec 28 2008, 22:01) *
как сделать так чтобы TmpBuf всегда лежал по четному адресу?

Для IAR:
Код
#pragma data_alignment = 2
Go to the top of the page
 
+Quote Post
yuragv
сообщение Dec 28 2008, 20:40
Сообщение #8


Участник
*

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



Код
void FuncTest(void)
{
   byte buf[]="test";
  
   if(buf[0]=='t') {  
       // эта часть кода не выполняеться
   }
}


Сообщение отредактировал yuragv - Dec 28 2008, 20:56
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 29 2008, 06:08
Сообщение #9


Гуру
******

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



А что показывает листинг?


--------------------
На любой вопрос даю любой ответ
"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 @ Dec 28 2008, 21:24) org 6...   Dec 28 2008, 19:45
- - 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 Текстовая версия Сейчас: 24th June 2025 - 12:14
Рейтинг@Mail.ru


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