Страница 96 из 386

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

Добавлено: Вс июн 10, 2012 21:00:13
ChipKiller
uk8amk писал(а):Возможно ли как-то организовать массив указателей на строки во FLASH и как это правильно сделать?
... для "хитрых" данных лучше ИМХО использовать структуры

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

Добавлено: Пн июн 11, 2012 17:47:19
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 };
Компилятор вроде проглатил и не поругался. Попробую теперь перетащить на кейл.

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

Добавлено: Пн июн 11, 2012 18:51:40
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]
В кейл не знаю, столько комиляторов развелось...

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

Добавлено: Вт июн 12, 2012 11:01:13
gyparr
помогите конвертнуть код из си в асм:
SPSR | = (1<<SPI2X);

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

Добавлено: Вт июн 12, 2012 11:12:48
uldemir

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

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

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

Добавлено: Вт июн 12, 2012 11:18:09
gyparr
uldemir писал(а):

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

    movlw    1<<SPI2X
    iorwf      SPSR, f
Про какой микроконтроллер, вообще-то, речь шла?
атмега48, этот код не работает. unknown command. работаю в avr studio 4

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

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

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

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

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

Добавлено: Вт июн 12, 2012 11:35:18
uldemir
gyparr писал(а): этот код не работает. unknown command.
Ну еще бы! :))

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

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

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

in r16,SPSR
ori r16,(1<<SPI2X)
out SPSR,r16
вместо r16 можно использовать r17..r31
Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!

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

Добавлено: Вт июн 12, 2012 12:57:37
ChipKiller
gyparr писал(а):подскажите как создать этот файлик
... не пользуюсь ни AVRStudio, ни WinAVR. Cмотрите справку по ключам компиляции ( .. или гуглите фразу "генерация листинга в WinAVR")

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

Добавлено: Вт июн 12, 2012 17:02:11
vitalik_1984
gyparr писал(а): Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!
Вот так:
Lss_files.GIF
(101.02 КБ) 264 скачивания
А насколько благодарен?
$$$$$ :love: $$$$$$

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

Добавлено: Сб июн 16, 2012 18:51:31
isx
Добрый вечер... Подскажите пожалуйста, правильно ли производится опрос PC0 у Atmega8?

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

 if ((PINC&0b00000001) == 0xff){   start = 1;}
У меня ато работает только если ставлю 0х00, а мне надо опознавать высокий, а не низкий уровень.....

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

Добавлено: Сб июн 16, 2012 19:06:27
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

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

Добавлено: Сб июн 16, 2012 19:19:51
isx
Спасибо огромное)) Дошло наконец-то. Никак от градуировки не отойду :)

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

Добавлено: Сб июн 16, 2012 19:24:07
Gudd-Head
А просто написать

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

if(PINC.0==0)...
нельзя?

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

Добавлено: Сб июн 16, 2012 19:34:24
hybroid
Слишком просто :)) и ему там нужна была единица. Т.е. просто будет так:

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

if(PINC.0==1)...
Ну и это же фишка CV, поэтому с точки зрения переносимости между компиляторами...... (тут много букв и демагогии).

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

Добавлено: Сб июн 16, 2012 21:41:43
DX168B
hybroid писал(а):

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

if ((PINC&0b00000001) != 0xff){   start = 1;} // единица
Чего-то не могу догнать, как оно будет работать?
Ведь 0xFF != 0x01 && 0xFF != 0x00

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

Добавлено: Сб июн 16, 2012 21:44:17
hybroid
Хм. Не будет оно работать. :)) Изначально в голове else if крутился после первого if'а, вот и получилось то, что получилось.

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

Добавлено: Сб июн 16, 2012 21:47:59
DX168B
А, ну теперь понятно. :)
А такая запись будет верна?

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

if((PINC&(1<<PC0)) == 0x01){a=1;}

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

Добавлено: Сб июн 16, 2012 21:50:51
Аlex
Будет, но только если PC0 = 0.