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

 
 
> как узнать в программе последний адрес этой программы (WinAVR)
injen-d
сообщение Apr 8 2008, 18:46
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Пользую WinAVR-20071221. Возникла необходимость подсчитывать контрольную сумму программы, но не получается из самой программы узнать до куда, собственно, считать.
Думаю, нужно посчитать до адреса _еtext + длинна(.data), но реализовать это чет пока никак не получается. Должно же быть простое решение? Поиск пока ничего вразумительного не дал.
Наставьте, пожалуста, на путь истиный.
ЗЫ: на асме это делалось элементарно... crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
injen-d
сообщение Apr 10 2008, 18:11
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата
Просто поставте последней секцию типа такой.

Проверил, работает правильно.
Код
.finish :
  {
      _size_prog = .;
  } > text
}

Спасибо за подсказки, пожалуй, буду использовать этот вариант.

Добавлю еще, что если использовать файл скрипта из WinAVR и просто добавить в конце:
Код
.finish :
  {
      _size_prog = .;
  } > text
}

то заначение _size_prog все равно будет неверным, чтобы это исправить необходимо изменить описание секции .data как указал Сергей Борщ:
вместо
Код
.data      : AT (ADDR (.text) + SIZEOF (.text))
  {
     PROVIDE (__data_start = .);
    *(.data)
    *(.data*)
    *(.rodata)  /* We need to include .rodata here if gcc is used */
    *(.rodata*) /* with -fdata-sections.  */
    *(.gnu.linkonce.d*)
    . = ALIGN(2);
     _edata = .;
     PROVIDE (__data_end = .);
  }  > data

нужно сделать:
Код
.data :
  {
     PROVIDE (__data_start = .);
    *(.data)
    *(.data*)
    *(.rodata)  /* We need to include .rodata here if gcc is used */
    *(.rodata*) /* with -fdata-sections.  */
    *(.gnu.linkonce.d*)
    . = ALIGN(2);
     _edata = .;
     PROVIDE (__data_end = .);
  }  > data AT > text


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post



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

 


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


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