... для "хитрых" данных лучше ИМХО использовать структурыuk8amk писал(а):Возможно ли как-то организовать массив указателей на строки во FLASH и как это правильно сделать?
Вопросы по С/С++ (СИ)
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
- Реклама
ChipKiller,
Да, пожалуй вы правы. Переделаю код под массив структур.
Вбил в CVAVR(т.к. первым под руку попался) такой код:
Компилятор вроде проглатил и не поругался. Попробую теперь перетащить на кейл.
Да, пожалуй вы правы. Переделаю код под массив структур.
Вбил в 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 };Эти строки будут в оперативной памяти место отъедать, Нужно прописать что это именно флеш константа
для CV
Для студии и winavr
В кейл не знаю, столько комиляторов развелось...
для CV
Код: Выделить всё
flash char str_ok[]="OK";Код: Выделить всё
Запись
PROGMEM unsigned char Num_codes[10]="OK";
//чтение
display[1]=pgm_read_byte_near(&Num_codes[res]);//тут RES это любое число в пределах размера массива.
//либо через указатель вместо &Num_codes[res]
В поисках истины человек развивается.
- Сообщения: 5
- Зарегистрирован: Вс июн 10, 2012 17:50:32
Код: Выделить всё
movlw 1<<SPI2X
iorwf SPSR, fА люди посмотрят и скажут: "Собаки летят. Вот и осень."
- Реклама
- Сообщения: 5
- Зарегистрирован: Вс июн 10, 2012 17:50:32
атмега48, этот код не работает. unknown command. работаю в avr studio 4uldemir писал(а):Про какой микроконтроллер, вообще-то, речь шла?Код: Выделить всё
movlw 1<<SPI2X iorwf SPSR, f
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
... любой С-компилятор может создавать файл листинга и *.asm файл. Можно например такgyparr писал(а):помогите конвертнуть код из си в асм: SPSR | = (1<<SPI2X);
Код: Выделить всё
in r16,SPSR
ori r16,(1<<SPI2X)
out SPSR,r16Ну еще бы!gyparr писал(а): этот код не работает. unknown command.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
- Сообщения: 5
- Зарегистрирован: Вс июн 10, 2012 17:50:32
Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!ChipKiller писал(а):... любой С-компилятор может создавать файл листинга и *.asm файл. Можно например такgyparr писал(а):помогите конвертнуть код из си в асм: SPSR | = (1<<SPI2X);вместо r16 можно использовать r17..r31Код: Выделить всё
in r16,SPSR ori r16,(1<<SPI2X) out SPSR,r16
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
... не пользуюсь ни AVRStudio, ни WinAVR. Cмотрите справку по ключам компиляции ( .. или гуглите фразу "генерация листинга в WinAVR")gyparr писал(а):подскажите как создать этот файлик
Вот так: А насколько благодарен?gyparr писал(а): Я не нашел такой штуки в авр студии, в кодевижн видел, но на данный момент квавр нету.. Если подскажите как создать этот файлик, буду очень благодарен!
$$$$$
В поисках истины человек развивается.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Добрый вечер... Подскажите пожалуйста, правильно ли производится опрос PC0 у Atmega8?
У меня ато работает только если ставлю 0х00, а мне надо опознавать высокий, а не низкий уровень.....
Код: Выделить всё
if ((PINC&0b00000001) == 0xff){ start = 1;}Код: Выделить всё
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
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
А просто написать нельзя?
Код: Выделить всё
if(PINC.0==0)...[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Слишком просто
и ему там нужна была единица. Т.е. просто будет так:
Ну и это же фишка CV, поэтому с точки зрения переносимости между компиляторами...... (тут много букв и демагогии).
Код: Выделить всё
if(PINC.0==1)...Чего-то не могу догнать, как оно будет работать?hybroid писал(а):Код: Выделить всё
if ((PINC&0b00000001) != 0xff){ start = 1;} // единица
Ведь 0xFF != 0x01 && 0xFF != 0x00
I am DX168B and this is my favourite forum on internet!
Хм. Не будет оно работать.
Изначально в голове else if крутился после первого if'а, вот и получилось то, что получилось.
А, ну теперь понятно.
А такая запись будет верна?
А такая запись будет верна?
Код: Выделить всё
if((PINC&(1<<PC0)) == 0x01){a=1;}
I am DX168B and this is my favourite forum on internet!
Будет, но только если PC0 = 0.


