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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 02.02.2018, 15:31  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,402
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Atmel studio, как правильно таскать данные с flash памяти?

Добрый день,
когда - то сделал себе DDS генератор на меге 16, в среде WinAVR. Все хорошо работает. описания полно в сети.
вот главная процедура:
Код:
   void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
    {
     asm volatile(	"eor r18, r18 				;r18‹-0"	"\n\t"
    "eor r19, r19 				;r19‹-0"	"\n\t"
    "1:"									"\n\t"
    "add r18, %[BtL]			;1 cycle"	"\n\t"
    "adc r19, %[BtM]			;1 cycle"	"\n\t"	
    "adc %A[Adr], %[BtH]		;1 cycle"	"\n\t"
    "lpm 						;3 cycles" 	"\n\t"
    "out %[Out], __tmp_reg__	;1 cycle"	"\n\t"
    "sbis %[Add], 2				;1 cycle if no skip" "\n\t"
    "rjmp 1b					;2 cycles. Total 10 cycles"	"\n\t"
    :
    :[BtL] "r" (ad0), [BtM] "r" (ad1), [BtH] "r" (ad2), [Adr] "e" (signal), [Out] "I" (_SFR_IO_ADDR(PORTA)), [Add] "I" (_SFR_IO_ADDR(SPCR))
    :"r18", "r19" 
    );
    }
Которая вызывается вот так:
Код:
Signal_OUT(SIGNALS[SG.mode],
				   (uint8_t)((uint32_t)SG.acc››16),
				   (uint8_t)((uint32_t)SG.acc››8),
				   (uint8_t)SG.acc);
signals - это набор кривых
Код:
   const uint8_t *SIGNALS[] =
    {
	 Sinewave,
	 Meandr25,
	 Meandr50,
	 Meandr75,
	 Triangle,
	 SawTooth,
	 RevSawTooth,
	 ECG,
	 Siski
    };
каждая из 9-и кривых объявлена таким макаром:
Код:
   const uint8_t Sinewave[]  __attribute__ ((section (".MySection1"))) = //sine 256 values
	{
             Т256 значений
	};
с номерами MySection от 1 до 9
В makefile прописаны адреса секций
Код:
#Define sections where to store signal tables
LDFLAGS += -Wl,-section-start=.MySection1=0x3700
LDFLAGS += -Wl,-section-start=.MySection2=0x3800
LDFLAGS += -Wl,-section-start=.MySection3=0x3900
LDFLAGS += -Wl,-section-start=.MySection4=0x3A00
LDFLAGS += -Wl,-section-start=.MySection5=0x3B00
LDFLAGS += -Wl,-section-start=.MySection6=0x3C00 
LDFLAGS += -Wl,-section-start=.MySection7=0x3D00 
LDFLAGS += -Wl,-section-start=.MySection8=0x3E00 
LDFLAGS += -Wl,-section-start=.MySection9=0x3F00
Все это работает отлично.

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

Пробовал в свойствах проекта включить внешний makefile - компилятор дал ошибку.
пробовал явно указать области памяти таким образом:
Код:
   const uint8_t Sinewave[] __attribute__ ((section ("0x3700"))) = //sine 256 values
   {
	   массив синуса   
   };
   
   const uint8_t Meandr25[] __attribute__ ((section ("0x3800"))) = //Meandr 25% 256 values
   {
           массив меандра с 25% заполнением
   };
Тоже не помогло, синус загажывается данными с масива для меандра.

Как правильно объявить массивы кривых в памяти?
Реклама:

Последний раз редактировалось -vitalik-; 02.02.2018 в 15:36.
-vitalik- вне форума  
Непрочитано 05.02.2018, 18:27  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,402
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Atmel studio, как правильно таскать данные с flash памяти?

дополнение:
все масивы кривых загоняются в память программ
Код:
   const uint8_t Sinewave[] __attribute__ ((progmem)) = //sine 256 values
   {
     256 елементов
   };
в откомпилированом hex-файле - их отлично видно. Но масивы размещены в обратном порядке.

Набор указателей на массивы выглядит так:
Код:
   const uint8_t *SIGNALS[] =
   {
	   Sinewave,
	   Meandr25,
	   Meandr50,
	   Meandr75,
	   Triangle,
	   SawTooth,
	   RevSawTooth,
	   ECG,
	   Siski
   };
При запуске генерации - данные выбираются со смещением.
при попытке указать "const uint8_t *SIGNALS[] PROGMEM =" - компилятор ругается "Error 1 variable 'SIGNALS' must be const in order to be put into read-only section by means of '__attribute__((progmem))' "

Как решить проблему?
-vitalik- вне форума  
Непрочитано 07.02.2018, 15:25  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,402
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Atmel studio, как правильно таскать данные с flash памяти?

Проблема решена.
Начальные элементы масивов программа брала с адресов, кратных :хххх0000. В распечатке hex файла отлично было видно, как c :100B0000 начиналось считывание, а это была середина масива меандра. Сразу за ним - шел масив синуса. И при генерации синуса - хваталась вторая половина для меандра и первая половина для синуса.
Как заставить компилятор запхнуть масивы так, что бы начала их ложились в нужные адреса - я не знаю.
Поэтому было решено в лоб - сместить масивы в памяти, путем добавления мусора в hex. Три десятка байт - хватило для счастья. Не жалко, ибо у атмеги их аж 16к.
Цель достигнута, данные считываются корректно.
-vitalik- вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Atmel Studio и переменные valenok Песочница (вопросы новичков) 1 11.01.2016 17:25
stm32f415 использование памяти flash bass1981 ARM 7 05.04.2015 10:47
Сбросить настройки atmel studio к умолчанию Leo. Песочница (вопросы новичков) 3 13.12.2014 23:51
USB Flash Drive - Как восстановить данные? nerozero Микроконтроллеры, АЦП, память и т.д 9 18.06.2012 16:34


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot