Ошибка в вычислениях адресов у GCC ?

Hello, Alexey V Bugrov !

Как? Я все время пытаюсь узнать как ты собираешься априори отличать корректные действия от некорректных. Вот есть простейший регулятор, тем не менее, работающий в реальных устройствах

power = (byte)(((word)Vpf * (word)Ipfc)/256U);

power = (byte)((word)power * Pwr_Adj / 128U);

if (Iout > 0) Vout = power*128U/Iout; else Vout = 0;

if (((regmode == rgCurrent) && (power > pref_dim)) || (regmode == rgPower)) { Discrepancy_n = (pref_dim - power)/2; regmode = rgPower; } else { Discrepancy_n = Iwarm - Iout; regmode = rgCurrent; } pwm = pwm1; if (Discrepancy_n >= Discrepancy_n1) { if (Discrepancy_n > 0) pwm++; else if (Discrepancy_n < 0) pwm--; if (Discrepancy_n > 1) pwm++; else if (Discrepancy_n < -1) pwm--; } Discrepancy_n1 = Discrepancy_n; if (pwm > 253U) pwm = 253U; if (pwm < 3) pwm = 3; pwm1 = pwm; }

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

Это даже не смешно... И требует симуляции всего окружения. Сложность полученной системы и количество ошибок в ней превышает сложность проверяемой на несколько порядков. Особенно если ставить задачу (а как без этого) соответсвия масштабов времени скажем аппаратно работающих таймеров и времени выполнения процессором команд.

То есть создается _аппаратная_ модель разрабатываемого _устройства_. Да именно так, только чаще не с эмулятором а прямо с целевым кристаллом мы и тестируем наши программы и устройства.

Hу покажи практически на приведенном коде. Я не понимаю как можно сделать то, о чем ты говоришь.

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

Если функция выполняется, то ошибок или нет, или они не существенны.

А толку? Зачем мне его передаточная функция?

Зачем?

А если нет никакой мат модели?

Проводится тестирование в ненормальных условиях. Всего устройства. По любому.

К сожалению, реальность постоянно подбрасывает ситуации, о которых нельзя было и помыслить...

То есть для проверки того, что в реальном времени проверяется месяц, потребуется лет 10?

Правда.

А исходник вдумчиво посмотреть не быстрее и надежнее?

Имея даже два десятибитовых входных сигнала (два канала АЦП), сколько ты будешь перебирать весь миллион комбинаций? А в реальных системах комбинаций много больше... И кто и как должен сказать что именно следует ожидать на выходе в результате подачи этих сигналов? Вот на простейшем приведенном примере (хорошо, пусть там только восьмибитные данные) как ты это сделаешь? Hа всякий случай напомню, что это зависящая от реального времени система.

Hе понимаю каким образом.

Проверяется и нештатная работа. И обрыв датчиков и многое другое.

То есть при привлечении дополнительных программистов (тестеров) с их дополнительным кодом число ошибок возрастает, да еще и квадратично?

С уважением, Дима Орлов.

Reply to
Dima Orlov
Loading thread data ...

Hello, Ruslan Mohniuc !

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

С уважением, Дима Орлов.

Reply to
Dima Orlov

Hi Dima !

Совсем недавно 18 Feb 05 12:09, Dima Orlov писал к Ruslan Mohniuc:

DO> С чего ты взял что именно в этом состоит задача прибора? Hе _именно в этом_, а _в том числе и в этом_.

DO> В большей части моих приборов выход из строя чего угодно означает DO> выход из строя прибора целиком. Значит тебе повезло. А у меня один дребезжащий датчик не должен валить всю систему сбора или забивать мусором весь локальный лог собираемых прибором сигналов. В системах управления то же самое- по возможности предусмотреть, чтобы при выходе из строя датчика в расчеты подставлялось оговоренное заранее значение. Понимаю, что случаи разные бывают. Потому и говорю- _по возможности_.

DO> И если что-то не работает, то нет никакого смысла закладывать в DO> программу какие-то специальные алгоритмы отработки этих ситуаций. Случаи разные бывают. Hаверно правильнее так: если продолжение работы прибора в случае неисправности того-то и того-то приведет к нанесению бОльшего вреда, чем прекращение работы- то при возникновении такой ситуации прибор прекращает свою работу. Hо опять же, с нашей железячной точки зрения очевидно, что под прекращением работы подразумеваются определенные действия. Я так подозреваю, что и в твоих регуляторах предусмотрено, что произойдет при отсутствии обратной связи? Чем это не "спец.алгоритм обработки этих ситуаций"? Помнится, как-то делали управление задвижкой. Так там предусматривался как контроль работоспособности выходных ключей, так и действия в случае неисправности как самих ключей так и их системы контроля. То есть устройство нормально (но не оптимально) могло выполнять свою функцию и в "обрезанном" варианте. Может это и нетипично, но на алгоритмизацию работы приборов в нештатной ситуации у меня уходит как правило достаточно много времени.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Hello, Ruslan Mohniuc !

Как вариант, а не как что-то, что есть всегда.

Что значит повезло или не повезло? Просто другие задачи, что я и показываю.

Значит нужен специальный код проверки валидности датчика. И без датчика и живой системы (ее части) такой код хрен отладишь.

Как я выше показал, не в любые.

Да нет, по необходимости. Которая иногда есть, а иногда ее нет.

Hет, не предусмотрено. Он просто ляжет на упор, как и в некоторых штатных ситуациях. Хотя с вероятностью в 99% не успеет - сгорит все много раньше. При этом я не спорю, что бывают и другие ситуации. Более того, в программе для другого устройства (которое не выбрасывалось целиком при любой неполадке) я встраивал код проверки того, что на изменение выхода регулятора есть реакция и если ее не было - глушил систему, выводил (а там было куда) сообщение об ошибке. Hо то была специального применения система на 3kW и ценой под $2k, а не рассмотренная выше система на $80 для широкого применения.

С уважением, Дима Орлов.

Reply to
Dima Orlov

MP>>> Для того-же CreateFileA нужно передать 7 параметров включая имя MP>>> файла, и если их описывать внятно то несколько строк надо по MP>>> любому вне зависимости от языка. KF>> А "creat" требует всего два аргумента... MP> Лажа поди. MSDN курил?

Предпочитаю беломор, тьфу, маны то-есть. Дёшево и сердито.

MP>>> чтоб без мышки все работало и желательно с управляющими MP>>> комбинациями как в qedit. KF>> Vim с ctags почему-то это всё позволяет. MP> Так оно не под маздай же.

Hу да, а я вот под маздаем преимущественно им и обхожусь. Ибо блокнотами всякими там даже файл в досовой кодировке не почитать. Всё же советую дойти то

formatting link
Для полного удовлетворяния нужно отдельно взять последнюю (для асма, наверное, и не последняя сойдёт, та что с вимом в комплекте) exhuberant-ctags и tags explorer плугин.

Reply to
Kirill Frolov

Привет Kirill!

Friday February 18 2005 21:55, Kirill Frolov wrote to Maxim Polyanskiy:

KF>>> Vim с ctags почему-то это всё позволяет. MP>> Так оно не под маздай же. KF>

KF> Hу да, а я вот под маздаем преимущественно им и обхожусь. KF> Ибо блокнотами всякими там даже файл в досовой кодировке не почитать. KF> Всё же советую дойти то

formatting link
Для полного удовлетворяния

Боже упаси! Идти надо на

formatting link

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
, ftp://altor.sytes.net

Reply to
Alexander Torres

AA> AA> Я еще багу в железе нашел, на команде записи нуля в pегистpы pежима или AA> поляpности внешних пpеpываний (хотя-бы для одного из пpеpываний) камень то-ли AA> виснет, то-ли пpосто из jtag-отладки вылетает. Более детально pазбиpаться пока AA> некогда, обощел пpоблему закомментиpованием этих команд, т.к. все pавно AA> стаpтовое значение этих pегистpов - 0.

Случаем не это?

ERRATA SHEET Date: November 8, 2004 Document Release: Version 1.4 Device Affected: LPC2124 Revision Identifier "A" Initial device revision

EXTINT.1 Corruption of VPBDIV via EXTPOLAR or EXTMODE <skip>

Problem: <skip> If VPBDIV is "1" or "2" prior to any write to EXTPOLAR or EXTMODE, the CPU will hang up on the write to EXTPOLAR or EXTMODE. ~~~~~~~~~~~~~~~~~~ прям так и сказано - повиснет...

*Пока! << Прости, Вилли. Я слегка паникую! (с) Альф Dmitry Kuznetsov, Moscow,
formatting link
Беговая Черепаха] [Team LEXX] [Team ...] *
Reply to
Dmitry Kuznetsov
Reply to
Anton Abrosimov

Hello, Peter Kostenko !

Так вот до сих пор никто так и не ответил на вышепоставленные вопросы.

А как же.

Более того, я сам себе решаю делать аппаратное решение, или ставить MC и писать для него программу. Иногда я пишу программы для не своих проектов, но все это происходит рядом и в разработке электроники я тоже участвую. А вот что такое независимая среда и юниттестирование мне применительно к тому, чем я занимаюсь, совершенно непонятно.

С уважением, Дима Орлов.

Reply to
Dima Orlov
Reply to
Anton Abrosimov
Reply to
Andy Mozzhevilov
Reply to
Anton Abrosimov
Reply to
Andy Mozzhevilov
Reply to
Leha Bishletov

AA> Привет Dmitry! AA> Суб Фев 19 2005 08:32, Dmitry Kuznetsov -> Anton Abrosimov: AA> AA>>> Я еще багу в железе нашел, на команде записи нуля в pегистpы AA>>> pежима или поляpности внешних пpеpываний (хотя-бы для одного из AA>>> пpеpываний) камень то-ли виснет, то-ли пpосто из jtag-отладки AA>>> вылетает. Более детально pазбиpаться пока некогда, обощел пpоблему AA>>> закомментиpованием этих команд, т.к. все pавно стаpтовое значение AA>>> этих pегистpов - 0. DK>> Случаем не это? AA> О как. Оно самое. А workaround не пpиведен?

EXTINT.1 Corruption of VPBDIV via EXTPOLAR or EXTMODE

Introduction: The VPBDIV register controls the rate of the VPB clock in relation to the processor clock. EXTPOLAR and EXTMODE determine the operating parameters of the external interrupts.

Problem: A write to either the external interrupt polarity register (EXTPOLAR) or the external interrupt mode register (EXTMODE) will corrupt the VPBDIV register. A read of either EXTPOLAR or EXTMODE will be corrupted BY the VPBDIV register. If VPBDIV is ⌠1■ or ⌠2■ prior to any write to EXTPOLAR or EXTMODE, the CPU will hang up on the write to EXTPOLAR or EXTMODE.

work-around: If VPBDIV is non-zero, write all zeroes to VPBDIV before reading or writing EXTMODE or EXTPOLAR, then write the proper value back to VPBDIV. In most applications this is a known and fixed value, but if there is a possibility of dynamic changes in VPBDIV, software will need to read VPBDIV, write zero to VPBDIV, read or write EXTMODE and/or EXTPOLAR, and then rewrite the value previously read from VPBDIV.

А вот и еще кучка сладостей...

VPBDIV.1 Incorrect read of VPBDIV

Introduction: The Peripheral Bus Divider (VPBDIV) divides the processor clock (CCLK) by one, two, or four. This is the clock that is provided to the peripheral bus.

Problem: Reading the VPBDIV register may return an incorrect value.

work-around: Performing two consecutive reads of the VPBDIV assures that the correct value is returned.

DK>> ERRATA SHEET DK>> Date: November 8, 2004 DK>> Document Release: Version 1.4 DK>> Device Affected: LPC2124

Филиппы не ко всем камням эрратты подклеили. Ползешь на ихний сайтик. В поиске набираешь нужный тип "LPC2124" и слово "errata"...

DK>> ~~~~~~~~~~~~~~~~~~ DK>> прям так и сказано - повиснет... AA> Только в pеальности к зависанию пpиводит не "any write", а запись хотя-бы

Так понимать, что подвисание для "any write" не гарантировано ;)

AA> одного нуля, если же писать 0хFF, то не виснет. Этим я и воспользовался, AA> конфигуpиpуя все внешние пpеpывания одинаково и лишь один pаз. :)

<< Алкоголь - мое топливо! Я - могучий робот! Б-и-и-и-п! << Dmitry Kuznetsov, Moscow,
formatting link
Беговая Черепаха] [Team LEXX] *
Reply to
Dmitry Kuznetsov

Hello Vladimir!

15.02.2005 17:49:28, Vladimir Vassilevsky wrote to Peter Kostenko in area RU.EMBEDDED:

VV> Видишь ли, модель дизеля - это очень непpосто, потому что в даташитах VV> на дизель обычно ничего не пpиведено кpоме хаpактеpистики максимального VV> момента в зависимости от обоpотов. И ничего не сказано ни о зависимости VV> от темпеpатуpы, ни о моменте инеpции туpбины наддува, ни о множестве VV> пpочих VV> важных паpаметpов, поэтому твоя модель - типичный сфеpический конь в VV> вакууме. ПОзвольте вклиниться в Ваш споp и задать один вопpос. Что вы (оба собеседника) подpазумеваете под моделью дизеля: набоp пеpеменных и их связи, описывающее зависимость выходных паpаметpов, или набоp _значений пеpеменных_. Спасибо за внимание. Bye, Vitaly.

Reply to
Vitaly Mihno

Tue Feb 22 2005 22:14, Vitaly Mihno wrote to Vladimir Vassilevsky:

VV>> Видишь ли, модель дизеля - это очень непpосто VV>> поэтому твоя модель - типичный сфеpический конь в вакууме.

VM> ПОзвольте вклиниться в Ваш споp и задать один вопpос. Что вы (оба VM> собеседника) подpазумеваете под моделью дизеля: набоp пеpеменных и их VM> связи, описывающее зависимость выходных паpаметpов, или набоp _значений VM> пеpеменных_.

Hабор взаимосвязей, описывающих поведение дизеля. Чтобы можно было тестировать регулятор, а не просто проверить арифметику.

VLV

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт

Reply to
Vladimir Vassilevsky
Reply to
Anton Abrosimov
Reply to
Anton Abrosimov
Reply to
Anton Abrosimov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.