реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Запутался с указателями и строками в CodeVision
defunct
сообщение Feb 1 2008, 12:19
Сообщение #16


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Kuzmi4 @ Feb 1 2008, 15:09) *
2 defunct - стоп:
1) "...Если variable - массив, тогда что variable и &variable равны...."
2) "...Даже без студии - один из вариантов компилиться не будет. Еслим будет - компилятор на свалку. ..."
Всмысле - как это понимать ? Вроде одно противоречит другому.....

тип будет разным, а значение одинаковое. i.e.:

(char *)p1 = (char *)0x100;
(void *)p2 =(void *)0x100;

(unsigned)p1 == (unsigned)p2

Цитата(Зверюга @ Feb 1 2008, 09:20) *
Господа, вывод на LCD работает. СТроки из flash выводятся без проблем.

Тогда сделать так:
1. Увеличить размер стека - сделать его ~256 - 512 байт (лучше больше) и чем больше тем лучше.
2. временные буферы типа вашего buffer ложить в стеке (внутри функций которые будут печатать) и делать их разумного размера не 4 байта, а напр 64 или 128:

Код
void test(int var)
{
     U8 buffer[128];

     sprintf( buffer, "Var = %d\r\n", var);
     lcd_str_ram( ..., ..., buffer, ..., ...);
}


....
test( 555 );


Память занятая таким буфером будет освобождаться автоматически, на выходе из функции.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Feb 1 2008, 12:36
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 defunct - я на счёт

(char *)p1 = (char *)0x100;
(void *)p2 =(void *)0x100;

(unsigned)p1 == (unsigned)p2

совсем не спорю - на мой взгляд тут всё правильно.
Просто я считаю что замена &variable при конструкции кода

void func (unsigned char*p2data)
{
unsigned char i;
for (i=0;i<10;i++) put_char(*p2data++);

}

на variable - не есть правильно, даже наоборот...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2008, 12:47
Сообщение #18


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Kuzmi4 @ Feb 1 2008, 15:36) *
Просто я считаю что замена &variable при конструкции кода

void func (unsigned char*p2data)
{
unsigned char i;
for (i=0;i<10;i++) put_char(*p2data++);

}
на variable - не есть правильно, даже наоборот...

Теперь уже я вас не понял smile.gif
там же ж в оригинале передается массив, а массив - это указатель на первый элемент.
это будет правильный вариант:

Код
char buffer [4];
func( buffer );


но, можно еще и так
Код
func( (char *)&buffer );
и
func( &buffer[0] );


что даст одинаковый результат, так вот я говорю что такой вариант:

func( (char *)&buffer ); --- самый неудачный, и так лучше никогда не делать!!
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Feb 1 2008, 12:56
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 defunct - ладно, как доберусь к винавру с студией - обязательно посмотрю на эти варианты.
Но я считаю, что

func( buffer );

работать не будет как надо, если buffer [] - это просто массив байт типа {0х11,0x12...}....
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2008, 13:02
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Ок, доберетесь - отпишите.
Go to the top of the page
 
+Quote Post
BelTech
сообщение Feb 1 2008, 19:00
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 8-12-06
Пользователь №: 23 269



2 зверюга
ты вариант от bzx пробовал? у меня вроде такой метод вывода чисел из ram работал, давно писал, уже не помню, пока всё это закинул
P.S. я не профи в написании кода, так что возможны некоторые косячки и недоработки,но вывод переменной из ram точно работал
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Feb 1 2008, 22:36
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 defunct - пробовал специально

func( buffer );

действительно заработало.

Обратился к товарисчам кто знает сях поболее чем я - оказалось что так и должно было сработать - там какие то мутки с именами - на сколькоя понял - это типа ссылка на указатель и всё и должно было сработать(если обшибся - простите - не силён я в сях), но как для меня - тыкнули в книжечку - прочитал - действительно &variable и variable - должны были сработать одинаково в этом случае - так что простите что ввёл в заблуждение, как дочитаю книжку до конца и вникну всё таки в суть - обязательно отпишу, так сказать для будущих поколений, чтоб не возникало таких вопросов...
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Feb 2 2008, 06:15
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



BelTech
Цитата
давно писал, уже не помню, пока всё это закинул


А собственно вашу библиотеку и мучаю.
Уважаемый! Вы автор! Вы человек, у которого вроде все работало!
А ну-ка, фигурально выражаясь, отвечайте за базар )))
В отличие от многих вы по крайней мере можете откопать проекти проверить.

P.S. кстати, в вашей библиотеке в начале есть назначение пинов микроконтроллера. Видимо для того, чтобы использовать различные контроллеры при необходимости. А вот в теле asm-функций у вас CS и RS указаны явно - к ним обращение идет через sbi 0x18,0 и sbi 0x18,7. Я из-за этого полгода назад забросил эту библиотеку - так и не смог запустить. Исправили бы, а то народ качает вашу библиотеку.
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Feb 2 2008, 16:09
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Короче, вот это работает:

Цитата
char flash *str;
----------

str="yohany babai";
sprintf(s,"%p",str );
ram_to_lcd(65,75,s,f8x14,0,black);


И вот это работает:

Цитата
variable=200;
sprintf(s,"%i",variable );
ram_to_lcd(65,75,s,f8x14,0,black);
;

Мне только непонятно, зачем нужна функция Lcd_str_ram?

По идее, то что я написал во втором работающем варианте и есть функция lcd_str_ram, но, может я и ошибаюсь она коряво написана.
А ram_to_lcd работает нормально.
Go to the top of the page
 
+Quote Post
BelTech
сообщение Feb 2 2008, 16:50
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 8-12-06
Пользователь №: 23 269



зачем нужна функция Lcd_str_ram
Я хотел её запихнкуть в функцию ram_to_lcd, но тоже запутался в указателях , и решил пока оставить как есть. Если додумаешься как сделать лучше, то я и сам заменю в своём коде, но я же говорил, что я начинающий, а не профи, так что могут быть косячки. Так если вывод переменной и текста на lcd у тебя работает, то что ещё надо?




Насчёт пинов , asm ,как я помню, только в функции lcd_clr? для быстрой очистки дисплея, но её можно переписать на си, а можно просто использовать закрашенный прямоугольник,т.е. lcd_fillrect с белым цветом.

только что посмотрел вместо очистки можно использовать следующее
void fill_screen(ui16 color)
{
ui16 i=0;
lcd_wrcmd16(0xEF90);
lcd_wrcmd16(0x0500);
lcd_wrcmd16(0x0600);
lcd_wrcmd16(0x0700);

for (i=0; i<DISP_W*DISP_H; i++)lcd_wrdat16(color);
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Feb 2 2008, 17:07
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



BelTech
кстати, какова скорость, fps?
У меня что-то долго закрашенный прямоугольник рисуется - из твоего примера. Где-то 0,5-0,6 сек.

SPI самый быстрый:

SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0);
SPSR = (1<<SPI2X);

И, кстати - включение выключение SPI2X не влияет на скорость отрисовки.... Может что-то не так? У меня Mega32 на 16 МГц
Go to the top of the page
 
+Quote Post
BelTech
сообщение Feb 2 2008, 17:18
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 8-12-06
Пользователь №: 23 269



да, закрашенный прямоугольник на глаз долго рисуется, а когда на экране на белом фоне цифры, а затем очищаете экран, и выводишь новые , вроде не так заметно, можно сказать не заметно совсем.
А как измерить fps? А на счёт spi2x пока не знаю, сейчас ради интереса достану плату, перепрошью и посмотрю.
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Feb 2 2008, 17:32
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



И вот еще что... у немцев есть библиотека glcd - на сайте superkranz. Видели? Там есть программа для рисования шрифтов, в которой каждый пиксел шрифа можно обозначить определенным цветом. То есть можно делать шрифты - картинки. Плюс очень удобный редактор. Вот только функция вывода символов на экран другая совсем. есть мысль адаптировать ее для твоей библитеки. Да и написать функцию вывода картинки на экран.
Go to the top of the page
 
+Quote Post
BelTech
сообщение Feb 2 2008, 17:49
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 8-12-06
Пользователь №: 23 269



только что, убирал spi2x , странно, скорость отрисовки не меняется, даже сам не знаю в чём дело,
lcd_clr на asme работает быстрее, чем lcd_fillrect на си. В сторону шрифтов я не копал особо(хватает иуже имеющихся), а вот ф-ия вывода картинки гле-то у меня есть.Точно знаю что иконки выводятся.
У тебя какая библиотека, там рисование иконок есть или нет? Если хочешь дам последнии рукотворения.
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Feb 2 2008, 18:05
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Нет. Ну выложи с иконками.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 12:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016