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

 
 
> Непонятное значение, PPC405 (XPS 9.2)
tolik1
сообщение Jul 24 2009, 08:33
Сообщение #1


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

Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016



Есть функция:
//====================================================
void LoadLastByte(Xuint8 Data)
{
Xuint32 d=0xFFFFFD00 + Data;
xil_printf("LoadLastByte - %x; Data - %x\r\n",d,Data);
GENERAL_SIMPLE_IO_32_mWriteSlaveReg3(XPAR_CTRLTEMAC_BASEADDR,0,d);
}
//====================================================

Есть вызов этой функции:
//====================================================
Xuint8 i;

LoadLastByte(i);
Переменная не инициализирована...
Результат следующий:

LoadLastByte - FFFF2444; Data - FFFF2744

Вопрос: Если переменная Xuint8 Data - один байт, то почеу значение - FFFF2744?
заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jul 24 2009, 11:40
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Я так думаю.


К сожалению, гнуся, да еще и под PPC под рукой нет. Могу показать, как компилит аналогичный код IAR под ARM.

Код
void foo1(const char *, ...);

#pragma optimize=no_inline
void foo2(char c)
{
  unsigned int d=123;
  d=d-c;
  foo1("blabla",d,c);
}


Код
        SECTION `.text`:CODE:NOROOT(2)
        ARM
//  135 void foo2(char c)
//  136 {
//  137   unsigned int d=123;
//  138   d=d-c;
//  139   foo1("blabla",d,c);
foo2:
        MOV      R2,R0
        RSB      R1,R0,#+123
        LDR      R0,??foo2_0    ;; `?<Constant "blabla">`
        B        foo1        ;; tailcall
        DATA
??foo2_0:
        DC32     `?<Constant "blabla">`
//  140 }


Обратите внимание, несмотря на размер переменной 8 бит (char c), компилятор не собирается прочищать какие-либо битики. Просто так договоренно, что этим занимается вызывающая функция.

Правда вот получить из IAR'а такое-же поведения, как и ожидаемое мной у гнуся, не получается - тот хоть и матом орет на неинициализированную переменную, но ноликом ее прочищает. Правда, на малых уровнях оптимизации он этого не делает, но зато втыкает and с мусорным регистром.

В общем, тут все зависит от поведения компилятора при вызове функции с неинициализированным аргументом. Рубль за сто, что там гнусь с регистром, в котором происходит передача параметра, ничего не делает, что летит только мусор...

Более точно нам может ответить топикстартер, показав асмовский листинг своего творения.

Цитата
ЗЫ. И интересно на всякий случай посмотреть на объявление Xuint8. Вдруг это пресловутый uint_least8_t?


Кстати, тоже вариант smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 24 2009, 12:28
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Rst7 @ Jul 24 2009, 17:40) *
К сожалению, гнуся, да еще и под PPC под рукой нет.

У меня есть под арм (cortex-m3):

Код
uint32_t test2(unsigned char ch)
{
    uint32_t d = 0x00DEAD00 + ch;
    return d;
}

8000594:    b2c3          uxtb    r3, r0
8000596:    4801          ldr    r0, [pc, #4]    (800059c <test2+0x8>)
8000598:    1818          adds    r0, r3, r0
800059a:    4770          bx    lr
800059c:    00dead00     .word    0x00dead00


Гнусь таки чистит лишние битики.

Цитата
Правда вот получить из IAR'а такое-же поведения, как и ожидаемое мной у гнуся, не получается - тот хоть и матом орет на неинициализированную переменную, но ноликом ее прочищает. Правда, на малых уровнях оптимизации он этого не делает, но зато втыкает and с мусорным регистром.

Ну это тоже вариант. Компилятор гарантирует, что в переменной char старшие биты нулевые. Это уже чёткая аналогия с тем bool. Но чтобы и не гарантировал и не чистил - это как-то коряво, имхо.
Цитата
Более точно нам может ответить топикстартер, показав асмовский листинг своего творения.


Да, будем ждатьsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- tolik1   Непонятное значение   Jul 24 2009, 08:33
- - Rst7   ЦитатаПеременная не инициализирована... Проинициа...   Jul 24 2009, 08:41
- - AHTOXA   Сдаётся мне, надо написать xil_printf("LoadLa...   Jul 24 2009, 09:40
- - Rst7   ЦитатаСдаётся мне, надо написать Это компилятор с...   Jul 24 2009, 09:44
|- - AHTOXA   Цитата(Rst7 @ Jul 24 2009, 15:44) Это ком...   Jul 24 2009, 10:02
- - Rst7   ЦитатаДля printf - нет. Во-первых, будет приведен...   Jul 24 2009, 10:05
|- - AHTOXA   Цитата(Rst7 @ Jul 24 2009, 16:05) И в дан...   Jul 24 2009, 10:15
- - Rst7   ЦитатаВы хотите сказать, что при вызове LoadLastBy...   Jul 24 2009, 10:32
|- - AHTOXA   Цитата(Rst7 @ Jul 24 2009, 16:32) Неа. Он...   Jul 24 2009, 11:16
|- - scifi   Цитата(AHTOXA @ Jul 24 2009, 15:16) При к...   Jul 24 2009, 12:54
|- - AHTOXA   Цитата(scifi @ Jul 24 2009, 18:54) А я ду...   Jul 24 2009, 13:31
- - alx2   Цитата(tolik1 @ Jul 24 2009, 13:33) Xuint...   Jul 24 2009, 10:41
- - Rst7   ЦитатаУ меня есть под арм (cortex-m3): ... Гнусь т...   Jul 24 2009, 12:43
- - Rst7   ЦитатаКому это надо? Тому разгильдяю, который не х...   Jul 24 2009, 12:59
- - Rst7   ЦитатаКстати, подход IAR-а не всегда выиграет. По ...   Jul 24 2009, 13:36
|- - AHTOXA   Цитата(Rst7 @ Jul 24 2009, 19:36) При зап...   Jul 24 2009, 13:52
|- - _Pasha   Цитата(AHTOXA @ Jul 24 2009, 16:52) когда...   Jul 24 2009, 23:33
|- - AHTOXA   Цитата(_Pasha @ Jul 25 2009, 05:33) Дык и...   Jul 25 2009, 05:32
- - Rst7   ЦитатаЛишь на тех архитектурах, где есть побайтовы...   Jul 25 2009, 18:16


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 16:33
Рейтинг@Mail.ru


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