Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSP430 - снова вопросы от чайника
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Страницы: 1, 2, 3, 4, 5, 6
Daria
Опять я smile.gif
Такой вопрос - такое впечатление, что мне может не хватить размера ОЗУ - вычислений оказывается надо делать много, куча массивов данных. Как быть - возможен ли такой вариант - писать что-то (например, массивы ко-тов фильтров) во flash, чтобы они не висели в стеке?
Еще про WDT smile.gif Что, если в программе будет какой-то невыявленный при испытаниях глюк, который выявится уже в процессе использования? Проц зависнет где-нибудь в прерывании... и будет висеть. А WDT это дело предотвратит. Так или не так? smile.gif
Сергей Борщ
Цитата(Daria @ Oct 14 2008, 21:27) *
Как быть - возможен ли такой вариант - писать что-то (например, массивы ко-тов фильтров) во flash, чтобы они не висели в стеке?
Возможен. Объявляйте их с квалификатором const. Но при этом они становятся неизменяемыми.
Цитата(Daria @ Oct 14 2008, 21:27) *
Еще про WDT smile.gif Что, если в программе будет какой-то невыявленный при испытаниях глюк, который выявится уже в процессе использования? Проц зависнет где-нибудь в прерывании... и будет висеть. А WDT это дело предотвратит. Так или не так? smile.gif
Так. Именно для этого его и придумали. Надо лишь Придумать алгоритм его периодического сбрасывания, чтобы он не сбросил вашу штатно работающую программу и чтобы при подвисании одной части он не продолжал успешно сбрасываться в другой.
Daria
Такой вопрос. Почему-то не получается объявить фукнцию, работающую с двумерным массивом, размер которого можно бы было передавать как формальный параметр. На function(float а[][]) ругается, а если писать function (float** a), а потом передавать конкретный массив float m[5][5] как function(m), то функция вообще не выполняется, хотя никаких ошибок не пишет : 07.gif Как это вообще делается? 05.gif
И еще - есть уравнение четвертой степени ax^4+bx^3+cx^2+dx+e=0
Как бы можно было реализовать его решение, если коэффициенты a,b,c,d,e будут вычислены по данным АЦП? Это вообще возможно на таком кристалле? Ну, есть методы решения уравнений в общем виде - метод деления отрезка пополам, например. Но во-первых, нужно знать область, на которой функция меняет знак, во-вторых искать пределы последовательностей 07.gif Если вдруг кто-нибудь когда-нибудь делал, подскажите.
А про массив - обязательно подскажите! biggrin.gif
rezident
Цитата(Daria @ Oct 18 2008, 22:50) *
Такой вопрос. Почему-то не получается объявить фукнцию, работающую с двумерным массивом, размер которого можно бы было передавать как формальный параметр. На function(float а[][]) ругается, а если писать function (float** a), а потом передавать конкретный массив float m[5][5] как function(m), то функция вообще не выполняется, хотя никаких ошибок не пишет : 07.gif Как это вообще делается? 05.gif
Вы поймите, что многомерные массивы это лишь такая человеческая абстракция. В памяти МК многомерные массивы все равно представляются в виде одномерных участков оперативной памяти.
У вас многомерный массив переменных типа float. Единичным элементом массива является переменная типа float. Так вот и передавайте в функцию указатель на переменную типа float.
Объявление функции
Код
void func (float *ptr);

Вызов функции
Код
func(&a[0][0]);

либо
Код
float *ptr=&a[0][0];
func(ptr);

Если же вы хотите, чтобы в результате выполнения функции передаваемый указатель тоже изменился, только тогда нужно передавать указатель на указатель.
Код
void func (float **pFptr)
{ float *ptr=pFptr;

  ...

  *pFptr=ptr;
}

вызов функции
Код
float *ptr=&a[0][0];
func(&ptr);

Насчет второй части вопроса, увы! не могу подсказать sad.gif Не настолько я силен в математике laughing.gif
SSerge
Начиная с 99 года в С стало возможно описывать массивы с переменной длинной, IAR этот стандарт поддерживает. Кстати, в Фортране подобное было с самого начала, не прошло и полвека. smile.gif
Ниже примеры из текста стандарта ISO/IEC 9899:1999
Код
EXAMPLE 3 The following declarations demonstrate the compatibility rules for variably modified types.
   extern int n;
   extern int m;
   void fcompat(void)
   {
      int  a[n][6][m];
      int  (*p)[4][n+1];
      int  c[n][n][6][m];
      int  (*r)[n][n][n+1];
      p = a; // invalid: not compatible because  4 != 6
      r = c; // compatible, but defined behavior only if
             // n == 6 and m == n+1
   }

EXAMPLE 4 All declarations of variably modified (VM) types have to be at either block scope or
function prototype scope. Array objects declared with the static or extern storage-class specifier
cannot have a variable length array (VLA) type. However, an object declared with the static storageclass
specifier can have a VM type (that is, a pointer to a VLA type). Finally, all identifiers declared with a
VM type have to be ordinary identifiers and cannot, therefore, be members of structures or unions.

   extern int n;
   int A[n];             // invalid: file scope VLA
   extern int (*p2)[n];  // invalid: file scope VM
   int B[100];           // valid: file scope but not VM

   void fvla(int m, int C[m][m]); // valid: VLA with prototype scope

   void fvla(int m, int C[m][m]) // valid: adjusted to auto pointer to VLA
   {
      typedef int VLA[m][m];     // valid: block scope typedef VLA

      struct tag {
         int (*y)[n];     // invalid: y not ordinary identifier
         int z[n];        // invalid: z not ordinary identifier
      };
      int D[m];                  // valid: auto VLA
      static int E[m];           // invalid: static block scope VLA
      extern int F[m];           // invalid: F has linkage and is VLA
      int (*s)[m];               // valid: auto pointer to VLA
      extern int (*r)[m];        // invalid: r has linkage and points to VLA
      static int (*q)[m] = &B;   // valid: q is a static block pointer to VLA
   }


Примерно так должно работать (не проверял):
Код
float func( int i; int j; float a[i][j] )
{
   float s = 0.0;
   for( int ii = 0; ii < i; ii++)
      for( int jj = 0; jj < j; jj++)
         s += a[ii][jj];

   return s;
}

float m[5][5];
float mm[25][3];

func( 5, 5, m );
func( sizeof(mm)/sizeof(mm[0]), sizeof(mm[0])/sizeof(mm[0][0]), mm );
Daria
Цитата(SSerge @ Oct 19 2008, 05:36) *
Начиная с 99 года в С стало возможно описывать массивы с переменной длинной, IAR этот стандарт поддерживает.

Спасибо за пример. То, что вообще в С возможно, я понимаю, в билдере можно и function( float a[][]), и function(float**a). Про IAR rezident объяснил. Спасибо всем!
yanita
Немного не в тему, но зато от чайника. Есть ли готовая макетная плата с контроллером MSP430 с АЦП и ЦАП?
LCD
Цитата(yanita @ Oct 20 2008, 19:16) *
Немного не в тему, но зато от чайника. Есть ли готовая макетная плата с контроллером MSP430 с АЦП и ЦАП?

Да, например, вот эта: http://www.terraelectronica.ru/pdf/OLIMEX/MSP430-H1611.pdf
Daria
Цитата(yanita @ Oct 20 2008, 19:16) *
Немного не в тему, но зато от чайника. Есть ли готовая макетная плата с контроллером MSP430 с АЦП и ЦАП?

О! В нашем полку чайников прибыло biggrin.gif a14.gif
rezident, или кто-нибудь еще -
А есть ли какие-нибудь функции, позволяющие организовать память как массив массивов(мне, как чайнику, было бы удобнее и понятнееsmile.gif ) То есть, можно, конечно просто создавать массив, в котором содержатся адреса массивов, и вот с этим массивом тогда запросто работать, но, может, есть какие-то готовые функции, чтобы не париться с объявлением всех этих массивов?
(Вот оно, нестандартное женское мышление, это оно biggrin.gif )
Да, и все-таки про уравнение - никто, значит, не сталкивался? smile.gif
Daria
А вот вопрос - у какого кристалла MSP самое большое ОЗУ? smile.gif
И нет ли у кого ссылочки на перевод руководства по IAR на русский язык(если такой перевод есть)?
rezident
Цитата(Daria @ Oct 24 2008, 00:52) *
А вот вопрос - у какого кристалла MSP самое большое ОЗУ? smile.gif

Из доступных: MSP430F1611 - 10240 байт ОЗУ, а вообще выбирайте сами => Product Brochure
zhevak
Цитата(Daria @ Oct 24 2008, 00:52) *
А вот вопрос - у какого кристалла MSP самое большое ОЗУ? smile.gif
И нет ли у кого ссылочки на перевод руководства по IAR на русский язык(если такой перевод есть)?

Т.е. самой поискать на сайте производителя уже влом? Тогда вот ссылка --
http://focus.ti.com/paramsearch/docs/param...&family=mcu

В четвертом списке указываете максимальный объем оперативы (только не перепутайте "B" и "KB", они там не "по-росту" стоят!) и жмите на ссылку "Show me" (там же -- под списками).


Я так подозреваю, что оператива жрет много, поэтому TI старается ее особо не раздувать.
Дарья, может быть Вы все-таки не тот проц выбрали под свою задачу? Може стоило посмотреть на LPC или AVR. На сколько я понимаю, у Вас в задаче присутствуют достаточно интенсивные вычисления. А при интенсивных вычислениях MSP430 потребляет примерно столько же, что и другие процы. Вы потребляемый ток мерили? Можете назвать цифру? (Просто любопытно.)


ЗЫ.
Попутно для всех. Просто для информации. Не по теме.
У меня тут намедни в процессе настройки в одном девайсе у TPS71533 случайно оборвалась лапка земли, и стабилизатор погнал "много" напряжения на MSP430F2001. "Много" -- это 6.8 В. Проц был "под напряжением" около десятка минут. Девайс работал исправно, я даже сдуру подумал, что навернулся тестер и пошел по этой версии. Это уж потом, через время я убедился, что тестер исправен.

Что удивительно -- микруха живая, даже флешь не слетела. Проц и сейчас работает нормально, претензий нет. Понятно, что в поставку этот экземпляр уже не пойдет. Но сам факт меня удивил.
Daria
Цитата(rezident @ Oct 23 2008, 23:07) *
Из доступных: MSP430F1611 - 10240 байт ОЗУ, а вообще выбирайте сами => Product Brochure

Ух ты. спасибо

Цитата(zhevak @ Oct 23 2008, 23:37) *
Дарья, может быть Вы все-таки не тот проц выбрали под свою задачу?

Да нет, нормально, это я на будущее смотрю smile.gif К тому же я не выбирала, мне его ВЫДАЛИ biggrin.gif

Цитата(zhevak @ Oct 23 2008, 23:37) *
А при интенсивных вычислениях MSP430 потребляет примерно столько же, что и другие процы. Вы потребляемый ток мерили? Можете назвать цифру? (Просто любопытно.)

Да нет, интенсивные вычисления будут примерно один раз в день, при первоначальном включении. Потом все потихоньку smile.gif да и этих вычислений не должно было бы быть, просто особенности конструкции изделия, заставляют придумывать какую-то извращенную калибровку smile.gif
А про ток сейчас на вскидку не могу сказать - вся плата потребляет 40 мА, но это потому, что разводил ее чел, тоже не очень далеко от меня ушедший, он поставил там импульсники, которые жутко много потребляют. Сколько потребляет сам проц высчитывать неохота smile.gif Но, думаю, когда спаяем новую плату, в обычном режиме работы все будет в этом смысле ок smile.gif
Спасибо за ссылочку и советы - я действительно обленилась, Вы правы smile.gif
rezident
Цитата(zhevak @ Oct 24 2008, 01:37) *
Я так подозреваю, что оператива жрет много, поэтому TI старается ее особо не раздувать.
В MSP430 ОЗУ статическое посему потребляет оно немного, особенно в статическом режиме, когда ядро "спит". А вот по площади на кристалле SRAM занимает значительно больше места, чем Flash такого же объема. Да и по стоимости SRAM дороже выходит. Если очень грубо оценивать, то один бит SRAM это один триггер или около десятка транзисторов, а один бит Flash это один транзистор с плавающим затвором.
Цитата(zhevak @ Oct 24 2008, 01:37) *
Дарья, может быть Вы все-таки не тот проц выбрали под свою задачу?
У меня тоже такое же впечатление начинает складываться cranky.gif
Цитата(Daria @ Oct 24 2008, 02:03) *
А про ток сейчас на вскидку не могу сказать - вся плата потребляет 40 мА, но это потому, что разводил ее чел, тоже не очень далеко от меня ушедший, он поставил там импульсники, которые жутко много потребляют. Сколько потребляет сам проц высчитывать неохота smile.gif
Навскидку. Если выходы не нагружены чем-то непотребным, то думаю никак не более 5мА потребляет.
Daria
Такой вопрос - вычисление во float-числах намного медленнее, чем в int? К примеру, сколько тактов процессора нужно для вычисления произведения двух float-чисел? А double?
Сергей Борщ
Цитата(Daria @ Oct 26 2008, 22:47) *
К примеру, сколько тактов процессора нужно для вычисления произведения двух float-чисел? А double?
А написать
Код
void main()
{
    volatile float Tmp1 = 1.2345;
    volatile float Tmp2 = 678.9;
    volatile Tmp3 = Tmp1 * Tmp2;
   // аналогично для целых
   ........
}
и прогнать в симуляторе лень? На всякий случай: количество тактов зависит от перемножаемых чисел и от реализации алгоритма. Но приблизительный порядок вы таким образом узнаете.
rezident
Цитата(Сергей Борщ @ Oct 27 2008, 03:01) *
На всякий случай: количество тактов зависит от перемножаемых чисел и от реализации алгоритма.
Еще добавлю, что зависит от наличия/использования аппаратного модуля перемножителя. Если он используется, то на целых числах отличия по количеству тактов в несколько раз получаются.
Daria
Так. Мне все-таки придется решать уравнение четвертой степени 05.gif
Точно никто не делал? smile.gif Насколько вообще реализуема эта задача? Может сразу заказать этот MSP430F1611 c 10KB ОЗУ? Хотя вобще-то решать его нужно один раз, при первоначальной калибровке, при включении питания. Время не ограничено - пока не решит, можно ждать. Но сам принцип? 05.gif
Вот если знать отрезок, на которой функция(многочлен в левой части) меняет знак, то методом последовательных приближений(делением отрезка пополам, например)можно получить решения с точностью, обусловленной числом итераций. Но как найти диапазон значений? sad.gif коэффициенты при переменной вычисляются из данныйх АЦП по двум каналам, и двум значениям кренов. Диапазоны значений АЦП и кренов, естесственно известны. Но по шести параметрам определить область функции... маткад, например, зависнет crying.gif
Вообще, кто-нибудь решал уравнения на MSP? Отзовитесь, если вдруг.
Измеритель верёвочками
Если вам поможет для ваших прикидок, то у меня прибор использует при интерполяции уравнение параболы. Есть возможность для уточнения показаний во время калибровки вставить точку между двумя существующими. Т.е. грубо говоря, пересчитать две параболы. Правда у меня целочисленка используется с long int. Ничо, всё считает где-то за сотню миллисекунд, может и меньше. Сужу по времени ответа. Хотя в винде по времени попадания данных в буфер интервал можно оценить достаточно приблизительно.
Эт я ещё тактовую не поднимал.
Daria
Цитата(Измеритель верёвочками @ Oct 30 2008, 13:05) *
Если вам поможет для ваших прикидок, то у меня прибор использует при интерполяции уравнение параболы. Есть возможность для уточнения показаний во время калибровки вставить точку между двумя существующими. Т.е. грубо говоря, пересчитать две параболы. Правда у меня целочисленка используется с long int. Ничо, всё считает где-то за сотню миллисекунд, может и меньше. Сужу по времени ответа. Хотя в винде по времени попадания данных в буфер интервал можно оценить достаточно приблизительно.
Эт я ещё тактовую не поднимал.

О! Спасибо, что откликнулись. По поводу параболы - решаете квадратное уравнение ax^2+bx+c? но оно вообще говоря может не иметь действительных решений, если D=sqrt(b^2-4ac)<0/ Какпоступаете? решение +-sqrt(D)/2a может быть мнимым числом - контроллер посчитает полную фигню. С моим уравнением четвертой степени та же история. Просто пробросить эту точку я не могу, как считаете можно ли брать модуль D? Сложно оценить погрешность... sad.gif
И еще -ВОПРОС КО ВСЕМsmile.gif Программа не готова, а мне уже надо начинать документацию. и вот какое дело - на плате предусмотрены разъемы и для программирования по JTAG, и для BSL. JTAG fuse я пережгу, но все равно останется возможность доступа к программе по BSL - по крайней мере стереть можно 05.gif Как полностью закрыть доступ к прошитой программе и по BSL? Разъем убирать уже поздно...
ОЧЕНЬ ВАЖНЫЙ ВОПРОС!
Как всегда простите за дилетантство smile.gif
rezident
Цитата(Daria @ Nov 1 2008, 22:30) *
JTAG fuse я пережгу, но все равно останется возможность доступа к программе по BSL - по крайней мере стереть можно 05.gif Как полностью закрыть доступ к прошитой программе и по BSL? Разъем убирать уже поздно...
Могу вас еще больше разочаровать. В прошивке BSL версии 1.10, которая используется в кристаллах MSP430F14x, имеется (отраженный в errata как BSL3) баг с помощью которого можно считать прошивку целиком. Так что, полностью защитить ваше устройство от толкового эмбеддера, занимающегося reverse engineering, вы не сможете laughing.gif Для затруднения этой задачи нужно хотя бы применить кристалл с другой (более старшей) версией BSL, типа MSP430F16x. Вы ведь все равно хотели MSP430F1611 с 10кБ ОЗУ применить, вот вам и формальное обоснование для замены smile.gif А для защиты от случайного или преднамеренного стирания прошивки сделайте, например, механический разрыв дорожки, ведущей от разъема BSL к пину P1.1. Короче скальпелем дорожку почикайте wink.gif
Daria
Цитата(rezident @ Nov 1 2008, 22:24) *
Могу вас еще больше разочаровать. В прошивке BSL версии 1.10, которая используется в кристаллах MSP430F14x, имеется (отраженный в errata как BSL3) баг с помощью которого можно считать прошивку целиком. Так что, полностью защитить ваше устройство от толкового эмбеддера, занимающегося reverse engineering, вы не сможете laughing.gif Для затруднения этой задачи нужно хотя бы применить кристалл с другой (более старшей) версией BSL, типа MSP430F16x. Вы ведь все равно хотели MSP430F1611 с 10кБ ОЗУ применить, вот вам и формальное обоснование для замены smile.gif А для защиты от случайного или преднамеренного стирания прошивки сделайте, например, механический разрыв дорожки, ведущей от разъема BSL к пину P1.1. Короче скальпелем дорожку почикайте wink.gif

Беда crying.gif Кристалл заменить я уже тоже не могу, это я справшивала для следуещего образца, а в этом, который как опытный пойдет - плата разведена, размеры и комплектуха везде прописаны, в документации мне надо ОБЯЗАТЕЛЬНО указать, как я защищаюсь от "посторонних". не писать же - после прошивки почикайте дорожку. biggrin.gif Беда, беда. Огорчение. Придется "умолчать" о разъеме для BSL и надеяься, что "не заметят"
rezident
Цитата(Daria @ Nov 1 2008, 23:34) *
в этом, который как опытный пойдет - плата разведена, размеры и комплектуха везде прописаны
А вы всего лишь одну цифирьку в спецификации исправьте wink.gif Вместо MSP430F149IPM укажите MSP430F169IPM. Они же пин-ту-пин совместимые, размер Flash и SRAM одинаковый, набор периферийных модулей 169-го больше и включает все те же модули, что имеются в 149-й. Так что вероятнее всего даже программу перекомпилировать под 169-й кристалл не обязательно. Зато в MSP430F169 версия BSL 1.61 для которой баг BSL3 уже пофиксен. Хотя вероятность затереть firmware через BSL конечно же остается.
Измеритель верёвочками
Цитата(Daria @ Nov 1 2008, 22:30) *
О! Спасибо, что откликнулись. По поводу параболы - решаете квадратное уравнение ax^2+bx+c? но оно вообще говоря может не иметь действительных решений, если D=sqrt(b^2-4ac)<0/ Какпоступаете?

Кричу: АЛЯРМА!!! Чо-то неправильно ввели!
Но по-моему не было у меня такого, ибо я введённые значения для индикации в контрольной точке банально проверяю на вхождение в диапазон. Значения АЦП беру сам. Т.е. зная значение АЦП (грубо говоря Х) и значение параметра в данной точе и будучи уверенным, что оно лежит в нужных пределах, я могу сказать, что решение будет валидным.

Цитата
решение +-sqrt(D)/2a может быть мнимым числом - контроллер посчитает полную фигню. С моим уравнением четвертой степени та же история. Просто пробросить эту точку я не могу, как считаете можно ли брать модуль D?

Я не знаю вашей ситуации.

Цитата
Сложно оценить погрешность... sad.gif

Как мне кажется, сам АЦП будет давать большую погрешность, чем ваши методы расчётов и плавающая арифметика.

Цитата
И еще -ВОПРОС КО ВСЕМsmile.gif Программа не готова, а мне уже надо начинать документацию.

Это обычное дело.

Цитата
и вот какое дело - на плате предусмотрены разъемы и для программирования по JTAG, и для BSL. JTAG fuse я пережгу, но все равно останется возможность доступа к программе по BSL - по крайней мере стереть можно 05.gif Как полностью закрыть доступ к прошитой программе и по BSL? Разъем убирать уже поздно...
ОЧЕНЬ ВАЖНЫЙ ВОПРОС!
Как всегда простите за дилетантство smile.gif

Если изделие будет законченным (т.е. в корпусе и т.д.), то пломбировкой. От чтения вы никак не защититтесь. Если уж захотят считать, то считают полюбому. Разворачивайте сервис, обслугу прибора и люди к вам потянутся.
Daria
Цитата(rezident @ Nov 1 2008, 23:32) *
Хотя вероятность затереть firmware через BSL конечно же остается.

crying.gif Проще наверное все-таки умолчать о возможности BSL smile.gif Разъем совмещен с внешним - на COM, так что можно попытаться сделать вид, что BSL выводы "просто так".


Цитата(Измеритель верёвочками @ Nov 1 2008, 23:47) *
Как мне кажется, сам АЦП будет давать большую погрешность, чем ваши методы расчётов и плавающая арифметика.

Хм. Вы так думаете? Да вроде нет, задаю максимальную длительность выборки, усредняю по 200 отсчетов(мкс), да и АЦП 12 разрядов - довольно точно, по-моему. По крайней мере, когда смотрю результаты преобразования АЦП в одном положении, то разница между данными максимум в 2 отсчета АЦП, погрешность 2/4096=0,04%
или вы не об этом? Я чего-то не понимаю? 05.gif
Цитата(Измеритель верёвочками @ Nov 1 2008, 23:47) *
Если изделие будет законченным (т.е. в корпусе и т.д.), то пломбировкой. От чтения вы никак не защититтесь. Если уж захотят считать, то считают полюбому. Разворачивайте сервис, обслугу прибора и люди к вам потянутся.

Пломбировка - это, конечно, хорошо smile.gif Но это не мое дело, мне вот вынь да положь описание, как именно я защищаю программу от доступа smile.gif Вообще если когда-то будет серия, то мне, как я понимаю, вообще не нужны будут разъемы на плате, можно грузить этим e-z430 или как он называется и не париться. Но так как изделие еще делается, и делаться будет долго, то вот заложила целых два разъема, на случай, если jtag fuse уже пережгу, и вдруг что-то еще всплывет, и надо будет перепрошить. Вот. а теперь оказалось, что наоборот - надо защищаться. Мне-то, кстати, не жалко - пусть считывают - они там в моей женской логике ничего не поймут biggrin.gif
кстати, с датчиками LIS3L06AL никто не работал? Это в теме, потому что про компас biggrin.gif Если никто, то и ладно, придется поднимать новую тему... мне просто интересно, какие операционники с ним ставить и как включать, что-то как-то ничего хорошего не получается sad.gif
zhevak
Цитата(Daria @ Nov 2 2008, 22:48) *
они там в моей женской логике ничего не поймут biggrin.gif

Вот это тема! Работать работает. А как -- хрен поймешь! Поневоле свой код с нуля будет написать дешевле. Это в том смысле, если кто будет займаться реинжинирингом Вашего девайса. А если серьезно, то для пиратов это ... ха-ха, они даже и разбираться не будут. Закопипастят и все дела.

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

Почему узкоглазые так поперли? -- Потому что у них дешевое производство, дешевая рабочая сила.
Почему у нас так хреново? -- Потому что, мы не умеем делать большие серии недорогих изделий. Точнее так -- изделия у нас почему-то получаются дорогими, гы-гы. Догадываетесь почему?
rezident
Цитата(Daria @ Nov 2 2008, 21:48) *
crying.gif Проще наверное все-таки умолчать о возможности BSL smile.gif Разъем совмещен с внешним - на COM, так что можно попытаться сделать вид, что BSL выводы "просто так".

Цитата(Daria @ Nov 2 2008, 21:48) *
Но так как изделие еще делается, и делаться будет долго, то вот заложила целых два разъема, на случай, если jtag fuse уже пережгу, и вдруг что-то еще всплывет, и надо будет перепрошить. Вот. а теперь оказалось, что наоборот - надо защищаться.

В таком случае BSL как опциональный разъем (отверстия на плате) можно оставить, а в прошивке реализовать свой собственный загрузчик с шифрованием типа AES. Но вообще нужно знать: что именно и от кого защищаем?
Daria
Цитата(rezident @ Nov 3 2008, 01:21) *
В таком случае BSL как опциональный разъем (отверстия на плате) можно оставить, а в прошивке реализовать свой собственный загрузчик с шифрованием типа AES. Но вообще нужно знать: что именно и от кого защищаем?

Свой собственный загрузчик - это мне, наверное, еще не под силу crying.gif А от кого защищаемся - это надо спросить у заказчика, надо полагать - от враговbiggrin.gif

Цитата(zhevak @ Nov 2 2008, 23:10) *
Почему узкоглазые так поперли? -- Потому что у них дешевое производство, дешевая рабочая сила.
Почему у нас так хреново? -- Потому что, мы не умеем делать большие серии недорогих изделий. Точнее так -- изделия у нас почему-то получаются дорогими, гы-гы. Догадываетесь почему?

Да, жутко дорогими или жутко огромными(если делать на отечественной комплектации, как у нас призывают), да и делаются жутко медленно(особенно если делают такие, как я biggrin.gif )
zhevak
Цитата(Daria @ Nov 3 2008, 15:48) *
А от кого защищаемся - это надо спросить у заказчика, надо полагать - от враговbiggrin.gif

Врага нужно идентифицировать. Можно защититься только от конкретного врага -- выдвигая конкретные контр-меры. А от гипотетического врага вообще нет никакой защиты, ибо о враге вы можете мыслить так, а на самом деле его оружие окажется на порядок совершеней Вашей защиты. И что тогда?
Dog Pawlowa
Цитата(zhevak @ Nov 3 2008, 16:25) *
Врага нужно идентифицировать. Можно защититься только от конкретного врага -- выдвигая конкретные контр-меры. А от гипотетического врага вообще нет никакой защиты, ибо о враге вы можете мыслить так, а на самом деле его оружие окажется на порядок совершеней Вашей защиты. И что тогда?

Насколько я понял, враг идентифицирован - это начальник. Это он защиту хочет.
Защита тоже стандартная - прикинуться дурочкой. "А я не знала, что BSL баг".
Одобряю! biggrin.gif
Daria
Цитата(Dog Pawlowa @ Nov 3 2008, 16:50) *
Насколько я понял, враг идентифицирован - это начальник. Это он защиту хочет.
Защита тоже стандартная - прикинуться дурочкой. "А я не знала, что BSL баг".
Одобряю! biggrin.gif

biggrin.gif Ну, в основном заказчик. biggrin.gif Начальник-то не будет вникать во всякие BSL-и, а заказчик может. И "не знала" не прокатит. Тут скорее - "не подумала", а потом "признаю свою вину. меру, степень, глубину", "все исправим, но потом". Главное, чтобы сначала прокатило biggrin.gif Эх, вот уравнение решаться не хочет - это, действительно, проблема... crying.gif
Dog Pawlowa
Цитата(Daria @ Nov 4 2008, 02:53) *
Эх, вот уравнение решаться не хочет - это, действительно, проблема... crying.gif

А что уравнение, Дарья? Перебором пробовали?
Daria
Цитата(Dog Pawlowa @ Nov 4 2008, 10:54) *
А что уравнение, Дарья? Перебором пробовали?

Эге! перебором! Решение-то может быть дробным, и лежит оно в диапазоне примерно от 500 до 2500 biggrin.gif Нет, конечно, пытаюсь методом последовательных приближений, но не знаю способ подобрать хорошее начальное приближение... В общем, надо пытаться придумать другой способ, без уравнения четвертой степени. Ох, нехорошие у меня предчувствия...
Dog Pawlowa
Цитата(Daria @ Nov 4 2008, 21:06) *
В общем, надо пытаться придумать другой способ, без уравнения четвертой степени.

Ну, метод последовательных приближений - это немного улучшенный перебор smile.gif
Обычно помогает физическая модель, максимально приближенная к реальности.
А когда модели нет ... . Мой последний опыт был 17-летней давности, подбор коэффициентов происходил за 15-20 с на PC XT.
Мир не изменился - теперешний MSP430 по быстродействию не хуже тогдашнего 8086.
Требования по быстродействию есть?
Daria
Цитата(Dog Pawlowa @ Nov 4 2008, 21:29) *
Ну, метод последовательных приближений - это немного улучшенный перебор smile.gif
Обычно помогает физическая модель, максимально приближенная к реальности.
А когда модели нет ... . Мой последний опыт был 17-летней давности, подбор коэффициентов происходил за 15-20 с на PC XT.
Мир не изменился - теперешний MSP430 по быстродействию не хуже тогдашнего 8086.
Требования по быстродействию есть?

Нет. можно ждать хоть минуту. Но коэффициенты-то как раз будут известны, они вычисляются по четырем возможным значениям кренов и четырем данным АЦП. Вопрос как решить. И что делать, если решение - мнимое... А Вы занимались-таки решением уравнений? wink.gif Может кинете какие-нибудь примеры, так, для размышления... Если не очень наглая просьба smile.gif
Dog Pawlowa
Цитата(Daria @ Nov 4 2008, 23:06) *
А Вы занимались-таки решением уравнений? wink.gif Может кинете какие-нибудь примеры, так, для размышления...

Нет, Дарья, "в любви я теоретик". smile.gif
Точнее, это было очень давно, а мозг, как недавно выяснили ученые, начинает разрушаться уже в 39.
Там уже ничего не осталось. crying.gif
Кроме того, решение уравнений не даст ответа, что делать, если решения нет... Или их два...
Может, конфетку?
Daria
Цитата(Dog Pawlowa @ Nov 5 2008, 10:07) *
Нет, Дарья, "в любви я теоретик". smile.gif
Точнее, это было очень давно, а мозг, как недавно выяснили ученые, начинает разрушаться уже в 39.
Там уже ничего не осталось. crying.gif
Кроме того, решение уравнений не даст ответа, что делать, если решения нет... Или их два...
Может, конфетку?

Ну, только если "К звездам" - вкусная вещь...
VAI
У меня была задача по нескольким точкам Интерполяция табличной функции кубичным сплайном. получить функцию преобразования прибора. Заренее известно, что эта функция проходит через точку (0,0), монотонно возрастает, никаких перегибов нет.
Вначале, я, выбрав апроксимирующую кривую, методом переборов подбирал её коэффициенты, в следующей версии делал регрессионный анализ, но проще всего и точнее оказалось интерполировать кубичным сплайном.
Как раз в то время на телесиськах попались исходники на паскале, я их подправил, исправил ошибки и сейчас использую практически везде.
Если у Вас подобная задача, то могу выложить...
Daria
Цитата(VAI @ Nov 6 2008, 07:23) *
У меня была задача по нескольким точкам Интерполяция табличной функции кубичным сплайном. получить функцию преобразования прибора. Заренее известно, что эта функция проходит через точку (0,0), монотонно возрастает, никаких перегибов нет.

У меня, к сожалению, перегибы как раз есть, так как многочлен четвертой степени это что-то вроде двойной параболы.
Цитата(VAI @ Nov 6 2008, 07:23) *
Если у Вас подобная задача, то могу выложить...

Не совсем... Но пригодится. smile.gif выкладывайте, конечно! Или в личку, если не хотите здесь.
спасибо
а вот такой вопрос - в принципе ко всем - у меня происходит умножение и деление на синусы и косинусы очень маленьких углов, и даже на квадраты синусов и косинусов. Когда решаю, проц, как я понимаю, отождествляет это с делением на ноль. получается фигня. как можно было бы решить проблему - работать нужно с очень маленькими числами, вплоть до 0,000289 (sin^2(1)) 05.gif
zhevak
Цитата(Daria @ Nov 7 2008, 00:15) *
а вот такой вопрос - в принципе ко всем - у меня происходит умножение и деление на синусы и косинусы очень маленьких углов, и даже на квадраты синусов и косинусов. Когда решаю, проц, как я понимаю, отождествляет это с делением на ноль. получается фигня. как можно было бы решить проблему - работать нужно с очень маленькими числами, вплоть до 0,000289 (sin^2(1)) 05.gif

Подсказка. На малых углах, вместо функции синуса можно смело подставлять сам аргумент. Будет работать. Причем существенно быстрее.

Вспомните: lim sin(x)/x = 1, при х->0.
Dog Pawlowa
Цитата(Daria @ Nov 6 2008, 22:15) *
- у меня происходит умножение и деление на синусы и косинусы очень маленьких углов, и даже на квадраты синусов и косинусов. Когда решаю, проц, как я понимаю, отождествляет это с делением на ноль. получается фигня. как можно было бы решить проблему - работать нужно с очень маленькими числами, вплоть до 0,000289 (sin^2(1))

Обычно программист добавляет контроль промежуточных значений вычислений чтобы не произошло превышение возможного диапазона вычислений. Особенно это актуально для целочисленной математики. Вы пример вычислений выложите, будем думать.
VAI
Цитата
Как раз в то время на телесиськах попались исходники на паскале, я их подправил, исправил ошибки и сейчас использую практически везде.

Вот.
Daria
smile.gif
Цитата(Dog Pawlowa @ Nov 7 2008, 09:13) *
Обычно программист добавляет контроль промежуточных значений вычислений чтобы не произошло превышение возможного диапазона вычислений. Особенно это актуально для целочисленной математики. Вы пример вычислений выложите, будем думать.

Спасибо за предложение подумать вместе smile.gif
Сначала вопрос не по этой теме - у меня есть побочная задача. не относящаяся к компасному модулю:
Нужно очень быстро уходить в "спящий режим" и "пробуждаться". Т.е. контроллер должен принять данные, выполнить какие-то действия и "уснуть" до следующей команды, причем потратить на все как можно меньше времени.
Правильно ли я понимаю, что нужно сначала сконфигурировать периферию, затем в цикле for(;;); выполнить необходимые действия, сконфигурировать выход RST/NMI как вход вызова прерывания, и установить, например, биты OSCOFF, CPUOFF,SCG0, SCG1 для входа в LPM4. Тогда при появлении "0" на RST/NMI проц выйдет из режима LPM4 и вернется к выполнению for(;;) без всей первоначальной конфигурации? или все не так? Вообще можно оставлять RST/NMI как вывод сброса, тогда при появлении сигнала на нем, будет сброс и программа начнет выполняться с начала, но придется тратить время на начальную инициализацию sad.gif
теперь про вычисления
После долгих раздумий пытаюсь выполнить такой способ:
Вычисляются три угла alfa, beta, gamma и два числа x, y
cos(alfa)=a,cos(beta)=b, sin(alfa)=c, sin(beta)=c, cos(gamma)^2=w
Составляется квадратное уравнение
t2*z^2 +t1*z +t0=0, где

t0=(ax+cdy)^2+y^2*b^2-(x^2+y^2)*w;
t1=-2bc(ax+cdy)+2ybd;
t2=b^2*c^2+ d^2;

Решение уравнения z=+-sqrt(t1^2-4t0*t2)/2*t2, при условии, при условии, что действительное решение существует, т.е. t1^2-4t0*t2>=0.
Если не сущетсвует, пока не знаю. что делать smile.gif Пробрасывать, наверное.

Ну и вот. x и y примерно от 1000 до 2500, а углы 1-2 или 3- 4 градуса.
Если, например, по 2 градуса, то в знаменателе 2*t2=0.00217.
Заменить синусы на сами углы... sad.gif тут все дело в оценке погрешности. не думаю, что можно.
Вот такие вопросы.
AHTOXA
Цитата(Daria @ Nov 7 2008, 00:15) *
а вот такой вопрос - в принципе ко всем - у меня происходит умножение и деление на синусы и косинусы очень маленьких углов, и даже на квадраты синусов и косинусов. Когда решаю, проц, как я понимаю, отождествляет это с делением на ноль. получается фигня. как можно было бы решить проблему - работать нужно с очень маленькими числами, вплоть до 0,000289 (sin^2(1)) 05.gif


0,000289 (sin^2(1)) = 0,000000088 - это совсем даже не маленькое числоsmile.gif Деление на него совершенно точно является вполне легитимной операцией.
Для пущей уверенности используйте тип double, а не float.
Daria
бог с ним, с уравнением.
Такой вопрос - в руководстве по MSP указано, что возле вывода RST/NMI нужно располагать "подтягивающий резистор 47 кОм и понижающую емкость 10нФ". Как это понять 07.gif Т.е. нужно просто резистор завести на питание и емкость на землю, типа фильтр? Или что значит "понижающая емкость"?
И все-таки про экономные режимы. Если разрешить прерывания битом NMIIE, сконфигурировать RST/NMI как вход вызова прерывания и выполнить необходимые настройки, потом в цикле for(;;)выполнить необходимые действия и перейти в режим LPM, то после появления на RST/NMI логического 0, будет вызвано NMI прерывание, после выхода из которого программа продолжится с адреса, на которoм остановилась перед прерыванием,т.е в цикле for? Т.е. времени на все про все уйдет совсем немного - около 6 мкс на порбуждение DCO и сколько-то на выполнение действий. Так или не так?
А какая должна быть длительность этого логического "0"? smile.gif
rezident
Поверьте на слово, не нужно вам NMI использовать. sad.gif MSP430 может "просыпаться" от любого другого разрешенного прерывания. А на RST/NMI заведите сигнал сброса от супервизора питания. Кристаллы MSP430 которые не имеют вcтроенного BOR (в частности ваш MSP430F149) использовать без супервизора питания крайне не рекомендуется!
Кроме того, запрограммировав RST как вход NMI, можно нарваться на ситуацию с невозможностью работы BSL. Тут в соседней ветке один товарищ уже "попал" с этим NMI. Тем более, что вы вроде fuse JTAG пережигать собрались.
Daria
Цитата(rezident @ Nov 12 2008, 00:37) *
Поверьте на слово, не нужно вам NMI использовать. sad.gif MSP430 может "просыпаться" от любого другого разрешенного прерывания. Кроме того, запрограммировав RST как вход NMI, можно нарваться на ситуацию с невозможностью работы BSL. Тут в соседней ветке один товарищ уже "попал" с этим NMI. Тем более, что вы вроде fuse JTAG пережигать собрались.

Не, эта задачка не относится к основному изделию, там проц будет использоваться в качестве переходника(принял, обработал, передал дальше), документацию на него отдельно писать не надо, а значит, и fuse пережигать smile.gif Прочитала соседнюю ветку. помимо этой проблемы с BSL какие могут быть проблемы из-за NMI?
Т.е. в принципе можно просто разрешить прерывания UART(их и так нужно разрешить), выполнить программку, перейти в LPM4 и все? Как только поступят данные, придет прерывание, и проц проснется(опять все выполнит и уснет)? Правильно или не очень?
И все-таки не понятно, как долго нужно держать 0 на RST 05.gif

Цитата(rezident @ Nov 12 2008, 00:37) *
А на RST/NMI заведите сигнал сброса от супервизора питания. Кристаллы MSP430 которые не имеют вcтроенного BOR (в частности ваш MSP430F149) использовать без супервизора питания крайне не рекомендуется!

А поподробнее об этом можно? smile.gif Вы же помните, я темная... smile.gif
rezident
Цитата(Daria @ Nov 13 2008, 00:26) *
Прочитала соседнюю ветку. помимо этой проблемы с BSL какие могут быть проблемы из-за NMI?
Проблемы не из-за NMI, а из-за использования входа RST не совсем по назначению.
Цитата(Daria @ Nov 13 2008, 00:26) *
Т.е. в принципе можно просто разрешить прерывания UART(их и так нужно разрешить), выполнить программку, перейти в LPM4 и все? Как только поступят данные, придет прерывание, и проц проснется(опять все выполнит и уснет)? Правильно или не очень?
В принципе правильно, но следует учитывать что в LPM4 все генераторы выключены. Поэтому для того, чтобы успеть принять символ после фиксации фронта старт-бита, UART должен тактироваться от DCO со всеми вытекающими отсюда последствиями. Потому, что только DCO быстро "просыпается" (за 6 мкс примерно), а часовой и высокочастотный генераторы начинают нормально генерить только через сотни мс.
Цитата(Daria @ Nov 13 2008, 00:26) *
И все-таки не понятно, как долго нужно держать 0 на RST 05.gif
А поподробнее об этом можно? smile.gif Вы же помните, я темная... smile.gif
См. скриншот из даташита MSP430F149. Сигнал RST должен удерживаться не менее 2 мкс.
Проблема состоит в том, что внутренний сигнал POR (Power-On-Reset) генерируется только в том случае, когда напряжение питания упадет ниже 0,2В. Но минимальное рабочее напряжение MSP430 составляет 1,8В. Т.е. если питание пропало, но напряжение не опустилось ниже 0,2В (а это очень часто бывает, т.к. MSP430 малопотребляющий) или скорость нарастания/спада напряжения недостаточно высокая (меньше 1В/мс), то сброса МК не будет. При этом микроконтроллер может либо зависнуть, либо несанкционированно выполнять какие-то инструкции, например, стирать флешь smile.gif Поэтому, если вы хотите устройчивую работу и гарантированный сброс контроллера, то используйте внешний супервизор питания, который будет формировать сигнал сброса по снижению напряжения ниже критического. Либо применяйте кристаллы MSP430 со встроенным BOR, который выполняет ту же самую функцию, что и внешний супервизор питания - формирует сигнал сброса при снижении напряжения ниже 1,7В. Кстати, кристаллы с BOR не столь требовательны (точнее совсем не требовательны) к скорости нарастания напряжения питания. Сам проверял smile.gif
Выбор супервизоров питания у того же TI весьма немалый. В т.ч. и микропотребляющих.
http://focus.ti.com/paramsearch/docs/param...ER_2000794|EQ|1
Daria
Цитата(rezident @ Nov 13 2008, 01:36) *
В принципе правильно, но следует учитывать что в LPM4 все генераторы выключены. Поэтому для того, чтобы успеть принять символ после фиксации фронта старт-бита, UART должен тактироваться от DCO со всеми вытекающими отсюда последствиями. Потому, что только DCO быстро "просыпается" (за 6 мкс примерно), а часовой и высокочастотный генераторы начинают нормально генерить только через сотни мс.

Да, это понятно. Я так и собиралась, спасибо.
Цитата(rezident @ Nov 13 2008, 01:36) *
Либо применяйте кристаллы MSP430 со встроенным BOR, который выполняет ту же самую функцию, что и внешний супервизор питания - формирует сигнал сброса при снижении напряжения ниже 1,7В. Кстати, кристаллы с BOR не столь требовательны (точнее совсем не требовательны) к скорости нарастания напряжения питания. Сам проверял smile.gif

Плата уже разведена, все везде задокументировано smile.gif Никаких супервизоров уже не вставишь. Но вот есть MSP430F169, кажется это вы его советовали - я смотрю, он абсолютно аналогичный 149-му, и корпус, и распиновка и все параметры, только еще + BOR+ DMA и SPI. Можно заменить без проблем. правильно? тем более, что и по цене разница всего рублей 100. Эх, жаль эти 149-е уже заказаны... crying.gif но хорошо, что всего 4 штуки smile.gif
Вообще - большое спасибо, что заметили этот факт пор BOR, я бы так и не обратила внимание, а потом было бы поздно. У меня, действительно, были несколько раз ситуации, когда проц зависал - передернешь питание, и все нормально. Эх, темная я еще... smile.gif
rezident
Можно заменить. И даже нужно, раз лишние 100 рублей погоды не делают wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.