Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

uk8amk писал(а):Возможно ли как-то организовать массив указателей на строки во FLASH и как это правильно сделать?
... для "хитрых" данных лучше ИМХО использовать структуры
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Вопросы по С/С++ (СИ)

Сообщение uk8amk »

ChipKiller,
Да, пожалуй вы правы. Переделаю код под массив структур.

Вбил в CVAVR(т.к. первым под руку попался) такой код:

Код: Выделить всё

const char str_ok[] = "OK";
const char str_err[] = "ERROR";
const char str_nocarr[] = "NOCARRIER";
const char str_busy[] = "BUSY";
const char str_connect[]="CONNECT";
const char str_ring[]="RING";
const char str_ndialtone[] = "NODIALTONE";
const char str_nanswer[] = "NOANSWER";
const char str_start[]="^SYSSTART";

const char* at_cmd_pattern[ 9 ] = { str_ok, str_err, str_nocarr, \
                                    str_busy, str_connect, str_ring, \
                                    str_ndialtone, str_nanswer,str_start };

Компилятор вроде проглатил и не поругался. Попробую теперь перетащить на кейл.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

Эти строки будут в оперативной памяти место отъедать, Нужно прописать что это именно флеш константа
для CV

Код: Выделить всё

 flash char str_ok[]="OK";

Для студии и winavr

Код: Выделить всё

Запись
PROGMEM unsigned char Num_codes[10]="OK";
//чтение
display[1]=pgm_read_byte_near(&Num_codes[res]);//тут RES это любое число в пределах размера массива.
//либо через указатель вместо &Num_codes[res]

В кейл не знаю, столько комиляторов развелось...
В поисках истины человек развивается.
gyparr
Родился
Сообщения: 5
Зарегистрирован: Вс июн 10, 2012 17:50:32

Re: Вопросы по С/С++ (СИ)

Сообщение gyparr »

помогите конвертнуть код из си в асм:
SPSR | = (1<<SPI2X);
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Вопросы по С/С++ (СИ)

Сообщение uldemir »

Код: Выделить всё

    movlw    1<<SPI2X
    iorwf      SPSR, f
Про какой микроконтроллер, вообще-то, речь шла?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
gyparr
Родился
Сообщения: 5
Зарегистрирован: Вс июн 10, 2012 17:50:32

Re: Вопросы по С/С++ (СИ)

Сообщение gyparr »

uldemir писал(а):

Код: Выделить всё

    movlw    1<<SPI2X
    iorwf      SPSR, f
Про какой микроконтроллер, вообще-то, речь шла?

атмега48, этот код не работает. unknown command. работаю в avr studio 4
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

gyparr писал(а):помогите конвертнуть код из си в асм: SPSR | = (1<<SPI2X);
... любой С-компилятор может создавать файл листинга и *.asm файл. Можно например так

Код: Выделить всё

in r16,SPSR
ori r16,(1<<SPI2X)
out SPSR,r16
вместо r16 можно использовать r17..r31
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Вопросы по С/С++ (СИ)

Сообщение uldemir »

gyparr писал(а): этот код не работает. unknown command.
Ну еще бы! :))
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
gyparr
Родился
Сообщения: 5
Зарегистрирован: Вс июн 10, 2012 17:50:32

Re: Вопросы по С/С++ (СИ)

Сообщение gyparr »

ChipKiller писал(а):
gyparr писал(а):помогите конвертнуть код из си в асм: SPSR | = (1<<SPI2X);
... любой С-компилятор может создавать файл листинга и *.asm файл. Можно например так

Код: Выделить всё

in r16,SPSR
ori r16,(1<<SPI2X)
out SPSR,r16
вместо r16 можно использовать r17..r31

Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

gyparr писал(а):подскажите как создать этот файлик
... не пользуюсь ни AVRStudio, ни WinAVR. Cмотрите справку по ключам компиляции ( .. или гуглите фразу "генерация листинга в WinAVR")
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

gyparr писал(а):Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!

Вот так:
Lss_files.GIF
(101.02 КБ) 258 скачиваний

А насколько благодарен?
$$$$$ :love: $$$$$$
В поисках истины человек развивается.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Добрый вечер... Подскажите пожалуйста, правильно ли производится опрос PC0 у Atmega8?

Код: Выделить всё

 if ((PINC&0b00000001) == 0xff){   start = 1;}


У меня ато работает только если ставлю 0х00, а мне надо опознавать высокий, а не низкий уровень.....
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Вопросы по С/С++ (СИ)

Сообщение hybroid »

Код: Выделить всё

if ((PINC&0b00000001) == 0x00){   start = 0; } // ноль
if ((PINC&0b00000001) != 0xff){   start = 1;} // единица
if ((PINC&0b00000001) == 0x01){   start = 1;} // единица
if ((PINC&0b00000001) == 0b00000001){   start = 1;} // единица
if ((PINC&0b00000001) == 1){   start = 1;} // единица


Тут посмотрите на побитовое И.
http://ru.wikipedia.org/wiki/%D0%91%D0% ... 0%B8%D0%B8
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Спасибо огромное)) Дошло наконец-то. Никак от градуировки не отойду :)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Вопросы по С/С++ (СИ)

Сообщение Gudd-Head »

А просто написать

Код: Выделить всё

if(PINC.0==0)...
нельзя?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Вопросы по С/С++ (СИ)

Сообщение hybroid »

Слишком просто :)) и ему там нужна была единица. Т.е. просто будет так:

Код: Выделить всё

if(PINC.0==1)...

Ну и это же фишка CV, поэтому с точки зрения переносимости между компиляторами...... (тут много букв и демагогии).
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

hybroid писал(а):

Код: Выделить всё

if ((PINC&0b00000001) != 0xff){   start = 1;} // единица


Чего-то не могу догнать, как оно будет работать?
Ведь 0xFF != 0x01 && 0xFF != 0x00
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Вопросы по С/С++ (СИ)

Сообщение hybroid »

Хм. Не будет оно работать. :)) Изначально в голове else if крутился после первого if'а, вот и получилось то, что получилось.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

А, ну теперь понятно. :)
А такая запись будет верна?

Код: Выделить всё

if((PINC&(1<<PC0)) == 0x01){a=1;}
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Будет, но только если PC0 = 0.
Ответить

Вернуться в «Разные вопросы по МК»