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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Переменные long long
inventor
сообщение Sep 3 2015, 12:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Как правильно использовать в IAR ?
Процессор Texas Instruments CC3200
Хочу присвоить переменной время в наносекундах или микросекундах
пишется какая то лажа - printf ничего не выводит, хотя пытаюсь и %lld и %Ld
компилятор C99 и вроде должен поддерживать все эти вещи
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 3 2015, 13:32
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(inventor @ Sep 3 2015, 15:50) *
компилятор C99 и вроде должен поддерживать все эти вещи


б-р-р, это вообще не причем.
Что стоит в General Options->LibraryOptions->Printf formatter ?


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
inventor
сообщение Sep 3 2015, 13:55
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(megajohn @ Sep 3 2015, 16:32) *
б-р-р, это вообще не причем.
Что стоит в General Options->LibraryOptions->Printf formatter ?

ставил и normal и full - ничего не помогает
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 3 2015, 15:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Sep 3 2015, 16:55) *
ставил и normal и full - ничего не помогает

1) Какая версия IAR?
2) У IAR несколько библиотек так-что нужно выбрать нужную Вашем случае Full, но кроме этого есть еще отдельные настройки полноты формата printf() - там тоже чего-нибудь типа Full
3) "пишется какая то лажа - printf ничего не выводит" - лажа и ничего, все-же разные вещи.
4) Есть докуменация на конкретный тип контрорллера+компилятора - там есть информация, что поддерживавется, что нет и в каких вариантах библиотек.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Sep 4 2015, 07:28
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(zltigo @ Sep 3 2015, 18:53) *
1) Какая версия IAR?
2) У IAR несколько библиотек так-что нужно выбрать нужную Вашем случае Full, но кроме этого есть еще отдельные настройки полноты формата printf() - там тоже чего-нибудь типа Full
3) "пишется какая то лажа - printf ничего не выводит" - лажа и ничего, все-же разные вещи.
4) Есть докуменация на конкретный тип контрорллера+компилятора - там есть информация, что поддерживавется, что нет и в каких вариантах библиотек.

с библиотеками возица не стал - просто разбил длинное число на 2 u32 и вывожу
в 16-тиричном виде.
компилятор работает - заполняет переменные правильно.
Go to the top of the page
 
+Quote Post
yes
сообщение Sep 4 2015, 11:54
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(inventor @ Sep 4 2015, 10:28) *
компилятор работает - заполняет переменные правильно.


дело не в компиляторе, а в том, какую версию pfintf из библиотеки он берет (точнее - что за библиотека) - то есть, насколько сложный "парсер" строки формата (то есть размер кода, который разбирает "%4.2f %+.0e %E" ) в этой функции реализован

в микрокотроллере памяти мало и полный формат, как в ман-е написано не всегда поддерживается


Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 4 2015, 12:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(yes @ Sep 4 2015, 14:54) *
в микрокотроллере памяти мало и полный формат, как в ман-е написано не всегда поддерживается


сколько не смотрел код сгенерированный ИАРом, то всегда было одно:
SP минус число ( в зависимости от версии FULL LARGE etc ) а потом переход на реализацию принтфа. Никаких проверок "много памяти, мало памяти" чойта не видел.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 4 2015, 12:26
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (megajohn @ Sep 4 2015, 15:12) *
сколько не смотрел код сгенерированный ИАРом, то всегда было одно:
SP минус число ( в зависимости от версии FULL LARGE etc ) а потом переход на реализацию принтфа. Никаких проверок "много памяти, мало памяти" чойта не видел.

sm.gif sm.gif sm.gif Это линкер проверит sad.gif. Полная IAR библиотека совершенно невразумительного количества памяти требует - буквально килобайты. Тупо не влезает. В мелкие контроллеры даже принципиально не лезет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
yes
сообщение Sep 4 2015, 15:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(megajohn @ Sep 4 2015, 15:12) *
сколько не смотрел код сгенерированный ИАРом, то всегда было одно:
SP минус число ( в зависимости от версии FULL LARGE etc ) а потом переход на реализацию принтфа. Никаких проверок "много памяти, мало памяти" чойта не видел.

речь про экономию памяти для кода

Go to the top of the page
 
+Quote Post
Tahoe
сообщение Sep 6 2015, 03:33
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(inventor @ Sep 3 2015, 15:50) *
пишется какая то лажа - printf ничего не выводит, хотя пытаюсь и %lld и %Ld
компилятор C99 и вроде должен поддерживать все эти вещи

Он и поддерживает. Должно быть так:
Код
long long    ll = 100500;
printf( "ll = %" PRIu64 "\n\r", ll );


Остальное по аналогии можно найти самостоятельно. См. например тут или тут.

И лучше отойти от всех этих неопределенных short, long и т.п. В Це99 существуют более внятные типы, вроде uint32_t, uint64_t, int64_t...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 6 2015, 07:04
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Tahoe @ Sep 6 2015, 06:33) *
Он и поддерживает. Должно быть так:

Находясь в твердом уме "так" писать не надо. Почему у Автора не получилсь - уже объяснили. По этой причине и использование макросов-оберток вместо явного описания формата ничего не изменит.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Sep 6 2015, 17:37
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(zltigo @ Sep 6 2015, 10:04) *
Находясь в твердом уме "так" писать не надо. Почему у Автора не получилсь - уже объяснили. По этой причине и использование макросов-оберток вместо явного описания формата ничего не изменит.

Прежде чем лезть умничать, неплохо бы проверить/почитать. В IAR, даже с "правильной" библиотекой, действительно могут не работать %lld и %Ld, при этом PRIu64 работает без проблем. За давностью времени, сейчас уже не помню, на каком из IAR с этим сталкивался, возможно ARM, возможно AVR. Но это факт.

Что у автора получилось - я видел. Костыль, да еще и кривой. Мой вариант - рабочий. Причем в отличии от ворчания отдельных граждан, проверено непосредственно в IAR. Почему "так" писать надо, следует из ссылки, что я дал.

Код
#include    <inttypes.h>
#include    <stdio.h>

int        main( void )
{
    long long                ll    =    0;
    uint64_t                u64    =    0;

    while( true )
    {
        printf( "ll = %" PRIu64 "\n", ll );
        printf( "u64 = %" PRIu64 "\n", u64 );

        u64        =    u64 ? u64 << 1 : 1;
        ll        =    ll ? ll << 1 : 1;
    }
}


Терминал:
Код
u64 = 144115188075855872
ll = 288230376151711744
u64 = 288230376151711744
ll = 576460752303423488
u64 = 576460752303423488
ll = 1152921504606846976
u64 = 1152921504606846976
ll = 2305843009213693952
u64 = 2305843009213693952
ll = 4611686018427387904
u64 = 4611686018427387904
ll = 9223372036854775808
u64 = 9223372036854775808
ll = 0
u64 = 0
ll = 1
u64 = 1
ll = 2
u64 = 2
ll = 4
u64 = 4
ll = 8
u64 = 8
ll = 16
u64 = 16
ll = 32
u64 = 32
ll = 64
u64 = 64
ll = 128
u64 = 128
ll = 256
u64 = 256
ll = 512
u64 = 512
ll = 1024
u64 = 1024
ll = 2048
u64 = 2048
ll = 4096
u64 = 4096
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 6 2015, 18:54
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Tahoe @ Sep 6 2015, 20:37) *
Прежде чем лезть умничать, неплохо бы проверить/почитать. В IAR, даже с "правильной" библиотекой, действительно могут не работать %lld и %Ld, при этом PRIu64 работает без проблем.

А то, что муть " PRIu64 " есть ни что иное, как макрос-обертка llu это никакой мыслью в Вас в голове не отозвалось?

CODE
#define __STRINGIFY(a) #a
#define __PRI64(x) __STRINGIFY(l##x)
#define PRIu64        __PRI64(u)

Так что "проверяй" не проверяй.

QUOTE
Но это факт.

Увы, но это бред sad.gif.
QUOTE
Мой вариант - рабочий. Причем в отличии от ворчания отдельных граждан, проверено непосредственно в IAR.

Не сочтите за труд выкинуть муть " PRIu64 " и написать llu и получите точно такой-же рабочий вариант.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Sep 6 2015, 19:09
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(zltigo @ Sep 6 2015, 21:54) *
Не сочтите за труд выкинуть муть " PRIu64 " и написать llu и получите точно такой-же рабочий вариант.

Вот на данной, конкретной версии EWARM? Вполне допускаю, что так оно и будет. Но это будет вариант "здесь играем, здесь не играем, здесь рыбу заворачивали"(с), в EWARM работает, в каком-нить EWAVR нет... Меня такой вариант не устраивает. Не хватало еще париться со всякой ерундой. Стандартная библиотека C99 предписывает использовать PRIxxx/SCNxxx? Значит их и буду использовать. Да, мне тоже не нравится и не привычно. Но меня никто не спрашивал.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 6 2015, 19:14
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Tahoe @ Sep 6 2015, 22:09) *
Значит их и буду использовать.

Пользуйте, если их уродство глаз не режет, только не надо фантазий о их чудодейственной силе.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:31
Рейтинг@Mail.ru


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