Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
Парни вы хоть немного поясняйте, а то совсем запутаюсь, что знчит ай, у меня пока не ай
Re: Вопросы по С/С++ (СИ)
shurikss123 писал(а):TCCR0 = ((1<<CS02) | (0<<CS01) | (0<<CS00)); Скобки не забывайте. а то ай яй яй!
чем же так важны скобки в данном месте?
Ратмир писал(а):Парни вы хоть немного поясняйте, а то совсем запутаюсь, что знчит ай, у меня пока не ай
коэффициент предделителя поменьше надо, чтобы частота индикации была побольше.
- shurikss123
- Грызет канифоль
- Сообщения: 271
- Зарегистрирован: Пн окт 25, 2010 20:47:04
- Откуда: Казахстан, Астана
Re: Вопросы по С/С++ (СИ)
lix писал(а):чем же так важны скобки в данном месте?
Не помню в какой книге но там так и сказано что может привести к ошибкам, поэтому наверное делаю так
Код: Выделить всё
//TCNT2=0xDC;
//OCR2A=0xF9;
//OCR2B=50;
//TCCR2A=((0<<COM2A0)|(0<<COM2A1)|(1<<COM2B0)|(1<<COM2B1)|(1<<WGM20)|(1<<WGM21));
//TCCR2B=((0<<FOC2A)|(1<<FOC2B)|(0<<WGM22)|(0<<CS22)|(1<<CS21)|(0<<CS20));
TIMSK0=((0<<OCIE0B)|(1<<OCIE0A)|(1<<TOIE0));//0x03;
ADCSRA=((1<<ADEN)|(0<<ADPS1)|(0<<ADPS0));
ADMUX=((0<<REFS1)|(1<<REFS0)|(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3));- apwork
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср май 11, 2011 12:24:54
- Откуда: Лисичанск
Re: Вопросы по С/С++ (СИ)
ну уж нет. со скобками здесь явно перебор. они конечно компилятору не помешают, но их избыток плохо влияет на читаемость кода!
Обрамляющие скобки рекомендуется лишь применять в макросах типа:
#define SOME_MAKROS(x) ((x) >> 4)
потому как не известно в каком месте он будет использован.
И не стоит переусердствовать со скобками, забывая о приоритетах операций.
Обрамляющие скобки рекомендуется лишь применять в макросах типа:
#define SOME_MAKROS(x) ((x) >> 4)
потому как не известно в каком месте он будет использован.
И не стоит переусердствовать со скобками, забывая о приоритетах операций.
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Помогите, пожалуйста.
Есть код:
IAR ругается на строчку "DRAWIMAGE(0, 0, atmel_w, atmel_h, &atmel[0]);"
Error[Pe167]: argument of type "char __flash *" is incompatible with parameter of type "char *"
В чём косяк?
Есть код:
Код: Выделить всё
__flash char atmel[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
.......}
void DRAWIMAGE(int x0, int y0, int x1, int y1,
char *data)
{
int i=0, j=0, k=0;
for(j=y0;j<y1;j++)
{
for(i=x1;i>x0;i--)
{
if ((*(char*)data[k])==0xFF) LCD_PUT_PIXEL(i,j);
k++;
}
}
}
void main(void)
{
.......
DRAWIMAGE(0, 0, atmel_w, atmel_h, &atmel[0]);
}
IAR ругается на строчку "DRAWIMAGE(0, 0, atmel_w, atmel_h, &atmel[0]);"
Error[Pe167]: argument of type "char __flash *" is incompatible with parameter of type "char *"
В чём косяк?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
в том и косяк, что функции нужен указатель на RAM, а вы ему подсовываете на FLASHLockdog писал(а):В чём косяк?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Я подозревал? 
А как выйти из этой ситуации? В RAM'е хранить не могу, там его 1 кб, а у меня один массив как раз этот кбайт и занимает
А как выйти из этой ситуации? В RAM'е хранить не могу, там его 1 кб, а у меня один массив как раз этот кбайт и занимает
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
void DRAWIMAGE(int x0, int y0, int x1, int y1,
__flash char *data)
{
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
avreal писал(а):void DRAWIMAGE(int x0, int y0, int x1, int y1,
__flash char *data)
{
Ну правильно __flash писать после char, но это всё равно не работает, хоть код и стал компилироваться, но на дисплй вообще ничего не выводится
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ну если Вы объясните
зачем прочитанный из массива байт data[k] Вы приводите к указателю на char в ОЗУ, берёте данные из ОЗУ по полученному адресу и только потом их сравниваете с 0xFF, то будем думать дальше.
Код: Выделить всё
if ((*(char*)data[k])==0xFF) LCD_PUT_PIXEL(i,j);Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
э........ да я тут смотрю - массив во флеш одним байтом кодирует пиксель! я прав? при таком раскладе не удивительно, что у вас ОЗУ не хватает
судя по всему вы выводите монохромную графику - значит, сам бог велел кодировать 1 пиксель одинм битом, тогда массив для того же самого изображения становится сразу в 8 раз меньше! может, тогда он и в ОЗУ влезет?
битва с дураками проиграна, победители торжествуют. слава победителям!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ратмир писал(а):Нет гасил вот так см.вл. все работает
Может проще текст копировать вместо картинок???
В поисках истины человек развивается.
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Сделал так:
Но теперь ругается линкер
У меня просто конвертёр из bmp2hex переводит в 8 бит, потому и был такой массив, но мне в любом случае нужно хранить всё во флэш, т.к там будет много картинок
Код: Выделить всё
int __flash atmel[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
.............................}
void DRAWIMAGE(int x0, int y0, int x1, int y1, int __flash *data)
{
int i=0, j=0, k=0;
int px;
for(j=y0;j<y1;j++)
{
for(i=x1;i>x0;i--)
{
px = *data++;
if (px==1) LCD_PUT_PIXEL(i,j);
}
}
}
.....................
DRAWIMAGE(0, 0, atmel_w, atmel_h, &atmel[0]);
Но теперь ругается линкер
Код: Выделить всё
Error[e16]: Segment NEAR_F (size: 0x4000 align: 0) is too long for segment definition. At least 0x54 more bytes needed. The problem occurred while
processing the segment placement command "-Z(CODE)NEAR_F=_..X_FLASH_BASE-_..X_FLASH_NEND", where at the moment of placement the
available memory ranges were "CODE:54-3fff"
Reserved ranges relevant to this placement:
CODE:54-3fff NEAR_F
У меня просто конвертёр из bmp2hex переводит в 8 бит, потому и был такой массив, но мне в любом случае нужно хранить всё во флэш, т.к там будет много картинок
Re: Вопросы по С/С++ (СИ)
не подходящий конвертер значит. нужен другой.
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ну конвертёр заточен под цветные дисплеи, да и суть не в нём. Мне главное саму идею вывода из флэша реализовать
Re: Вопросы по С/С++ (СИ)
когда каждый бит картинки будет представлен одним битом то вывод можно сделать так
Код: Выделить всё
mask=1;
for(по y)
for(по x)
{
if(*data &mask)
putpixel(x,y);
mask <<= 1;
if(mask==0)
{
mask=1;
data++;
}
}Re: Вопросы по С/С++ (СИ)
Да гранаты у него не той системы...
Lockdog, c NEAR_F разобрались?
Таблица atmel[] сколько занимает flash? А в контроллере сколько? mega16 какая-нибудь?
Lockdog, c NEAR_F разобрались?
Таблица atmel[] сколько занимает flash? А в контроллере сколько? mega16 какая-нибудь?
-
Lockdog
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Вт июл 15, 2008 19:29:21
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
asteroid7 писал(а):Lockdog, c NEAR_F разобрались?
Таблица atmel[] сколько занимает flash? А в контроллере сколько? mega16 какая-нибудь?
Я не знаю куда копать. Таблица занимает 1 Кб. В контроллере 16 - да, мега16
Re: Вопросы по С/С++ (СИ)
На программу не хватает около 100 байт.
Попробуйте включить оптимизатор по "size".
Alt+F7 -> C/C++Compiler -> Optimizations. Выбрать Low или, в крайнем случае, Medium.
При уровне High код может не заработать.
Попробуйте включить оптимизатор по "size".
Alt+F7 -> C/C++Compiler -> Optimizations. Выбрать Low или, в крайнем случае, Medium.
При уровне High код может не заработать.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
это очень хороший компилятор, если на высоком уровне оптимизации код не работаетasteroid7 писал(а):При уровне High код может не заработать.
битва с дураками проиграна, победители торжествуют. слава победителям!
