Нескольно простых вопросов о программировании AVR на Си.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
потрудитесь объяснить, как именно не работает. что вы ожидаете получить и что получаете на самом деле?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Нескольно простых вопросов о программировании AVR на Си.
dm211 писал(а):Почему у меня не работает это?-![]()
Код: Выделить всё
flash int x[4]={100,150,200,250}; k=sizeof (x);
А компилятор какой?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Судя по flash, похоже на CodeVision.
Re: Нескольно простых вопросов о программировании AVR на Си.
Да, CV, и не могу получить количество цифр или символов массива.
Re: Нескольно простых вопросов о программировании AVR на Си.
Я хочу получить 4, а получаю-0ARV писал(а):потрудитесь объяснить, как именно не работает. что вы ожидаете получить и что получаете на самом деле?
- Реклама
Re: Нескольно простых вопросов о программировании AVR на Си.
sizeof показывает размер объекта в байтах - т.е. в вашем случае размер массива будет равен sizeof(int) * 4.dm211 писал(а):... не могу получить количество цифр или символов массива.
Для получения размера в "попугаях" классика рекомендует так:
sizeof(x) / sizeof(x[0])
либо вариант для эстетов:
sizeof(x) / sizeof(*x)
Сермяжные практики, пошуршав по системным™ хидерам, находят тот или иной вариант countof, но чаще не найдя оного определяют его локально примерно так:
#define countof(__a) (sizeof(__a) / sizeof(*(__a)))
т.е. применительно для вашего случая использование будет выглядеть так:
k = countof(x);
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Re: Нескольно простых вопросов о программировании AVR на Си.
Для эстетов более годный.
Вот только вряд ли это ему поможет, судя по flash.
Вот только вряд ли это ему поможет, судя по flash.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Да, есть мнение, что flash в CodeVision "портит" sizeof.
Интересно было бы узнать у автора вопроса, что происходит, если это не flash, а обычный массив. Там работает?
В avr-gcc, кстати, такое у меня вполне корректно отрабатывает:
Здесь PROGMEM не непонятно что, а вполне обычный макрос (pgmspace.h):
#define PROGMEM __ATTR_PROGMEM__,
в свою очередь
#define __ATTR_PROGMEM__ __attribute__((__progmem__))
Интересно было бы узнать у автора вопроса, что происходит, если это не flash, а обычный массив. Там работает?
В avr-gcc, кстати, такое у меня вполне корректно отрабатывает:
Код: Выделить всё
static const uint8_t alarmSym[] PROGMEM = {
/* Empty rectangle */
0b11111,
0b00000,
0b00000,
// ... много других байтов (кстати, зачем у автора вопроса там int в аналогичном случае?)
0b00000,
};
for (i = 0; i < sizeof(alarmSym); i++)
ks0066WriteData(pgm_read_byte(&alarmSym[i]));#define PROGMEM __ATTR_PROGMEM__,
в свою очередь
#define __ATTR_PROGMEM__ __attribute__((__progmem__))
Re: Нескольно простых вопросов о программировании AVR на Си.
Недавно британские учёные доказали, что CV портит ДНК людей. После длительного воздействия CV на человека - его можно не спасти, он становится дельфином.
Единственный выход - быстрейшее избавление от патогена.
Единственный выход - быстрейшее избавление от патогена.
Re: Нескольно простых вопросов о программировании AVR на Си.
без flash тоже не работает-пробовал. Почему int ?-потому что там цифры 
Re: Нескольно простых вопросов о программировании AVR на Си.
Cогласно "классике" sizeof x и sizeof( x ) - это разные вещи. sizeof( x ) для массива вернёт размер указателя, чем массив собственно и является, а sizeof x - уже размер массива 'x' в байтах, да и то, если это было определено на этапе компиляции.Siarzhuk писал(а):sizeof показывает размер объекта в байтах - т.е. в вашем случае размер массива будет равен sizeof(int) * 4....
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Все они меньше 256, поэтому можно было бы unsigned char обойтись.dm211 писал(а):Почему int ?-потому что там цифры
Re: Нескольно простых вопросов о программировании AVR на Си.
С unsigned char работаетWiseLord писал(а):Все они меньше 256, поэтому можно было бы unsigned char обойтись.dm211 писал(а):Почему int ?-потому что там цифры
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
будьте любезны ссылочку на эту классику - хотелось бы приобщиться к знаниям.shindax писал(а):Cогласно "классике" sizeof x и sizeof( x ) - это разные вещи. sizeof( x ) для массива вернёт размер указателя, чем массив собственно и является, а sizeof x - уже размер массива 'x' в байтах, да и то, если это было определено на этапе компиляции.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
CodeVision такой CodeVision...dm211 писал(а):С unsigned char работает![]()
2 shindax: вот, почитайте, одни из первых гуглящихся результатов по sizeof.
Re: Нескольно простых вопросов о программировании AVR на Си.
Как так запретили?shindax писал(а):С некоторых пор, стандарт Си сильно поменяли, как там теперь стало, читать надо. По крайней мере появился запрет на арифметику с указателями.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Нескольно простых вопросов о программировании AVR на Си.
Однажды читал на одном из форумов, что CV не умеет sizeof. Проверял примеры, иллюстрирующие его "работу", на своем экземпляре - действительно не работает. Правда, не во всех версиях.dm211 писал(а):Да, CV, и не могу получить количество цифр или символов массива.
P.S. Только не подумайте, что я им пользовался - содержал исключительно ради помощи страждущим.
P.P.S.
Rtmip, Вы еще здесь? Как Вам эта прэлесть с sizeof'ом?Rtmip писал(а):А еще более подробно можете написать, чтобы не читать по 100 страниц форума военного?
Я про то, какие еще "не все его недостатки"(CVAVR) и в чем именно не реализует стандарт?
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Подскажите пожалуйста.
При объявлении в cpp-шном проекте в Atmel Studio 6.2
получаю warning:
В чём ошибка?
При объявлении в cpp-шном проекте в Atmel Studio 6.2
Код: Выделить всё
#define FIFO( size )\
struct {\
unsigned char buf[size];\
unsigned char tail;\
unsigned char head;\
}
FIFO(128) fifo;
Код: Выделить всё
anonymous type with no linkage used to declare variable '<anonymous struct> fifo' with linkage [enabled by default]
Никакая контра не уйдёт от нас
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Анонимная структура. Попробуйте дать ей какое-нибудь имя - поменять на struct fifo_t {, а дальше как есть.
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Большое спасибо, warning пропал 
Никакая контра не уйдёт от нас


