Автор Тема: перевести с ардуиновского на русский  (Прочитано 5589 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Опять в трёх соснах заблудился. Пытаюсь перевести библиотеку от ардуиновского быстрого преобразования Фурье в язык, понятный CCS6.
Какая-то загвоздка с типами данных вышла - не могу понять.
Выкладываю скриншот, а также исходные arduino и мои исправленные MSP430 архивы с прогой. Помогите, плиз, братцы ;-[
(Извините, но у Вас нет доступа в Галерею)
(Извините, но у Вас нет доступа в Галерею)
(Извините, но у Вас нет доступа в Галерею)

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Re: перевести с ардуиновского на русский
« Ответ #1 : 28 Апреля 2014, 22:48:32 »
0
Преобразование типов. Указателю на char нельзя присвоить значение char.
1. char c ='c';
2. char *p = &c;

Оффлайн blindman

  • Старожил
  • *****
  • Сообщений: 798
  • Репутация: 13
  • Андрей
  • Поблагодарили: +18
Re: перевести с ардуиновского на русский
« Ответ #2 : 29 Апреля 2014, 02:36:23 »
0
Тут дело в том, как компилятор avr-gcc работает c данными, размещенными в флэш-памяти. Хотя атрибут PROGMEM и говорит, что массив Sinewave размещается в флэш, компилятор непосредственно не может обращаться к элементам такого массива. Поэтому используется семейство функций pgm_read_*, которые в качестве аргумента принимают адрес во флэше. На самом деле это макроопределения, а не функции, но не суть важно. Компилятор для MSP430 может обращаться к константным данным непосредственно, для него надо писать так же, как если бы данные были в обычном массиве

AVR:
wr =  pgm_read_word_near(Sinewave + j+N_WAVE/4);

MSP430:
wr =  Sinewave[j+N_WAVE/4];

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Re: перевести с ардуиновского на русский
« Ответ #3 : 29 Апреля 2014, 20:56:13 »
0
AVR:
wr =  pgm_read_word_near(Sinewave + j+N_WAVE/4);

MSP430:
wr =  Sinewave[j+N_WAVE/4];
Так и  сделал и там и там. Скомпилировалось :yah:
Спасиб, Андрей :fr:

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
3580 Просмотров
Последний ответ 05 Апреля 2020, 20:43:16
от Viktor D