CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Если переменные в EEPROM не инициализировать то ее ресурс может быть исчеран быстрей.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
ge-nka
Родился
Сообщения: 3
Зарегистрирован: Сб апр 19, 2008 08:57:12

Сообщение ge-nka »

Значит если я моей переменой задаю определёное значение при объявлении
допустим eeprom Мояпременая=0 ; вонинг пропадает.
Но это выходит что если я её значение изменил во время работы программы
то выключаем питание, включаем и моя переменая опять получается 0.
Или я ошибаюсь?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Если прога ее изменила то она станет другой конечно. для этого и есть eeprom
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Лично я предпочитаю использовать собственноручно написанные процедуры для работы с ЕЕПРОМ, чего и Вам желаю. Причем часто - с контролем числа записей в одну ячейку и переносом данных в другую область ЕЕПРОМ при приближении к пороговому значению ресурса перезаписей (см. даташит). А вообще, про ЕЕПРОМ в AVR уже есть отдельные темы, используйте поиск.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

А как представить рабочий регистр переменной? Что бы работать можно было с битами, как например с портами можно, ведь для регистров тоже есть битовые асм-команды.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Tohey писал(а):А как представить рабочий регистр переменной? Что бы работать можно было с битами, как например с портами можно, ведь для регистров тоже есть битовые асм-команды.
а зачем это? если вы работаете на своем любимом CodeVision C, то распределение переменных по регистрам берет на себя компилятор, а с битами вы уж работайте СИШНЫМИ операторами. при первой же возможности компилятор будет автоматически использовать подходящие ассемблерные комнды. Пример:

var |= (1<<4);

будет скомпилировано примерно в такую конструкцию

sbr r18, 4
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Не знаю чей любимый, второй раз в жизни на С пишу.

Вот что получилось:
; 115 var |= (1<<4);
LDI R30,LOW(16)
OR R4,R30

Он назначил R4 переменной var, а мне бы хотелось самому привязать к var свой любимый регистр. К тому же с R4 понятное дело sbr не прокатит.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Tohey писал(а):мне бы хотелось самому привязать к var свой любимый регистр.


Привяжите. Есть ведь FAQ по микроконтроллерам - там все описно с примерами.

======

var |= (1<<4);

У меня вот так скомпилилось

LDS R30,_var
ORI R30,0x10
STS _var,R30

А если var уже использовалось в проге то так:

ORI R30,0x10
STS _var,R30

WinAVR 20080407 сделал аналогично - как и CVAVR

lds r24, 0x0077
ori r24, 0x10
sts 0x0077, r24
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

И к чему все эти коды? Ведь этож не битовые команды... Как привязать, я так и не вычитал. Он сам назначает что ему взбредет. Наверно с SBR он вообще не дружит, непонятно откуда ARV это написал.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

гм... а зачем вам понадобилась именно команда SBR? какая разница по сравнению с той же ORI? А привязать к регистру(регистрам) довольно просто, по крайней мере в WinAVR:

Код: Выделить всё

register unsigned char var asm("r18"); // var будет привязана к r18
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Tohey писал(а):Как привязать, я так и не вычитал.


в FAQ это - "CVAVR размешение переменных в регистры.txt"
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Всем спасибо!
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

Пытаюсь прочитать данные из датафлэш AT45DB161 (SO-8)
пишу на Си (раньше делал на асме всё ок)
флэш подключена к SPI контроллера на порт B
вот код

#include <mega64>
#include <io>
#include <stdio>

char c;
void setup() // настройка переферии МК
{
PORTB= 0x0D;
DDRB = 0x07; // Настройка выводов порта PortB
SPCR = 0x5C; // Конфигурация SPI
}


void main(void)
{
setup();
SPDR=0x68; //Передача команды непрерывного чтения из AT45DB161
while (!(SPSR & 0x80));
SPDR=0x00; //Передача адреса откуда будем читать 3 байта 000000h
while (!(SPSR & 0x80));
SPDR=0x00;
while (!(SPSR & 0x80));
SPDR=0x00;
while (!(SPSR & 0x80));
SPDR=0xFF; //Передача 4-х незначащих байт FFh
while (!(SPSR & 0x80));
SPDR=0xFF;
while (!(SPSR & 0x80));
SPDR=0xFF;
while (!(SPSR & 0x80));
SPDR=0xFF;

loop:
while (!(SPSR & 0x80)); //Приём информации из AT45DB161
c=SPDR;
goto loop;
}
мне нужно только чтение с указаных мной адресов
запись не нужна
(это к тому если будете предлагать посмотреть пример задача7 из курса АВР)
это мои первые шаги на Си так что сильно не пинайте
спасибо
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

с - хорошее имя для переменной ! Сразу видно руская она или латинская.

Хоршее начало !

ipkin писал(а):это к тому если будете предлагать посмотреть пример задача7 из курса АВР


Ни в коем разе !!! НЕ советую читать, а то вдруг потом правильно напишите ...
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

а компилятор типа не разбирается латинская это с или русска с
это погоды не делает менял на другие сиволы
уважаемый Tych Вы бы как учитель подсказали что не так
дело в том что я ваш файл at45d161.h не могу приспособить к своей проге там (для меня мало комментариев т.к я делаю первые шаги на СИ)
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Пример в задаче 7 я отлаживал (как - в задаче 4 написано) "в железе" так как в имуляторах такой памяти нету - пример работает.

У вас как то странно выглядит это:

Код: Выделить всё

loop: 
while (!(SPSR & 0x80)); //Приём информации из AT45DB161
c=SPDR;
goto loop;


Это бесконечный цикл.

В задаче 7 курса вот так читается:

Код: Выделить всё

    while (buffer_counter < 528)                          
    {
        SPDR = 0xFF;                       
// write dummy value to start register shift
        while (!(SPSR & temp));             
// wait for data transfer to be completed
         
while (!USR.5); // ждем пока освободится UDR
       
UDR = SPDR;  // записываем байт принятый по SPI из памяти в UART
               
buffer_counter++;
     }
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

как нет такой памяти если она у меня на платке запаяна 8-ноговая
на асме я с ней работал всё чётко сейчас тоже самое но только на СИ

чтение у меня идёт не из буфера а из массива памяти (команда 68 по ДШ)
бесконечный цикл я сделал чтобы осцилом можно было посмотреть ипульсы на выходе датафлэш
в дальнейшем там будет цикл определённого размера для чтения нужного кол-во байт
вот цикл:
static unsigned int j;
for (j=0;j<1024;j++)
{
while (!(SPSR & 0x80)); //Ïðè¸ì èíôîðìàöèè èç AT45DB161
i=SPDR;
}
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ipkin писал(а):как нет такой памяти если она у меня на платке запаяна 8-ноговая

Яж пишу: в СИМУЛЯТОРАХ НЕТУ.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

CVAVR 2.03.2 - добавлено много нового
http://www.hpinfotech.ro/html/cvavr_history.htm

Размер демки вырос с 2 до 8 Мб.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Прикол ! Демо CodeVisionAVR V2.03.2 компилит полную память ATmega8 !!!
http://kazus.ru/forum/topics/f_81220.html#81220

мегу16 32 64 тоже протестил - компилятся !
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Ответить

Вернуться в «AVR»