Перейти к содержанию
    

to SasaVitebsk

извиняюсь за резкий то, но насамом деле про то что все начнут говорить о прерываниях я заранее учел и написал в самом оглавлении темы.

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

-перывания-- они запрещены

-переполнения стека-- его размер был достаточен для тн26 и был увеличен для 461

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

-переполнение регистра-- число long и в начале делится, а затем умножается и в момент умножения получается 0, что дальше не важно, с нулем что не делай все одно 0.

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

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

Вот и в данный раз, тн26 забита под завязку, а исправить то что вылезло у единственного заказчика не вышло, и странно то, что 4 шт стоит рябом и работет, а 5й вылетает, что только не делали...

вот и перешли с тн26 на тн461.

 

уважаемый SasaVitebsk спасибо за желание помочь, буду рад любой помощи, тк глюк неординарен.

а ситуация примерно такая, АДЦ работает, прерывания идут, но глюкует все именно при умножении.

если что то конкретное интерисует спрашивайте, если кому-то интересен этот глюк могу, дать чтонть для проверки, но при запросе, так выкладывать не могу.

рс: если честно, я не помню сколько времени я пишу программы, начинал еще с z80...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я тут записал файлик, Это запись с экрана того что происходит.

Вырезал из проэкта ту подпрограмму и убрал лишнее для того чтоб не смотреть на прочую лабуду.

Запись сделана в AVRStudio при связи с аврДракон, в режиме dWare отладки.

В кратце о программе, что там происходит:

-как то настроен таймер на шим выход, может и не шим, главное что он что-то генерит, чтоб значение в АЦП было не всегда 1023 а иногда было =0.

-прерываний нет...

-Ацп работает в принципе так как я настраивал в проэкте, думаю тоже не важно, сумму дает вполне адекватную, просто ее подогнал, для простоты.

суть неизменилась, все как я говорил.

 

Значится жду предложений ну или того, что я не так делаю.

 

tn461_film.zip

запакованный ехе файл сделанный одной программкой копии моего экрана, так что не пугайтесь

Изменено пользователем __nik__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите за прямоту, но давайте без сумбура и по порядку прочитаем перечисленные вами проблемы.

При изучении выяснилось проблема кроется в работе АЦП.

Проблема:

Как оказалось, АЦП работает как хочет, хочет в середине фазы выдаст значение =0, или, при отсутствии сигнала может выдать большое значение(выше обычного шума) из-за чего происходит ошибка в показании прибора.

но вышесказанное это вообще ничто, по сравнению с тем, что иногда (всегда по разному) за определенное количество ацп преабразований выдает их сумма равняется 0, что вообще не понятно.

Здесь не понятно проблема в АЦП или суммировании, или и там и там? Суммирование, на сколько я понимаю программное и причину хомута можно однозначно вычислить.

На данный момент обнаружил глюк иара, по какой причине выяснить не смог, пока что.

Суть примерно такая,

long Summ;

unsigned int acvant;

return (Summ/acvant*419.0/468.0);

ошибка возникает при умножении, почему-то при умножении числа на константу на выходе получаем 0

???

Столкнулся еще с тем что не могу скорость АЦП переключить, это как то похоже это как то связано с иаром 4.21А.

 

Так у вас одна ошибка или целый ряд ошибок непонятных. Что значит "не могу скорость АЦП переключить"? Это для меня непереводимая игра слов. Напишите конкретно что происходит. Не меняется значение регистра или что???

 

На резонный вопрос о типе return вы так и не ответили. Приведите хотябы всю подпрограмму с возвратом. Ваш exe файл с экрана читать очень сложно. Не успеваешь его просматривать. Можно перейти на ассемблерный листинг в отладчике и выяснить где именно у вас прокол. Что именно IAR сделал не так. Там сразу всё понятно становится. То же и с суммированием.

 

Короче пока недостаточно данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

float fSumm,summ;

__C_task void main( void )

{

// InitMCU();

// while(!(PINB_Bit5)){;}

while (1)

{

fSumm=234.123;

fSumm=fSumm*2; --- вот тут у меня выдает 0 но только на кристалле!!!

fSumm = fSumm / 2;

summ=Mesure();

PORTB=summ+2;

}

}

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

 

То что в файле:

показываю то как считает ИАР в его родном дебугере и на кристалле, через дракон.

ошибка сразу видна..

 

Через дракон, в асме лазить трудно, все переменные пишет, Not in scope, согласитесь оч тяжело понять где что, да и дракон все время при хождении по асму просто падает. Я смог найти только место, где вроде как затирает значение которое должен считать, но не уверен, так долеко дракон зашел лиш раз, теперь просто падает.

tn461_4.zip

извиняюсь за скорость, старался чтобы места занимало поменьше

 

to SasaVitebsk

1. На данный момент, 2 ошибки с умножением и с квантованием АЦП.

2. Найдена ошибка, в ней я уверен на 90%, при умножении чисел с точкой (для непонятливых это 2.0 или 123.123) long, float, int, char. Любое умножение даже на 2.0 даст результат 0, хотя в его дебугере виртуальном, дает правильный результат.

3. Запись в регистры АЦП производится, но действия не оказывает никакого, начинаю подозревать в этом ИАР, в тани461 изменили модууль АЦП, а они видимо это не учли.

 

тип return unsigned int

хотя не думаю что это важно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:) Красиво.

 

Через дракон, в асме лазить трудно, все переменные пишет, Not in scope, согласитесь оч тяжело понять где что, да и дракон все время при хождении по асму просто падает.

 

То что Дракон падает - это плохо. Попробуй укоротить кабелёк. У меня правда JTAG ICE2. Вроде работает устойчиво. Особенно на DBW.

 

Хрен с ними - с переменными. Войди в режим асма и пройди по шагам отмечая как модифицируются регистры. Потом тоже самое на изделии. Увидишь команду, откуда разница прёт. Может 461 какие то команды арифметики не выполняет, а IAR-овцы об этом не знают. :) И ещё один момент. Ты симулятором IARовским пользуешься, а ты попробуй симулятором Studio. Он по идее должен точнее железо симулировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кабелек у меня около 15 см, куда меньше.

А у Вса случаем тани461 нет? может проверите на жтаг исе2, своего, шефа, я так и не уломал на него, особенно когда он узнал, что он стоит около 10тр., но думаю скоро купит, если так дальше все пойдет.

в принципе, я придумал как все проверить, у меня есть еще ноут, запущу на одном Астудию, на другом иар, и по шагу буду долбится об стол, искать причину глюка.

надеюсь к вечеру дам результат, только скорее всего без видео, так что придется поверить на слово.

Изменено пользователем __nik__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

короче, я нашел.... вот только что делать.

у тани 461 нет MUL инструкций, а иар их использует в математике, по этому и глюк.

знающие может подскажут как это обойти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

короче, я нашел.... вот только что делать.

у тани 461 нет MUL инструкций, а иар их использует в математике, по этому и глюк.

знающие может подскажут как это обойти?

Самое забавное, что в tiny26 тоже нет данной инструкции - я уже посмотрел. Обойти можно выбрав вместо прямого камня проверенный, но подменив и переписав файл конфига. Или посмотреть - может новый config появился под эту микруху у IARа

 

PS:Искать. Где-то объявлены определения __HAS_MUL__ и __HAS_ENHANCED_CORE__.

 

Очевидно, что этого быть объявлено не должно быть. Искать во всех файлах связанных с 461

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

я вспомнил, еще кое что, скомпилированную программу под 261 я заливал в тани26 и мне кажется она работала исправно.

что то мне говорит что разница в них более глобальна и еще не описана до конца.

в таком случае я продолжаю поиск...

как то все это загадисто.

за подсказки спасибо, попробую просмотреть файлы от тани 26 и тани 461.

Иар при выборе проца Tiny26 снимает галку на "Enhanced core" и "No MUL instruction" и наоборот их ставит при выборе Tiny461, что весьма странно, у них нет MUL инструкций у обоих.

 

Указанных определений __HAS_MUL__ и __HAS_ENHANCED_CORE__ я не нашел в файлах.

Изменено пользователем __nik__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иар при выборе проца Tiny26 снимает галку на "Enhanced core" и "No MUL instruction" и наоборот их ставит при выборе Tiny461, что весьма странно, у них нет MUL инструкций у обоих.

 

Указанных определений __HAS_MUL__ и __HAS_ENHANCED_CORE__ я не нашел в файлах.

 

Так выбрать 461 и убрать галки! Я вообще этих галок не нашёл. Как не нашёл и файла конфигурационного, который определяет на каких процах эти галки ставятся. А файл такой сто процентов где-то есть. Не компилируют же они после добавления каждого нового проца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Галки есть при выборе процессора, в свойствах проэкта, на закладке Target.

Короче не помог ни выбор проца -v1 с описанием без МУЛ и Энхансед коре.

всетаки подозреваю, что они всетаки перекомпилируют.

Припоминаю что на версии ИАР 2.28, там еще небыло тн26, использовал -v1 или -v0, с h файлом для 26, но такой фокус не прокатил для 461, всеравно умнодение не прокатило.

Ума не приложу, как быть если нужно умножение с точкой, а при делении ощибка слишком велика...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Галки есть при выборе процессора, в свойствах проэкта, на закладке Target.

Короче не помог ни выбор проца -v1 с описанием без МУЛ и Энхансед коре.

всетаки подозреваю, что они всетаки перекомпилируют.

Припоминаю что на версии ИАР 2.28, там еще небыло тн26, использовал -v1 или -v0, с h файлом для 26, но такой фокус не прокатил для 461, всеравно умнодение не прокатило.

Ума не приложу, как быть если нужно умножение с точкой, а при делении ощибка слишком велика...

Задай вопрос на форуме по IAR. Там есть спецы типа Сергея Борщ или Zltigo. Они ответят. У меня тоже вкл. ENHANCED_CORE на 461.

 

IAR C/C++ Compiler for AVR

4.12A/W32 [Evaluation] (4.12.1.3)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, что математика это чистая проблема иара, осталось еще с прескалером ацп разобратся.

пока так и не смог заставить его считать медленнее.

Изменено пользователем __nik__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все правильно. У T461 действительно расширенное ядро без умножителя. Надо бы посмотреть, ту ли библиотеку он подключает - Project/Options/General Options/Library Configuration/Library File должен быть cl1s-ec_nomul.r90.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел, в оригинале cl1t-ec_nomul.r90.

Я там в файлах его покопался, он теперь подключает cl0t-ec_nomul.r90, но всеравно не помогает.

посмотрел что он подключает к тани26 ... порадовало cl0t.r90 , а различия то у них в плане инструкций не очень большие.

Я проверил, :01: , cl1t-ec_nomul.r90 использует MUL, :07: нафига она называется номул, не понятно.

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

EW IAR 4.21A Ev

EW IAR 4.30A Ev

Народ осторожнее, тем кто использует эту библиотеку.

Само существование такого глюка мне бы и в голову не пришло.

 

Осталось с ацп разобратся....

ПС: Напишу ИАРу, стебану их, пусть дергаются. Жалко им картинки не отправить, но я чтонть придумаю.

Изменено пользователем __nik__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...