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

 
 
> CVAVR struct EEPROM copy struct SRAM
AndryG
сообщение Jun 11 2007, 08:44
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Доброго времени суток.

В еепром хранится массив записей.
Нужно определить в ram парочку таких же записей и гонять данные туда-сюда.

Пишу на CV. (1.25b2 ... пробовал и на других - тот же результат)
TINY2313

Первое неудобство:
Код
typedef eeprom struct{
  unsigned char h;
  unsigned char m;
  unsigned char s;
  unsigned char d;
} tpoint_eep;

typedef struct{
  unsigned char h;
  unsigned char m;
  unsigned char s;
  unsigned char d;
} tpoint_ram;

tpoint_ram      point_ram;
eeprom tpoint_eep      point_eep;

Приходится объявлять два "почти одинаковых" типа sad.gif

Ну да ладно ... смирирился .. продолжаю.
Код
void func1(void)
{
point_ram = point_eep;
}

Ругается на ошибку в АСМ-коде ... смотрю листинг - красота!
Код
__COPYME:
    SBIC EECR,EEWE
    RJMP __COPYME
    IN   R23,SREG
    CLI
    OUT  EEARL,R30
    OUT  EEARH,R31
    SBI  EECR,EERE
    IN   R22,EEDR
    OUT  SREG,R23
    ADIW R30,1
    ST   X+,R22
    DEC  R24
    BRNE __COPYME
    RET

OUT EEARH,R31 - нет такого.

Встречал кто такое? Как побороли?
____
P.S.
Плюнул на CV:"Вот хороший повод переползти на WinAvr" ... почитал ... а у него вообще работа с "не SRAM" через функции eeprom_read_byte и т.д.
Тогда получается сравнение point_eep.h == point_rem.h вырастает в такую хучу кода ...
sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Jun 11 2007, 18:14
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(singlskv @ Jun 11 2007, 21:44) *
И ИМХО, это правильно, особенно в части записи, потому что не дает ложного
представления о том, что запись в eeprom/flash это просто присвоение значения одной
переменной другой которое выполняется за пару тактов.

Дык это просто нужно знать-что запись в епром занимает примерно милисекунду и компилируется
в несколько атомарных ассемблерных команд.
Но с точки зрения логики программы это действительно "просто присвоение значения одной
переменной другой",a=b,и зачем тут лишние телодвижения?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 11 2007, 18:42
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(WHALE @ Jun 11 2007, 22:14) *
Дык это просто нужно знать-что запись в епром занимает примерно милисекунду и компилируется
в несколько атомарных ассемблерных команд.

ну во-первых, насколько я ничего не помню, в худшем случае это 3,5ms
Цитата
Но с точки зрения логики программы это действительно "просто присвоение значения одной
переменной другой",a=b,и зачем тут лишние телодвижения?

во-вторых, во время этого "простого" присвоения проц весит в никому не нужном
цикле while, вместо того что бы заниматься какой-нибудь полезной работой.

Например представте себе что нужно с частотой 1-10KHz опрашивать порты и после
этого делать какие-то сложные вычисления (типа многоканальный частотомер, итд), а еще
нужно время от времени писать что-то в eeprom.
Ну и как Вы представляете реализацию этого с помощью "просто присвоение" ?

P.S. Да, чтобы никто не начал расказывать мне про то, что это (опрос портов и вычисления) можно
сделать в прерывании, сразу же замечу что сложные вычисления занимают примерно 80%
процессорного времени...
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jun 12 2007, 06:24
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Ух! Как обычно на этом форуме ... хоть вопрос и иссяк, но его выдавливают по полной smile.gif
Цитата
З.Ы. дык если они пишут,что пофиксили баг с доступом в версии 1.25.4,почему не работает в 1.25.5?
У меня на сегодня 1.25.2 есть ... читал ... что 1.25.5 ломается криво ... видать придется точно не выделываться и перейти на массивы.

Цитата
Уважаемый аффтар,а нафига вам ваще структура,вы ведь размещаете в ней данные одного типа?

Да потому что надоело с индексами крутится таблиц smile.gif А тут у меня таблицы таблиц получаются, да еще разных размеров ... и т.д. и т.п. Ну типа ячейка данных еепром(h,m,s,d), которая ходит по RS-232 в пакете (head,h,m,s,d,crc) ... а в памяти лежит в еще более развернутом виде ... короче решил не путаться в индексах "копируем с индекса 2 в 4 5штук" и т.д. smile.gif (про #define rs_head rs_buf[0] можно не говорить)

Цитата
"может точно в WinAvr переползти ... и нафиг этот cv."
Ну вот опять-сразу голову рубить sad.gif Может,усы сбрить будет достаточно? smile.gif
Да не фанатизм это, просто давно хочу уйти с cvavr, да только духу не хватает. Не мастер я в avr-асме, но как гляну. что там cv накрутит -- жалко память ... хорошо хоть у структуры адреса сразу вычисляет :-)
В воскресенье поймал глюк этот ... думаю: "Ну вот - хороший повод!" ... сел за WinAvr ... посмотрел на кучу макросов и настроек makefile (понимаю. что это всё дает крутую гибкость) ... Мдя. Пошел в ИАР ... полазил там ... вот так как осел меж двух стогов сена и просидел всё воскресение :-)
Жаль, но не нашел нигде толкового описания изюминок этих компиляторов ... а CVAVR имеет минимум своих наворотов, и все хорошо в _маленькой_ справке лежат.

Кстати ... структуры я определил так...
Код
#define point_struct struct {byte h,m,s,d;}
typedef eeprom point_struct tpoint_eep;
typedef        point_struct tpoint_ram;


Небольшой итог:
1. НЕ НУЖНО поднимать спор кто из компиляторов круче, пжлст! :-)
2. может кто встречал доку типа "переход с CV на (WinAVR/IAR)"

Сообщение отредактировал AndryG - Jun 12 2007, 06:26
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AndryG   CVAVR struct EEPROM copy struct SRAM   Jun 11 2007, 08:44
- - Сергей Борщ   Цитата(AndryG @ Jun 11 2007, 11:44) Перво...   Jun 11 2007, 09:00
- - AndryG   Не проходит такой простой вариант - пробовал ... р...   Jun 11 2007, 09:14
|- - Сергей Борщ   Цитата(AndryG @ Jun 11 2007, 12:14) Не пр...   Jun 11 2007, 09:31
- - AndryG   Про телепатов я в курсе ... Кодtypedef struct{ ...   Jun 11 2007, 10:08
- - WHALE   Увы,у CV большие проблемы в работе с EEPROM Если ...   Jun 11 2007, 11:41
|- - Сергей Борщ   Цитата(WHALE @ Jun 11 2007, 14:41) З.З.Ы....   Jun 11 2007, 13:10
|- - WHALE   Цитата(Сергей Борщ @ Jun 11 2007, 17:10) ...   Jun 11 2007, 15:32
|- - Сергей Борщ   Цитата(WHALE @ Jun 11 2007, 18:32) Конвен...   Jun 11 2007, 17:17
|- - WHALE   Цитата(Сергей Борщ @ Jun 11 2007, 21:17) ...   Jun 11 2007, 17:34
|- - singlskv   Цитата(Сергей Борщ @ Jun 11 2007, 21:17) ...   Jun 11 2007, 17:44
|- - SunnyDevil   Цитата(Сергей Борщ @ Jun 11 2007, 20:17) ...   Jun 14 2007, 13:50
|- - Сергей Борщ   Цитата(SunnyDevil @ Jun 14 2007, 16:50) К...   Jun 14 2007, 19:19
- - WHALE   Вы будете смеяться,но В CV это реализовано именно ...   Jun 12 2007, 06:35
|- - singlskv   Цитата(WHALE @ Jun 12 2007, 10:35) Вы буд...   Jun 12 2007, 13:37
- - mdmitry   >может кто встречал доку типа "переход с C...   Jun 14 2007, 13:35
|- - WHALE   Цитата(mdmitry @ Jun 14 2007, 17:35) С EE...   Jun 14 2007, 14:55
- - mdmitry   >А мужики-то не знают! Можно поподробнее на...   Jun 14 2007, 20:33
- - WHALE   Цитата(mdmitry @ Jun 15 2007, 00:33) Года...   Jun 15 2007, 04:26
- - IgorKossak   Цитата(WHALE @ Jun 15 2007, 07:26) А что ...   Jun 16 2007, 06:48
- - mdmitry   Цитата(WHALE @ Jun 15 2007, 08:26) А запи...   Jun 16 2007, 20:57


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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