Цитата(Сергей Борщ @ May 14 2007, 15:00)

Попробуйте так:
Код
class cClassDir
{
private:
static tF32 const initVolt;
tF32 const initTest;
};
// in .cpp:
cClassDir::cClassDir() : initTest(4.0f) {}
tF32 cClassDir::initVolt = 5.0f;
P.S. А виноват, конечно, компилятор

Спасибо, так компилятор съел...
Код
const float cClass::initialVoltValueRange = 800.0f;
const float cClass::initialCurValueRange = 0.5f;
const float cClass::initialTestValue = 8.0f;
cClass::cClass(void)
{
internalVoltRange = initialVoltValueRange;
internalCurRange = initialCurValueRange;
internalTest = initialTestValue;
}
но вот что получилось в ассемблере....
Код
66 internalVotlRange = initialVoltValueRange;
\ 000000C4 .... LDI R16, LOW(??initialVoltValueRange)
\ 000000C6 .... LDI R17, (??initialVoltValueRange) >> 8
\ 000000C8 01F8 MOVW R31:R30, R17:R16
\ 000000CA 8140 LD R20, Z
\ 000000CC 8151 LDD R21, Z+1
\ 000000CE 8162 LDD R22, Z+2
\ 000000D0 8173 LDD R23, Z+3
\ 000000D2 01F3 MOVW R31:R30, R7:R6
\ 000000D4 AF41 STD Z+57, R20
\ 000000D6 AF52 STD Z+58, R21
\ 000000D8 AF63 STD Z+59, R22
\ 000000DA AF74 STD Z+60, R23
67 internalCurRange = initialCurValueRange;
\ 000000DC 01F8 MOVW R31:R30, R17:R16
\ 000000DE 8144 LDD R20, Z+4
\ 000000E0 8155 LDD R21, Z+5
\ 000000E2 8166 LDD R22, Z+6
\ 000000E4 8177 LDD R23, Z+7
\ 000000E6 934D ST X+, R20
\ 000000E8 935D ST X+, R21
\ 000000EA 936D ST X+, R22
\ 000000EC 937C ST X, R23
\ 000000EE 9713 SBIW R27:R26, 3
68 internalTest = initialTestValue;
\ 000000F0 8500 LDD R16, Z+8
\ 000000F2 8511 LDD R17, Z+9
\ 000000F4 8522 LDD R18, Z+10
\ 000000F6 8533 LDD R19, Z+11
\ 000000F8 01FD MOVW R31:R30, R27:R26
\ 000000FA 8304 STD Z+4, R16
\ 000000FC 8315 STD Z+5, R17
\ 000000FE 8326 STD Z+6, R18
\ 00000100 8337 STD Z+7, R19
Т.е. данные берутся из ОЗУ а нужно из памяти программ.... Опять глюк компилятора????
Кстати из первого моего поста, если не делать атрибут класса статическим и проинициализировать его, то ИАР дает предупреждение, как видно на картинке (говорит, что не стаический член класса не рекумендуется инициализировать, сделайте его статическим). И выдает верный код в ассемблере!!!!!
Т.е подставляет непосредственно число (LDI R16, 0 -> LDI R18, 72 -> LDI R19, 68). См. код
Код
66 internalVoltRange = initialVoltValueRange;
\ 000000C0 E000 LDI R16, 0
\ 000000C2 E428 LDI R18, 72
\ 000000C4 E434 LDI R19, 68
\ 000000C6 01F2 MOVW R31:R30, R5:R4
\ 000000C8 AF01 STD Z+57, R16
\ 000000CA AF02 STD Z+58, R16
\ 000000CC AF23 STD Z+59, R18
\ 000000CE AF34 STD Z+60, R19
67 internalCurRange = initialCurValueRange;
\ 000000D0 EC0D LDI R16, 205
\ 000000D2 EC1C LDI R17, 204
\ 000000D4 E33E LDI R19, 62
\ 000000D6 01F3 MOVW R31:R30, R7:R6
\ 000000D8 8300 ST Z, R16
\ 000000DA 8311 STD Z+1, R17
\ 000000DC 8312 STD Z+2, R17
\ 000000DE 8333 STD Z+3, R19
68 internalTest = initialTestValue;
\ 000000E0 E000 LDI R16, 0
\ 000000E2 E010 LDI R17, 0
\ 000000E4 8304 STD Z+4, R16
\ 000000E6 8305 STD Z+5, R16
\ 000000E8 8306 STD Z+6, R16
\ 000000EA 8307 STD Z+7, R16
Ничего не понимаю....
Обращаться в ИАР????