Цитата(inco @ May 19 2010, 15:57)

В результате переменные num и channel равны 0.
В иаре всё работает то есть значения переменным присваивается правильно, а в gcc присваивания нет.
Что я делаю не так? На плюсах пишу первый раз, до этого писал только на чистом C. Хочется перейти на gcc и не получается!
Компилятор от клёна kgp_arm_eabi_20100509
mco_uart extUart[EXTUART_NUM] глобальный объект или на стеке ?
конструкторы статических объектов вызываются?
давайте кусок кода который это воспроизведет, без лишних деталей.
я не телепат но скорее всего просто конструкторы статических глобальных объектов не вызываются.
чтобы это работало в скрипт линкера долны быть добавлены
Код
/* .ctors .dtors are used for c++ constructors/destructors */
.ctors :
{
PROVIDE(__ctors_start__ = .);
KEEP(*(SORT(.ctors.*)))
KEEP(*(.ctors))
PROVIDE(__ctors_end__ = .);
} >ROM
.dtors :
{
PROVIDE(__dtors_start__ = .);
KEEP(*(SORT(.dtors.*)))
KEEP(*(.dtors))
PROVIDE(__dtors_end__ = .);
} >ROM
в сило того что сами по себе в коде конструкторы статических глобальных объекто не вызываются линкер их нахрен выкидывает дкумая что это лишний код
чтоб работал С++ нада добавить вышеприведенную хрень в скрипт линкео, она говорит линкеру что функции конструкторы нужны и сувать их в отдельные секции, хотя вариантов может быть куча - это всеголиш так принято.
далее ктото должен вызвать эти конструкторы до вызова main. это обычно принято делать в crt коде.
вставте полсле инициализации данных в crt следующий код;
Код
DR R0, =__ctors_start__
LDR R1, =__ctors_end__
ctor_loop:
CMP R0, R1
BEQ ctor_end
LDR R2, [R0], #4
STMFD SP!, {R0-R1}
MOV LR, PC
MOV PC, R2
LDMFD SP!, {R0-R1}
B ctor_loop
ctor_end:
a)g++ сгенерит табличку с адресами всех конструкторов глобальных статических объектов

линкер положит ее в секцию .ctors
c) ну а уж crt код вызовет по таблице все конструкторы.
e) все работает и мы счастливы
в сдучае с иаром скорее всего это уже сделано зарание.
упражнение для закрепления материала: аналогичными рассуждениями проработать вопрос деструкторы
контрольный вопрос; почему на деструктоы можно забить большой болт с дюймовой резбой?
и еще, я уже если не изменяет память принимал участие в разжовывании этого. поиск рулит. если у Вас окажется другой косяг - тады извиняюсь, будем курить его.