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

 
 
> mspgcc, явное задание адреса переменной (константы)
MrYuran
сообщение Jan 12 2009, 08:45
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



в ИАРе было #pragma location, а здесь как?
пока вроде обходился такой штукой
#define __special_area__ __attribute__((section(".infomem")))

const __special_area__ unsigned long erase_num = 0x0000; // Счётчик стираний
const __special_area__ int default_Treg = 0x0064; // Treg
const __special_area__ int default_Xust = 0x0064; // Xust
const __special_area__ int default_mode = 0x0007; // Mode

а теперь хочу поставить конкретную константу в конкретный адрес.
Как?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Jul 28 2009, 12:18
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Задолбался...
Версий больше нет...
Почему stFlashData DefaultFlashData = DEFAULTS
размещает структуру данных вместе с данными в .text,
а stFlashData _SEG_A_ FlashData = DEFAULTS размещает структуру в нужной секции, но без данных?
Конечно, можно при первом запуске скопировать туда DefaultFlashData, но это костыли, а хочется культурно...

Заодно и логику компилятора понять

Убрал атрибут секции, две одинаковые структуры лежат в памяти одна под другой

Может, скрипт линкера надо подправить?

Исправил секцию на .infomem, адрес поменялся (0x1000), данных нет
cranky.gif
maniac.gif

что нужно поправить, чтобы не было разницы между .text и .infomem ?
(с т.з. размещения данных)

CODE
/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
OUTPUT_ARCH(msp:16)
MEMORY
{
text (rx) : ORIGIN = 0x1100, LENGTH = 0xeee0
data (rwx) : ORIGIN = 0x0200, LENGTH = 0x0800
vectors (rw) : ORIGIN = 0xffe0, LENGTH = 32
bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K
infomem(rx) : ORIGIN = 0x1000, LENGTH = 256
infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256
}
SECTIONS
{
/* Read-only sections, merged into text segment. */
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text :
{
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
}
.rela.text :
{
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
}
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata :
{
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
}
.rela.rodata :
{
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
}
.rel.data :
{
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
}
.rela.data :
{
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
}
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rel.bss : { *(.rel.bss) }
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
/* Internal text space. */
.text :
{
. = ALIGN(2);
*(.init)
KEEP(*(.init))
*(.init0) /* Start here after reset. */
KEEP(*(.init0))
*(.init1) /* User definable. */
KEEP(*(.init1))
*(.init2) /* Initialize stack. */
KEEP(*(.init2))
*(.init3) /* Initialize hardware, user definable. */
KEEP(*(.init3))
*(.init4) /* Copy data to .data, clear bss. */
KEEP(*(.init4))
*(.init5) /* User definable. */
KEEP(*(.init5))
*(.init6) /* C++ constructors. */
KEEP(*(.init6))
*(.init7) /* User definable. */
KEEP(*(.init7))
*(.init8) /* User definable. */
KEEP(*(.init8))
*(.init9) /* Call main(). */
KEEP(*(.init9))
__ctors_start = . ;
*(.ctors)
KEEP(*(.ctors))
__ctors_end = . ;
__dtors_start = . ;
*(.dtors)
KEEP(*(.dtors))
__dtors_end = . ;
. = ALIGN(2);
*(.text)
. = ALIGN(2);
*(.text.*)
. = ALIGN(2);
*(.fini9) /* Jumps here after main(). User definable. */
KEEP(*(.fini9))
*(.fini8) /* User definable. */
KEEP(*(.fini8))
*(.fini7) /* User definable. */
KEEP(*(.fini7))
*(.fini6) /* C++ destructors. */
KEEP(*(.fini6))
*(.fini5) /* User definable. */
KEEP(*(.fini5))
*(.fini4) /* User definable. */
KEEP(*(.fini4))
*(.fini3) /* User definable. */
KEEP(*(.fini3))
*(.fini2) /* User definable. */
KEEP(*(.fini2))
*(.fini1) /* User definable. */
KEEP(*(.fini1))
*(.fini0) /* Infinite loop after program termination. */
KEEP(*(.fini0))
*(.fini)
KEEP(*(.fini))
_etext = .;
} > text
.data :
{
PROVIDE (__data_start = .) ;
. = ALIGN(2);
*(.data)
*(SORT_BY_ALIGNMENT(.data.*))
. = ALIGN(2);
*(.gnu.linkonce.d*)
. = ALIGN(2);
_edata = . ;
} > data AT > text
PROVIDE (__data_load_start = LOADADDR(.data) );
PROVIDE (__data_size = SIZEOF(.data) );
/* Bootloader. */
.bootloader :
{
PROVIDE (__boot_start = .) ;
*(.bootloader)
. = ALIGN(2);
*(.bootloader.*)
} > bootloader
/* Information memory. */
.infomem :
{
*(.infomem)
. = ALIGN(2);
*(.infomem.*)
} > infomem
/* Information memory (not loaded into MPU). */
.infomemnobits :
{
*(.infomemnobits)
. = ALIGN(2);
*(.infomemnobits.*)
} > infomemnobits
.bss :
{
PROVIDE (__bss_start = .) ;
*(.bss)
*(SORT_BY_ALIGNMENT(.bss.*))
*(COMMON)
PROVIDE (__bss_end = .) ;
_end = . ;
} > data
PROVIDE (__bss_size = SIZEOF(.bss) );
.noinit :
{
PROVIDE (__noinit_start = .) ;
*(.noinit)
*(.noinit.*)
*(COMMON)
PROVIDE (__noinit_end = .) ;
_end = . ;
} > data
.vectors :
{
PROVIDE (__vectors_start = .) ;
*(.vectors*)
KEEP(*(.vectors*))
_vectors_end = . ;
} > vectors
/* Stabs for profiling information*/
.profiler 0 : { *(.profiler) }
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
PROVIDE (__stack = 0xa00) ;
PROVIDE (__data_start_rom = _etext) ;
PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;
PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
PROVIDE (__subdevice_has_heap = 0) ;
}


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
alx2
сообщение Jul 28 2009, 22:06
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MrYuran @ Jul 28 2009, 17:18) *
Почему stFlashData DefaultFlashData = DEFAULTS
размещает структуру данных вместе с данными в .text,

Потому что в линкерном скрипте указано данные секции .data помещать в text:
Код
  .data   :
  {
      blablabla
  }  > data AT > text

Цитата(MrYuran @ Jul 28 2009, 17:18) *
а stFlashData _SEG_A_ FlashData = DEFAULTS размещает структуру в нужной секции, но без данных?

Потому что для этой секции в линкерном скрипте нет указания "AT .....":
Код
  .infomem   :
  {
      blablabla
  }  > infomem

А что значит "без данных"? Что показывает objdump -d -j .infomem <elffile> ?
И что написано в map-файле по поводу размещения секции .infomem?

Ой. Только сейчас заметил: а как секция .seg_a превратилась в .infomem? В линкерном скрипте нет никаких указаний загружать .seg_a... Или я уже совсем запутался и ничего не понимаю... Спать, наверное, пора... smile.gif

Цитата(Сергей Борщ @ Jul 29 2009, 02:54) *
В плюсах константы, объявленные без extern, имеют область видимости в пределах текушей единицы компиляции. В С - глобальную.
Вот как... Эта тонкость почему-то напрочь отсутствовала в моей голове. smile.gif Спасибо.

Сообщение отредактировал alx2 - Jul 28 2009, 22:02


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 30 2009, 05:32
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(alx2 @ Jul 29 2009, 02:06) *
А что значит "без данных"? Что показывает objdump -d -j .infomem <elffile> ?

Код
1102U_430_00_00.elf:     file format elf32-msp430
Disassembly of section .infomem:
00001000 <FlashData>:
    1000:    6f 12 83 3a 19 04 9e 3f 7b 14 16 40 00 00 80 3f     o..:...?{..@...?
    1010:    3f 00                                              ?.

Ой... А откуда? А я листинг смотрел...
Вот те раз...
Цитата
И что написано в map-файле по поводу размещения секции .infomem?
.map я пока ниасилил. Там куча каких-то непонятных закорючек...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MrYuran   mspgcc   Jan 12 2009, 08:45
- - diwil   несколько способов - первый: #define var_name (*...   Jan 12 2009, 10:28
|- - MrYuran   Цитата(diwil @ Jan 12 2009, 13:28) #defin...   Jan 12 2009, 10:54
|- - Сергей Борщ   Цитата(MrYuran @ Jan 12 2009, 12:54) можн...   Jan 12 2009, 11:08
|- - MrYuran   Цитата(Сергей Борщ @ Jan 12 2009, 14:08) ...   Jan 12 2009, 11:16
|- - Сергей Борщ   Цитата(MrYuran @ Jan 12 2009, 13:16) Ну а...   Jan 12 2009, 14:57
- - MrYuran   Продолжаем беседу volatile register unsigned int ...   Jun 26 2009, 12:02
|- - rezident   Цитата(MrYuran @ Jun 26 2009, 18:02) В чё...   Jun 26 2009, 13:56
|- - Сергей Борщ   Цитата(MrYuran @ Jun 26 2009, 15:02) warn...   Jun 26 2009, 15:12
- - MrYuran   Понятно. Я как-то забыл, что компилятору тоже реги...   Jun 26 2009, 14:02
- - MrYuran   Сходная тема, решил не плодить Объявляю в сегмент...   Jul 28 2009, 06:25
|- - Сергей Борщ   Цитата(MrYuran @ Jul 28 2009, 09:25) Как ...   Jul 28 2009, 06:44
|- - MrYuran   Цитата(Сергей Борщ @ Jul 28 2009, 10:44) ...   Jul 28 2009, 07:00
||- - Сергей Борщ   Цитата(MrYuran @ Jul 28 2009, 10:00) А то...   Jul 28 2009, 07:41
|- - alx2   Цитата(Сергей Борщ @ Jul 28 2009, 11:44) ...   Jul 28 2009, 21:38
|- - Сергей Борщ   Цитата(alx2 @ Jul 29 2009, 00:38) Какая в...   Jul 28 2009, 21:54
- - MrYuran   flash.h : Кодtypedef struct { float T_K_calib...   Jul 28 2009, 10:00
|- - Сергей Борщ   Цитата(MrYuran @ Jul 28 2009, 13:00) Врод...   Jul 28 2009, 10:26
- - rezident   Я в похожем случае (правда в IAR) приноровился соз...   Jul 28 2009, 11:28
- - Сергей Борщ   Цитата(MrYuran @ Jul 28 2009, 15:18) что ...   Jul 28 2009, 22:09


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:30
Рейтинг@Mail.ru


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