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

 
 
> вывод через printf переменной unsigned long int, printf
messenger
сообщение Jan 9 2013, 14:01
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Здравствуйте уважаемые пользователи форума!
Столкунлся с проблемой и прошу помощи.
Конроллер ATmega16? среда CVAVR

обявляю прерменную 32 бита
unsigned long int REG_0=0b0...........................................01 (32 бита)
вывожу через printf
printf("REG0= %u ",REG_0);

но явно пропадают первые два старших байта, не могу разобраться как быть.

и насколько правильно выделять из unsigned long int 4 байта типа unsigned char

bait_1=REG_0 & 0xFF;
bait_2=(REG_0>>=8) & 0xFF;
bait_3=(REG_0>>=8) & 0xFF;
bait_4=(REG_0>>=8) & 0xFF;

Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Misile_Inc
сообщение Feb 20 2013, 11:10
Сообщение #2


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

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



Всякие стандарты типа MISRA запрещают использование функций, в прототипах которых есть многоточие (elipsis).
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 20 2013, 11:16
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Misile_Inc @ Feb 20 2013, 13:10) *
Всякие стандарты типа MISRA запрещают использование функций, в прототипах которых есть многоточие (elipsis).
Тогда «плохой стиль с точки зрения мисры», а не «плохой стиль для embedded вообще».
Причина в том, что код с функцями с эллипсисом несколько труднее формально верифицировать, чем десять строк тупых itoa()/strlen()/put_spaces()/putstr(). Но в результате то, что можно написать одним вызовом printf, придётся писать несколькими строками вызовов разных функций и ещё неизвестно, где легче ошибку сделать как при начальном написании, так и при модификации.

А GCC, например, умеет сам ругаться на несоответствие количества и типов аргументов форматной строке printf (в духе «третий спецификатор для long, а туда сунули char*»). И даже про свою функцию lcd_printf(int x, int y, const char *fmt, ...) ему можно объяснить, каким аргументом идёт форматная строка и он проверит всё.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 13:18
Рейтинг@Mail.ru


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