Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Avrstudio результат компиляции

Непрочитано 04.03.2011, 05:22  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Avrstudio результат компиляции

AVR Memory Usage
----------------
Device: atmega8535

Program: 810 bytes (9.9% Full)
(.text + .data + .bootloader)

Data: 512 bytes (100.0% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...

Не подскажите что означает Data: 512 bytes (100.0% Full).............?????

Program: 810 bytes (9.9% Full) Это весь размер программы......

Хочу на другой чип перекинуть с памятью поменьше 2К........ А что вот это значит Data: 512 bytes (100.0% Full).............?????

А для перехода на другой чип придеться плату для stk500 покупать.... В чип дипе 7300.(((( Нашел на другой фирме 3200.... Приемлемо но впороться с памятью чипа нехочу..... Начинал программировать для 13тини..... Памяти не хватило.....((((((
Заранее спасибо......
Реклама:
bass1981 вне форума  
Непрочитано 04.03.2011, 06:21  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,124
Сказал спасибо: 202
Сказали Спасибо 3,284 раз(а) в 2,150 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

накакой чип то? на 8535?
зачем для него стк всякие?
я их шил еще лет 6 назад при помощи ком порта, 3 резисторов и понипрога
а щас можно купить узби дата кабель от старого сотика за 200 рублей и напрямую к чипу 4 провода и всё

или я не прав?
индюк вне форума  
Непрочитано 04.03.2011, 07:05  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Сообщение от bass1981 Посмотреть сообщение
Не подскажите что означает Data: 512 bytes (100.0% Full)
Что то тут не то. Не бывает заполнения памяти на 100%. Здесь выводится 3 секции в сумме. data - инициализированные переменные, bss - инициализированные 0 переменные, noinit - переменные не инициализированные ничем. Но - Си нужен стек. Да и не только Си, программа на ассемблере без него тоже не обойдется. А тут вся память задействована. Так не бывает. Если проект не секретный - выложите его здесь.
kison вне форума  
Непрочитано 04.03.2011, 11:55  
terminator_seva
Вид на жительство
 
Аватар для terminator_seva
 
Регистрация: 03.06.2010
Сообщений: 451
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
terminator_seva на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Сообщение от kison Посмотреть сообщение
Что то тут не то. Не бывает заполнения памяти на 100%. .....
Еще как бывает , даже так бывает:
Код:
AVR Memory Usage
----------------
Device: atmega64
Program:    4076 bytes (6.2% Full)
(.text + .data + .bootloader)
Data:       4492 bytes (109.7% Full)
(.data + .bss + .noinit)
Другое дело что, как вы и сказали, нужен стек, и такой код правильно работать не будет.
terminator_seva вне форума  
Непрочитано 04.03.2011, 13:41  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Сообщение от bass1981 Посмотреть сообщение
Device: atmega8535
Program: 810 bytes (9.9% Full) (.text + .data + .bootloader)
Data: 512 bytes (100.0% Full) (.data + .bss + .noinit)
Памяти не хватило(
Не знаю, что у вас за программа, но как правило, вместо части оперативной памяти можно использовать флеш. Обычно это неизменные строки, константы и т.п.

При работе с графическим экраном у меня было превышение рам 600%, всякие строки и графические символы размещались в рам. Я их перебросил во флешь и изменил метод доступа, стало 8%. Пример можно посмотреть здесь.

Последний раз редактировалось =GM=; 04.03.2011 в 13:48.
=GM= вне форума  
Непрочитано 04.03.2011, 15:10  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

я их шил еще лет 6 назад при помощи ком порта, 3 резисторов и понипрога

200% С тобой согласен...... Лет пять назад я начал програмировать под микроконтроллеры, это был чит атмела АТ89...2051 насколько помню.... Писал на асемблере, паял програматор.... Пока сделал устройство. два месяца прошло..... Но это было 5 лет назат ... Сейчас такого позволить себе не могу вследствии нехватки времени... По работе связанн написанием программ на С (Хотя это сложно так выразиться: с + winapi + asm + и сторонние библиотеки).... Ну и чтоб время не тратить взял комплект разработчика stk500 В чип дипе 8000 стоит, нашел за 3150... Приемлемо чтоб не паять куча светодиодов для теста и т.д...... Данный код не влез в тини 13....... Я перенес его в 8535 для теста, все работает.... Еще плюс стк500 програмирование высоким напряжением для использования ресета как вывода (для тини13)...... Но увы память не мог просчитать до покупки всего......
Добавил функций в программу стало...
AVR Memory Usage
----------------
Device: atmega8535
Program: 836 bytes (10.2% Full)
(.text + .data + .bootloader)
Data: 542 bytes (105.9% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...

При 100% кстатии программа корректно работала.......
Вот в компьютерных приложениях дата отвечает за всякие пременные и т.д. но в компьютерных приложениях windows обращаться можно почти ко всем местам памяти(прошу нестрого есть исключения это там если она только чтение или за пределам такото значения и т.д)..... Как в чипе это устроено ... Вот флаш мы прошили ..... это сам код , в редких случаях нужна его модификация так что эта память может быть только чтение....... А вот преременные нуждаються в доступе и на запись..... Также нужно как вы сказали распределить стек.... Мы используем ту флаш в которую прошили или еще есть какаято память отдельно????? как это понять по даташиту???? Чтоб не получить еще казус.....
Build succeeded with 0 Warnings...
Почему компилятор на это даже предупреждение не кинул?????
Спасибо всем кто откликнулся...
bass1981 вне форума  
Непрочитано 04.03.2011, 15:13  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

#define F_CPU 4000000


#include ‹avr/io.h› //Cтандартная библиотека ввода/вывода

#include ‹string.h› //Библиотека для работы с строками

#include ‹util/delay.h›


/*
#define DI 0

#define DO 1

#define CLK 2

#define CS 3

#define INS 4

#define WP 5

*/


#define DI 0

#define DO 1

#define CLK 2

#define CS 3

#define LED 4

// #define INS 4

// #define WP 5




char buffer [512]={}; //Буфер данных для записи/чтения


void Delay(uint32_t t)

{

uint32_t i;

for(i = 0; i ‹ t; i++) {

}

}


//Программа инициализации UART
/*
void uart_init(void)

{

UBRRH = 0x00; //256000 битрейт, 1 стоп бит, без проверки четности

UBRRL = 0x01;

UCSRA = 0x00;

UCSRB = (1‹‹RXEN)|(1‹‹TXEN); //Прием и передача разрешена

UCSRC = (1‹‹URSEL)|(1‹‹UCSZ1)|(1‹‹UCSZ0);

}
*/


//Программа передачи байта по UART
/*
void uart_transmit(unsigned char data)

{

while ( !( UCSRA & (1‹‹UDRE)) );

UDR = data;

}



//Программа приема байта по UART

unsigned char uart_receive (void)

{

while ( !(UCSRA & (1‹‹RXC)) );

return UDR;

}



//Программа передачи строки по UART

void uart_transmit_message(char* msg)

{ unsigned char i;

i=0; //Начальное значение переменной



//Цикл до перебора всех элементов строки

while ((i‹256)&(msg[i]!=0x00) )

{

//Отправка поэлементно символов строки

uart_transmit(msg[i]);

i++; //Увеличиваем номер элемента строки

}

}

*/

//Программа передачи байта карте SD|MMC

void spi_transmit (unsigned char data)

{

unsigned char i;

for (i=0;i‹8;i++) //Цикл перебора битов отправляемого байта

{

if ((data&0x80)==0x00) //Если все данные переданы

PORTB&=~_BV(DI); //Выставить бит данных

else

PORTB|=_BV(DI);

data=data‹‹1;

PORTB|=_BV(CLK); //Импульс

asm("nop"); //Пауза в 1 такт

PORTB&=~_BV(CLK);

}

}



//Программа приема байт от карты SD|MMC

unsigned char spi_receive (void)



{

//Декларация переменных

unsigned char i, res=0;

for(i=0;i‹8;i++)

{

PORTB|=_BV(CLK); //Фронт импульса

res=res‹‹1;

if ((PINB&_BV(DO))!=0x00)

res=res|0x01; //Считать бит данных

PORTB&=~_BV(CLK); //Спад испульса

asm("nop");

}

return res;

}



unsigned char sd_cmd(char b0, char b1, char b2, char b3, char b4, char b5)

//Отправка команды карте SD|MMC

{ unsigned char res;

long int count;

spi_transmit (b0); //Передать индекс команды



spi_transmit (b1); //Передать аргумент

spi_transmit (b2);

spi_transmit (b3);

spi_transmit (b4);



spi_transmit (b5); //Передать CRC

count=0;

do { //Подождпть R1 ответа

res=spi_receive();

count=count+1;

} while ( ((res&0x80)!=0x00)&&(count‹0xffff) );



return res;

}



unsigned char sd_card_init(void)

{ unsigned char i,temp;

long int count;


// if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту



for (i=0;i‹10;i++) //80 импульсов

spi_transmit (0xff);



PORTB&=~_BV(CS); //CS опустить



temp=sd_cmd (0x40,0x00,0x00,0x00,0x00,0x95); //CMD0

if (temp!=0x01) return 3; //Выйти, если ответ не 0х01

spi_transmit (0xff);


count=0;
do{

temp=sd_cmd (0x41,0x00,0x00,0x00,0x00,0x95); //CMD1

spi_transmit (0xff);

count=count+1;

} while ( (temp!=0x00)&&(count‹0xffff) ); //Ждем 0x01 ответа R1



if (count›=0xffff) return 4;

return 0;

}



unsigned char read_block (char* buff, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4)

{ unsigned char temp;

long int count;



// if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту



temp=sd_cmd (0x51,a1,a2,a3,a4,0x95); //CMD17

if (temp!=0x00) return 5; //Выйти, если ответ не 0x00

spi_transmit (0xff);

count=0;

do{ //Ждем начала пакета данных

temp=spi_receive();

count=count+1;

} while ( (temp!=0xfe)&&(count‹0xffff) );



if (count›=0xffff) return 5;



for (count=0;count‹512;count=count+1) //Сохраняем данные

buff[count]=spi_receive();

spi_receive(); //Сохраняем CRC

spi_receive();



return 0;

}



unsigned char write_block (char* buff, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4)

{ unsigned char temp;

long int count;



// if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту

// if ((PINB&_BV(WP))!=0x00) return 2; //Проверка write protect



temp=sd_cmd(0x58,a1,a2,a3,a4,0x95); //CMD24

if (temp!=0x00) return 6; //Выйти, если ответ не 0x00

spi_transmit (0xff);



spi_transmit (0xfe); //Начало пакета данных

for (count=0;count‹512;count=count+1) //Отослать данные

spi_transmit(buff[count]);

spi_transmit (0xff); //Отослать CRC

spi_transmit (0xff);

temp=spi_receive();

if ((temp&0x05)!=0x05) return 6; //Выйти, если данные не приняты



count=0;

do { //Ждем окончания busy состояния

temp=spi_receive();

count=count+1;

}while ( (temp!=0xff)&&(count‹0xffff) );



if (count›=0xffff) return 6;



return 0;

}



int reset(void)

{
return 0;
}

int main(void)

{
unsigned char temp;

int i;


DDRB = 0xFF;
while(1)
{
for(int i=1;i‹=128;i*=2)
{
PORTB=~i;
_delay_loop_2(300000);
}
}





// PORTB=_BV(CS)|_BV(DO)|_BV(DI)|_BV(LED);//|_BV(WP)|_BV(INS); //Инициализация портов

// DDRB=_BV(CS)|_BV(DI)|_BV(CLK)|_BV(LED);

// PORTB|=_BV(LED) ;

Delay(50000); //задержка

// PORTB&=~_BV(LED);


// uart_init(); //Инициализация UART



temp=sd_card_init(); //Инициализация карты

if (temp==0x00)

{

// uart_transmit_message("sd_card_init: initialization succes\r\n");

for (i=0;i‹512;i=i+1)

buffer[i]=0x30+(i%10); //Заполнить буфер 12345...



temp=write_block(buffer,0x00,0x00,0x02,0x00);//Записать буфер

/* if(temp==0x00) uart_transmit_message("write_block: block writte succes\r\n");

else if (temp==1) uart_transmit_message("write_block: fail, no card in the slot\r\n");

else if (temp==2) uart_transmit_message("write_block: fail, card write protected\r\n");

else uart_transmit_message("read_block: CMD24 fail\r\n");

*/

temp=read_block(buffer,0x00,0x00,0x02,0x00); //Считать буфер

if(temp==0x00) {

// uart_transmit_message("read_block: data block read succes:\r\n");

// for (i=0;i‹512;i=i+1) //Выслать буфер по UART

// uart_transmit(buffer[i]);

}

else if (temp==0x01)
{
//uart_transmit_message("read_block: fail, no card in the slot\r\n");
}
else
{
//uart_transmit_message("read_block: CMD17 fail\r\n");
}

}

else if (temp==0x01)
{
// uart_transmit_message("sd_card_init: fail, no card in the slot\r\n");
}

else if (temp==0x03)
{
// uart_transmit_message("sd_card_init: CMD0 fail\r\n");
}
else
{
// uart_transmit_message("sd_card_init: CMD1 fail\r\n");
}


while (1)

;



return 1;
}
А вот код..... Кажеться я его сейчас неправильно выложу....
bass1981 вне форума  
Непрочитано 04.03.2011, 15:23  
Cybermaker
Вид на жительство
 
Регистрация: 21.08.2007
Сообщений: 318
Сказал спасибо: 12
Сказали Спасибо 67 раз(а) в 61 сообщении(ях)
Cybermaker на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Сообщение от bass1981 Посмотреть сообщение
char buffer [512]={}; //Буфер данных для записи/чтения
Резервирует использование 100% памяти. Делайте буфер меньше. Иначе не остаётся места для переменных
Cybermaker вне форума  
Сказали "Спасибо" Cybermaker
bass1981 (04.03.2011)
Непрочитано 04.03.2011, 15:34  
sspivak
Прохожий
 
Регистрация: 29.03.2010
Сообщений: 3
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
sspivak на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Глобальный массив "char buffer [512]" занимает 512 байт, это все ОЗУ доступное для Вашей меги. У тини13 ОЗУ и того меньше всего 64 байта. Так что думайте как реорганизовать программу, чтобы использовать буффер меньшей длины.

PS Размер ОЗУ можно посмотреть для каждого микроконтроллера на первой странице datasheet, например, для тини13 оно выглядит так:- 64 Bytes Internal SRAM
sspivak вне форума  
Сказали "Спасибо" sspivak
bass1981 (04.03.2011)
Непрочитано 04.03.2011, 16:04  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Avrstudio результат компиляции

Cybermaker спасиб все вкурил мне вообще там 3 байта нужно.... Вместо 512..... необратил на это сильно внимания.....
sspivak спасибо за расширенный ответ теперь понял как примерно все утроено в микроконтроллере..... Походу для них всетаки си еще рано -))))
bass1981 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVRStudio + WinAVR не работают... alberio Микроконтроллеры, АЦП, память и т.д 15 18.10.2010 20:16
AVRStudio косяк :( Pavlike Микроконтроллеры, АЦП, память и т.д 35 28.04.2010 12:47
Помогите с AVRstudio jafarkiller Микроконтроллеры, АЦП, память и т.д 9 08.04.2010 21:42
Ошибка при компиляции Flowcode 3 проекта alexander70 Микроконтроллеры, АЦП, память и т.д 1 06.10.2009 17:56


Часовой пояс GMT +4, время: 16:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.