Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVR: обрезает строку 
:(
    Опции темы
nerezus
  Дата 30.11.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Код


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mega8.h>
#include <delay.h>

#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

void main(void) {

    char *buff;
    char *message = "Preved medved!!!";
    int symbols = 16;

    PORTB=0x00;
    DDRB=0x00;


    buff = (char*) malloc((symbols  + 1) * sizeof(char));

    lcd_init(symbols);
    while (1) {
        strcpy(buff, "");
        strcat(buff, message);
        lcd_gotoxy(0, 0);
        lcd_puts(buff);
        delay_ms(200);
    }
}



Контроллер ATmega8, LCD LM020L.
Выводит только Prev. Как вывести полную фразу?



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
17dufa
Дата 30.11.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



nerezus, 
1. документация на lcd_puts никаких дополнительных телодвижений не описывает (какой-нить флаг выставить, какую-нить доп функцию вызвать)?
2. под отладчиком гонять пробовали? что лежит в buff в момент вызова lcd_puts?
PM MAIL   Вверх
nerezus
Дата 30.11.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Не умею отлаживать.

Опытным путем нашел проблему:

Код

char *buff;
buff = (char*) malloc((symbols  + 1) * sizeof(char));
 при замене на
Код

char buff[17];
 работает.

Но как юзать malloc?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
UniBomb
Дата 30.11.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



nerezus, а зачем такая порнография при работе с мк?

Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mega8.h>
#include <delay.h>

#define __lcd_port PORTB

#include <lcd.h>

void main(void) 
 {
    PORTB=0x00;
    DDRB=0x00;

    buff[] = "Preved medved!!!";

    lcd_init(16);
    while (1) 
     {
        lcd_gotoxy(0, 0);
        lcd_puts(buff);
        delay_ms(200);
     }
 }

PM MAIL ICQ Skype   Вверх
xvr
Дата 30.11.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Есть предположение, что размер кучи для malloc надо где то выставлять

PM MAIL   Вверх
UniBomb
Дата 30.11.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



В CodeVision (как я понял ТС её использует) с маллоком были проблемы - эта функция не возвращала указател на выделенную память. Пофиксили или нет - не знаю..

Это сообщение отредактировал(а) UniBomb - 30.11.2009, 15:14
PM MAIL ICQ Skype   Вверх
nerezus
Дата 30.11.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mega8.h>
#include <delay.h>

#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

void main(void) {

    char buff[17];
    int i;
    int c = 0;
    char *source = "                Preved medved                ";

    lcd_init(16);
    while (1) {
        for(i = 0; i < 16; i++) {
            buff[i] = source[i + c];
        }
        buff[16] = 0;
        lcd_gotoxy(0, 0);
        lcd_puts(buff);
        c++;
        if (c > strlen(source) - 16) {
            c = 0;
        }
        delay_ms(200);
    }
}




Так работает(бегущая строка), но код ужасен из-за констант ((

Добавлено через 1 минуту
Цитата

В CodeVision (как я понял ТС её использует) с маллоком были проблемы - эта функция не возвращала указател на выделенную память. Пофиксили или нет - не знаю..
 2.04 версия.
Не, когда основная функция не работает - это совсем загадка анатомии разработчиков =\ Разочарован.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Severyanin
Дата 30.11.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



nerezus,  я бы вообще не советовал юзать динамическое выделение памяти на мк, слишком большие затраты процессорного времени. Тем более для дисплея, юзай статику где только возможно


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.