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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> WinAVR организация данных, Вопросы начинающего
Dim_ON
сообщение Jan 2 2008, 11:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Недавно начал учиться программировать МК AVR семейство Mega, для этого использую WinAVR 20071221, тестирую в Proteuse 7 SP2. В чем собственно непонядки:
Проблемы с массивами:
Код
const unsigned char TabKey[4][4]  PROGMEM = \
       {{ '1', '2', '3', CTRL0 },\
        { '4', '5', '6', CTRL1 },\
        { '7', '8', '9', CTRL2 },\
        { '*', '0', '#', CTRL3 }};
//или
const u08  Tab[16] PROGMEM = \
{  33, 0xFA, 16, CTRL0, \
   48, 0xF9, 18, CTRL1, \
   56, 0xF8, 13, CTRL2, \
   69, 0xF7, 28, CTRL3 \
    };
//использую внешний индекс
extern u08             LastKey;
//но возращаются левые выборки
LastKey = Tab[LastKey]; //лажа

Объясните плиз использование static, extern, volatile переменных, функций. В каких случаях лучше объявить extern переменную, а где лучше использовать функцию возращающую значение static переменной. Про volatile я вообще ниче не знаю 05.gif
С массивами тоже туго... Что лучше, использовать одномерный массив или при необходимости можно создавать несколько размерностей. Как правильно их объявлять и определять, как обращаться к элементам массива. Операции с массивами: логические, арифметические, сортировка...
Структуры(struct)...Объявление, определение, битовые поля, использование массива в структуре и использование массива структур
Объединения(union)...
Перечесления(enum)...
Динамическое выделение памяти...malloc...free
Объявление и определение переменных внутри операторов... for(u08 i = 0; i < 10; i++){}
Перегрузка функций
Шаблоны функций

PS Хочется услышать советы бывалых при использовании тех или инных типов данных
PSS Хочется разобраться как организуется тот или иной тип на аппаратном уровне, что бы корректно использовать
PSSS Сильно не ругайтесь если это все 1000 раз обсуждалось, просто захотелось собрать все в одном месте, можно ссылки если не хотите по 150 раз переписывать одно и тоже. Ссылки на литературу по теме приветствуются
Go to the top of the page
 
+Quote Post
bloodden
сообщение Jan 2 2008, 11:46
Сообщение #2


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



Вся проблема в том, что у АВР память программ и память данных находятся на разных шинах, соответственно и команды для чтения/записи будут разными (это если грубо, точнее в даташит). По-моему надо подключить pgmspace.h или что-то вроде этого. Там хранятся подпрограммы для работы с памятью программ.


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post
Dim_ON
сообщение Jan 2 2008, 12:04
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Цитата(bloodden @ Jan 2 2008, 15:46) *
По-моему надо подключить pgmspace.h или что-то вроде этого. Там хранятся подпрограммы для работы с памятью программ.

подключал
Код
#include <avr/pgmspace.h>
const u08 static IndTab[] PROGMEM = \
{0b11000000, 0b11111001, 0b10100100, 0b10110000, \
  0b10011001, 0b10010010, 0b10000010, 0b11011000, \
  0b10000000, 0b10010000 \
};
//попытка через макросы
#define Read_IndCode(adata)     pgm_read_byte(&IndTab[adata])
#define Write_IndCode(adata)    IND_PORT_DATA = adata


массивы нехотят у меня работать никак

Так забыл написать, в листенги пишет:
*ABS*:00000000 main.c
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:2 *ABS*:0000003f __SREG__
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:3 *ABS*:0000003e __SP_H__
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:4 *ABS*:0000003d __SP_L__
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:5 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:6 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:119 .text:00000000 main
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:356 .progmem.data:0000008d __c.1807
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:352 .progmem.data:00000075 __c.1809
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:348 .progmem.data:00000063 __c.1811
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:344 .progmem.data:0000005a __c.1813
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:340 .progmem.data:0000004a __c.1815
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:336 .progmem.data:00000037 __c.1817
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:332 .progmem.data:00000024 __c.1819
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:328 .progmem.data:00000010 __c.1821
C:\DOCUME~1\POPOV~1.HOM\LOCALS~1\Temp/ccAkJpIy.s:309 .progmem.data:00000000 Tab

это нормально? Мб в Makefile надо че дописать?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jan 2 2008, 13:10
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



>PS Хочется услышать советы бывалых при использовании тех или инных типов данных
>PSS Хочется разобраться как организуется тот или иной тип на аппаратном уровне, что бы корректно использовать
>PSSS Сильно не ругайтесь если это все 1000 раз обсуждалось, просто захотелось собрать все в одном месте, можно >ссылки если не хотите по 150 раз переписывать одно и тоже. Ссылки на литературу по теме приветствуются

Просьба поискать на форуме ответы на Ваши вопросы (чтобы не задавать вопросы 150 раз smile.gif ).
По теме:
Для информации по квалификаторам памяти static, extern, volatile есть описание языка С (Керниган, Ричи).
Работа с flash описана в документации по компилятору (avr-libc)
В makefile необходимо указать компилируемые файлы. Примеры файлов были выложены на форуме для разных случаев сборки проектов.(Выкладывал Сергей Борщ, и я тоже)


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Dim_ON
сообщение Jan 2 2008, 13:34
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Микроконтроллеры AVR семейства MEGA имеют RISC (сокращенную систему команд) архитектуру ЦПУ, с Гарвардской организацией памяти. Что означает выполнение команд за 1 машинный цикл (кроме операций ветвлений и переходов) и раздельное адресное пространство памяти программ, ОЗУ и памяти данных.
Flash-ПЗУ хранит программу работы МК
ОЗУ - хранит данные используемые при работе программы, при сбросе данные пропадают? Стек тоже использует ОЗУ.
В адресное пространство памяти данных входят адреса регистров общего назначения, регистры состояния, регистры перефирийных устройств (регистры управления, регистры данных и т.д.). При сбросе данные пропадают?

Цитата(mdmitry @ Jan 2 2008, 17:10) *
Просьба поискать на форуме ответы на Ваши вопросы (чтобы не задавать вопросы 150 раз smile.gif ).
По теме:
Для информации по квалификаторам памяти static, extern, volatile есть описание языка С (Керниган, Ричи).
Работа с flash описана в документации по компилятору (avr-libc)
В makefile необходимо указать компилируемые файлы. Примеры файлов были выложены на форуме для разных случаев сборки проектов.(Выкладывал Сергей Борщ, и я тоже)

Не я первый начинающий...и надеюсь не я последний...
Не знаю какая у меня версия КР, или как я читаю, но про volatile я там не нашел(
Про flash поищу
В makefile я только указываю частоту, девайс и C source files. Мakefile брал из примеров в протеусе.
Go to the top of the page
 
+Quote Post
733259
сообщение Jan 2 2008, 13:38
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146



Вам сначала руководство по C бы почитать, про массивы хотя бы.
Данные сами по себе не пропадают, но в avr-gcc их очищает стартовый код в секции init4(вроде), чтобы этого избежать нужно отредактировать скрипт компоновщика.
Но (ИМХО) Вам сначала бы руководство изучить.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 2 2008, 13:44
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dim_ON @ Jan 2 2008, 15:34) *
Не я первый начинающий...и надеюсь не я последний...

Вот именно по этой причине прежде, чем задавать вопросы - ознакомьтесь с учебными материалами. Их специально професионалы писали. За нюансами - добро пожаловать в форум, ну с дежурными вопросами - пожалуйте к книгам. По любому, для начинающих существует отдельная ветка форума. Тему перенес.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dim_ON
сообщение Jan 2 2008, 14:13
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Цитата(zltigo @ Jan 2 2008, 17:44) *
Вот именно по этой причине прежде, чем задавать вопросы - ознакомьтесь с учебными материалами. Их специально професионалы писали. За нюансами - добро пожаловать в форум, ну с дежурными вопросами - пожалуйте к книгам. По любому, для начинающих существует отдельная ветка форума. Тему перенес.

Сори сразу незаметил этой ветки)
Давайте хотя бы тогда порекомендуем литературу:
Вольфтанг Трамперт "Измерение, управление и регулирование с помощью AVR микроконтроллеров"
А. В. Белов "Микроконтроллеры AVR в радиолюбительской практике"
А.В. Евстифеев "Микроконтроллеры AVR семейства Mega. Руководство пользователя"
А.В. Евстифеев "Микроконтроллеры AVR семейства Tiny и Mega фирмы Atmel"
А.В. Евстифеев "Микроконтроллеры AVR семейства Classic фирмы Atmel"
Д. Мортон "Микроконтроллеры AVR. Вводный курс"
В.Н. Баранов "Применение микроконтроллеров AVR: схемы, алгоритмы, программы"
М.С. Голубцов "Микроконтроллеры AVR: от простого к сложному"
Ю.А. Шпак "Программирование на языке С для AVR и PIC микроконтроллеров"

ПС Плиз скиньте примерчик работы с массивами в WinAVR

Сообщение отредактировал Dim_ON - Jan 2 2008, 14:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 2 2008, 14:38
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dim_ON @ Jan 2 2008, 16:13) *
Давайте хотя бы тогда порекомендуем литературу:

Первое и самое главное "С" -просто С а не чернила для восьмого класса, например, второе издание Кернигана. Все нюансы ПРЕЖДЕ ВСЕГО в документации к компилятору.
Все остальное уже потом - перед сном быстренько почитать.
Цитата
ПС Плиз скиньте примерчик работы с массивами в WinAVR

Массивы это ПРОСТО С. Нюансы размещения массивов возьмите в примерах к компилятору.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dmitry77
сообщение Jan 2 2008, 14:56
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-09-06
Из: Архангельск
Пользователь №: 20 038



Приветики! С Новым Годом!!!
Посмотрите вот этот FAQ - возможно поможет....Это что касается самого WinAVR. Только есть досадный нюанс - текст на чисто немецком....

Файл
Прикрепленные файлы
Прикрепленный файл  AVR_GCC.rar ( 563.63 килобайт ) Кол-во скачиваний: 225
 
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jan 2 2008, 18:09
Сообщение #11


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Dmitry77 @ Jan 2 2008, 17:56) *
Приветики! С Новым Годом!!!
Посмотрите вот этот FAQ - возможно поможет....Это что касается самого WinAVR. Только есть досадный нюанс - текст на чисто немецком....

Файл

В документации к WinAvr есть FAQ, в том числе и про volatile, размещение данных во flash и другое написано, правда на английском. smile.gif


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Dim_ON
сообщение Jan 2 2008, 19:28
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Цитата(mdmitry @ Jan 2 2008, 21:09) *
В документации к WinAvr есть FAQ, в том числе и про volatile, размещение данных во flash и другое написано, правда на английском. smile.gif

Оо спасибо большое, я просто не знал про этот FAQ beer.gif
ПС мои массивы заработали smile.gif
Еще вот у меня перегрузка функций и объявление переменных в операторах не прокатывает.
А вот про volatile так и не нашел(

Сообщение отредактировал Dim_ON - Jan 2 2008, 19:52
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 2 2008, 19:48
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Dim_ON @ Jan 2 2008, 21:28) *
Еще вот у меня перегрузка функций и объявление переменных в операторах не прокатывает.
Телепатически можно предположить, что вы что-то не то пишете в исходном коде.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dim_ON
сообщение Jan 2 2008, 19:56
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914



Цитата(Сергей Борщ @ Jan 2 2008, 22:48) *
Телепатически можно предположить, что вы что-то не то пишете в исходном коде.

ну например:
Код
void motor_go(u08 speed);
void motor_go(u08 speed, u08 kol_shagov);
for(u08 i = 0; i < 10; i++){}

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

Сообщение отредактировал Dim_ON - Jan 2 2008, 20:05
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 2 2008, 21:47
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Dim_ON @ Jan 2 2008, 23:56) *
ну например:
Код
void motor_go(u08 speed);
void motor_go(u08 speed, u08 kol_shagov);
for(u08 i = 0; i < 10; i++){}

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

Простите, Вы уже с массивами разобрались?
Не плодите дополнительных сущностей и вопросов, с декларированным Вами знанием языка 'C' за конструкторами и деструкторами через пару месяцев приходите.
А приведенном примере расскажите словами, что хотели сделать. Я не понимаю.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

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

 


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


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