0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
||||||
1 | ||||||
Где ошибка с прерыванием по захвату и приемом сигнала?19.05.2015, 20:23. Показов 855. Ответов 12
Метки нет (Все метки)
Подскажите пожалуйста, почему у меня во время прерывания по низсходящему импульсу не срабатывает условие else в прерывании... код программы прилагаю... Уже всю голову сломал и 10 раз переделал программу,а результата нет... Спасибо за помощь...
0
|
19.05.2015, 20:23 | |
Ответы с готовыми решениями:
12
Как работать с приемом сигнала Помогите разобраться приёмом сигнала с ПДУ на TSOP. Ошибка с прерыванием Ошибка в коде с прерыванием 21h |
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
19.05.2015, 22:35 | 2 |
...хороший вопрос ). Предположу, что вы не совсем полно описываете ситуацию. В ДШ сказано:
Добавлено через 2 минуты ЗЫ: как решение, я бы предложил либо внешнюю переменную, в которой сохранять реальное условие вызова прерывания и проверять счетчик, либо сделать проверку реального состояния входного пина прямо в вызове прерывания. Если пин равен нулю, значит мы поймали спад. Если единица - то поймали фронт ).
1
|
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
||||||
19.05.2015, 23:02 [ТС] | 3 | |||||
Спасибо за ответ...
Вы имели ввиду такое решение? Код функции прерывания... Только все равно какой сигнал только на выход я не подавал, то при низсходящем импульсе в all_data[counter][0] никак не записывается 0x02... НЕ могу понять где я так жестко туплю...
0
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
20.05.2015, 09:29 | 4 |
lancer5610, читайте мануалы. Например, стр.86 ДШ:
Как раз скорее из-за того, что вы не сбрасываете флаг, и не срабатывает прерывание по спаду у вас. Займитесь отладкой. 1) Убедитесь что вход работает изначально по фронту и по спаду в отдельности. То есть один раз запустите срабатывание по фронту, второй раз - по спаду. 2) Убедитесь, что прерывание срабатывает повторно. То есть срабатывает больше одного раза при любом из выбранных фронт/спадов. 3) Добавьте в код функциональность смены режима сработки прерывания согласно приведенному (из ДШ) выше принципу. 4) Убедитесь, что входной сигнал соответствует требованиям по производительности. Часто случается, что срабатывание сигнала происходит быстрее, чем МК может его обработать. Пользуйтесь аппаратными и программными средствами по отслеживанию шума.
0
|
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
||||||
23.05.2015, 22:54 [ТС] | 5 | |||||
Разбирался с кодом... вот маленький пример...
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
23.05.2015, 23:40 | 6 |
Очевидно, потому, что когда counter становится слишком большим, то твой обработчик прерывания начинает писать за пределами массива и что-нибудь там затирает.
0
|
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
||||||
24.05.2015, 08:49 [ТС] | 7 | |||||
нет, counter не становиться слишком большим... в прерывании идет проверка его :
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
24.05.2015, 09:46 | 8 |
0
|
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
|
24.05.2015, 21:27 [ТС] | 9 |
Пускай будет и так, только от этого все равно не меняеться ничего...
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
24.05.2015, 23:04 | 10 |
А зачем у тебя в главном цикле программы при case 0 делается counter1++ вне зависимости от того приняты данные alldata[0] или не приняты ? И до каких значений counter1 добегает ?
Вообще, у тебя программа написана коряво и так и работает. Пока не перепишешь ее просто, ясно и безупречно, она так и будет работать, хоть как ее крои. Принимаемые данные должны складываться в кольцевой буфер. У буфера должен быть указатель на голову и хвост. Обработчик прерывания данные в буфер складывает, продвигая по кольцу голову. Головная программа выгребает, пододвигая к голове хвост. Если обработчик прерывания заполнил весь буфер (голова упирается в хвост) и места в нем больше нет, то он не должен еще не выбранные из него данные затирать. Только флажок выставить - я данные теряю. И головная программа тут-же должна тебе просигнализировать - мол флажок выставился, ты хреново программируешь. Что-то типа того. Добавлено через 6 минут И еще - сначала отлаживаешь только прием данных. Ничего лишнего в коде при этом не должно быть. Отработал прием и он идеален - только тогда добавляешь в код обработку данных. Т.е. программу надо собирать последовательно, а не пытаться сбацать одним махом все.
0
|
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 18
|
||||||
25.05.2015, 22:33 [ТС] | 11 | |||||
Вот код программы которая выполняет только прием... Проверял в протэусе, на вход подключаю генератор с частотой 3 Гц... Так вот когда counter++ закоментировано, то все работает правда результаты измерения постоянно присваиваються только нулевому элементу массива all_data... но как только раскоментирую counter++ то данные записываються только один раз... Хотя прерывания срабатывает....
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
26.05.2015, 00:39 | 12 |
Разве этот бит не обнуляется автоматически, когда происходит прерывание ?
Добавлено через 25 минут ПрерываниЯ срабатываЮт или прерываниЕ срабатываЕт ? Т.е. прерывания просходят неоднократно ? Если неоднократно, то должны же данные куда-то писаться. Не могут-же они не писаться никуда. Дас ист фантастиш. Добавлено через 1 минуту Вот не верю я Протеусам. Изыди сатана ... Добавлено через 12 минут if (counter>199) counter=0; Это если строго. Сделай ка буферок пока не на 200 элементов, а на 100. А то там ОЗУ всего килобайт. Аллах его знает как там Си память распределяет. Но это уже пошли поиски отчего происходит то, чего не может быть. Добавлено через 1 минуту Вопрос - по какому адресу в ОЗУ переменная counter сидит ? Она за пределы килобайта не выползла ? Добавлено через 12 минут Терпеть не могу Си. Никогда не ясно что он там накомпилировал ? То-ли дело асм.
0
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
26.05.2015, 09:10 | 13 |
ТС, ваша программа с точки зрения компилятора ничего не делает, потому что вы пишете в массив, который нигде не используется.
1) Поставьте тип volatile переменным, используемым в прерываниях. 2) Отключите оптимизацию.
0
|
26.05.2015, 09:10 | |
26.05.2015, 09:10 | |
Помогаю со студенческими работами здесь
13
Работа с хуком по захвату мыши Timer2 STM32F103RBT6 прерывание по захвату Создать программу по захвату с COM порта Прерывание по захвату TIM4! f103cbt Ошибка с приемом данных чере сокет IP 204.204.204.204 прерывание по захвату + шим для сервопривода [Решено] Не срабатывает прерывание по захвату таймера А Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества
Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
|
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов.
. . .
|
С чего начать программировать микроконтроллеры
raxper 06.01.2025
Введение в мир микроконтроллеров
Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
|
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
|
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|