- Чота тоже испужался барьерности АРМов при буферах. И нарыл, что не только способные на ре-ордеринг АРМы, но и банальные АВРы могут при многозадачности поднаср@ть в карман зазевавшемуся: Petrovich(430 знак., 08.11.2017 10:30,
, AVR, полностью)MBedder
- 1) volatile int head, tail. 2) вставить asm volatile("": : :"memory") после каждого ++ (или после обоих). - fk0(09.11.2017 00:06)
- Торможу. Собственно операция ++ нифига не атомарная же. Чтение-модификация-запись. И прерваться может на каждом тире. Если gcc то использовать __sync_add_and_fetch(), иначе х.з. что делать. Для обработчиков прерываний, понятно, мьютексы fk0(61 знак., 09.11.2017 00:47)
- Со времен 8080 "атомарность" операции чтение-модификация-запись достигалось запретом и разрешением прерываний. Что-то изменилось? - VLLV(09.11.2017 11:35)
- Запрет прерываний не всегда возможен. - fk0(09.11.2017 23:40)
- Здесь ошибка не от атомарности RMW. Здесь ошибка атомарности наблюдения за инкрементами обоих переменных. Если Задача2 получила управление после tail++, когда обе переменные равны, и успев загрузить head, потеряла управление, и в следующий раз, Petrovich(80 знак., 09.11.2017 12:40,
)
- Петрович набросил и устранился. Атомарность нужна редко. Чаще всего можно выкрутиться при помощи volatile. - SciFi(09.11.2017 12:09)
- На 8-битном процессоре чтение и запись не атомарные -- не выкрутишься. Старший байт записал например, обновленный, а младший не успел. А другой поток читать начал. И ошибка. - fk0(09.11.2017 23:41)
- В таких случаях можно читать несколько раз, пока не прочитаешь то, что нужно. - SciFi(10.11.2017 07:31)
- Не всегда в общем случае. Как понять критерий нужности? - fk0(10.11.2017 11:31)
- часто при чтении пару раз подряд совпасть должно - Vit(10.11.2017 11:40)
- Если читаешь достаточно быстрый аппаратный таймер -- он никогда не совпадет. Младшая половина всегда убегает вперед, а старшая за несколько чтений не успевает измениться. См. мой ответ ниже. - fk0(10.11.2017 11:46)
- Таймера считываются проще Petrovich(145 знак., 10.11.2017 12:57,
)
- У тебя три загрузки таймера в цикле, а у меня два. И положение байт в структуре -- не гарантировано. - fk0(10.11.2017 13:04)
- Схематично - это вот так: 1) Берём МК с таймером 2) ... 3) Профит! - SciFi(10.11.2017 13:04)
- Таймера у читающих даташиты считываются еще проще - при корректном чтении первой половины таймера (в ДШ написано, какую именно половину следует читать первой) содержимое второй половины аппаратно защелкивается в теневой регистр, из которого MBedder(38 знак., 10.11.2017 13:02)
- Увы, это не всегда помогает. У pic18 есть теневой регистр, но... для нормальной работы пришлось городить такую конструкцию: аппаратный таймер 16 бит, или даже 12, тут не помню, по прерыванию инкрементится ещё слово (16 бит) программной части fk0(1081 знак., 10.11.2017 13:12)
- 8051 просит разъяснить поподробнее о теневом регистре :) - Petrovich(10.11.2017 13:06,
)
- Тяжёлое детство, деревянные игрушки, отсутствие теневого регистра. У меня, кстати, на столе лежит штука, в которой интересный регистр разбит на половинки, и именно вот эта петрушка. Выкинуть на помойку не предлагать. - SciFi(10.11.2017 13:06)
- Нафиг общий случай? Пару раз такое нужно было, всё было просто. Чтение переменной, которая меняется достаточно редко: SciFi(190 знак., 10.11.2017 11:36)
- Да я думал неинтересно народу... Надеюсь, вы поняли откуда появляется ошибка. Это, оказывается, всего лишь ошибка наблюдателя. Выход - проверять в обратной поледовательности чем инкремент, т.е. if(tail>head) {out ERROR;} и будет хорошо. Petrovich(866 знак., 09.11.2017 12:33,
)
- Только как понять, выкрутился или нет? - VLLV(09.11.2017 12:18)
- Появились 1. Новые методы запрета прерываний "на время" 2. Атомарные операции инкремента/декремента/и других модификаций ячейки памяти. - AlexBi(09.11.2017 11:51)
- В условиях ни чего не сказано про приоритеты, кто кого может прервать. Если считать что задачи 1 и 2 с одинаковыми приоритетами и прерывать друг друга не могут, тогда проблемы нет совсем. - AlexBi(09.11.2017 11:11)
- что значит "прерваться может на каждом тире" ??? где сохраняется состояние? ну, как узнать на какое тире возвращаться??? - Mahagam(09.11.2017 02:11)
- Продолжайте наблюдение. Сообщите, когда увидите микроконтроллер, который по результату сравнения регистра с текущим значением АЦП аппаратно сможет сбросить ШИМ. Некоторые пики подошли к этому совсем близко, но остановились на прерывании. - Экспериментатор(27.10.2017 00:45,
, AVR, полностью)Kceния
- Сие пока тайна, покрытая мраком... Вот ATmega16804 доводилось пользовать - в корпусе SIP4 ;) - Гyдвин(26.10.2017 09:40, AVR, полностью)Kceния
- Стоит ли заморачиваться с кодом Грея для сохранения в EEPROM mAVR некого счетчика как дополнительной меры повышения надежности? Другими словами, является ли часто изменяемый младший бит слабым звеном в ERASE-WRITE памяти - g6sgf(03.10.2017 11:54,
, AVR, полностью)
- запись длится 5мс, в сутки 17М записей. Может, проверить раз и закрыть вопрос? VLLV(37 знак., 07.10.2017 16:21)
- почему бы просто не использовать EERAM? Constantin24(69 знак., 06.10.2017 07:49)
- Если объем EEPROM для этого достаточен, то размазывание перезаписей по множеству ячеек хорошо работает и без кода Грея. AlexG(174 знак., 04.10.2017 07:18)
- СтОит, если каждый бит этого счетчика хранится в отдельном байте EEPROM. :) - Хаос(03.10.2017 16:59,
)
- А почему не хотите использовать микроконтроллер с отдельным входом для резервной батарейки RAM? - Экспериментатор(03.10.2017 16:01,
)
- в коде Грея младший бит будет меняться в 2 раза реже чем в обычном бинарном, это не так много, я думаю что это не поможет. Nikolay801_(410 знак., 03.10.2017 14:37)
- Для повышения надежности записи в ЕЕПРОМ применяю дублирование, размазывание по площадям и контроль целостности. - ASDFS(03.10.2017 13:03)
- По-моему наоборот, старший бит является слабым звеном. В старший бит вы скорее всего всегда будете писать 0, а в младший только в 50% случаев. - Ale3000(03.10.2017 12:15)
- UPD. Просьба к тем, у кого в руках исходники иаровских библиотек: выложите функцию __x_ML_SRAM_EEPROM_24_16. йцукен(311 знак., 01.10.2017 16:48 - 02.10.2017 11:25, AVR, полностью)
- В ЙАР AVR возможно пользоваться вычислениями с плавающей точкой двойной точности (double float) ? - AU08(29.09.2017 01:29, AVR, полностью)
- AVR и три сосны... symbions(1593 знак., 27.09.2017 10:26, AVR, полностью)MBedder
- Вот поэтому наша электроника и в #ОПЕ :(( Adept(558 знак., 21.09.2017 14:54, AVR, полностью)
- А знает ли кто про такое чудо, как AVRxt (AVR) AVR 2016 and onwards. This variant is based on AVRe and AVRxm. Closer related to AVRe, but with improved timing. Стр.22 Atmel AVR Instruction Set Manual [OTHER] Evgeny_CD(18.09.2017 21:48, AVR, полностью)
- тот же AVR/XMega, только добавлены 4 новые команды: LAS, LAC, LAT, XCH. - argus98(19.09.2017 12:25)
- LAS, LAC, LAT, XCH - это ХМеговские команды и есть, а в AVRxt/AVRrc их нет. Тайминги AVRxt по сравнению с ХМеговскими где-то на такт получше (EICALL, SBIx, ST -R, STD), а где-то на такт похуже (большинство LD). MBedder(137 знак., 19.09.2017 16:05 - 16:16)
- В некоторых командах число тактов уменьшили, в некоторых увеличили. Совокупный итог сложно предсказать. - Evgeny_CD(19.09.2017 15:31)
- Дурацкие команды, никому ненужные. Если уж добавлять, то можно было бы придумать что-то более ценное. Например, сложение регистровых пар (для ускорения int-арифметики). - Ксения(19.09.2017 12:31)
- Кажись, это новые микрочиповские тиньки ATtiny417/814/816/817. Но я не уверена. Читайте обсуждение тут => - Ксения(18.09.2017 22:33, ссылка)
- AVRASM помогите найти зарытую собаку maleon(336 знак., 18.09.2017 19:47 - 21:10, AVR, полностью)
- захотелось странного - вместо матлиб дробной арифметики с плавающей точкой заюзать целочисленную арифметику :)) Adept(523 знак., 17.09.2017 15:22 - 15:35, AVR, полностью)
- Подскажите какая в языке Си от Атмел Студии транскрипция вызова функции по указателю по индексу из PROGMEM массива указателей - Down(15.09.2017 11:39,
, AVR, полностью)
- Ежели у ATTINY24 частота 20 МГц, гарантирует ли это, что "джиттер" на выводах одного порта (выдаю в PORTA 0, затем 255) будет меньше половины тактового периода : 25 нс? - AU08(22.08.2017 20:02, AVR, полностью)MBedder
- В ПЭ обнаружились ATMEGA48V-10AU (Аналог. Uпит = 2.7-5.5V) от производителя "No Name". Всего 21 модель от этого же производителя. - AU08(30.08.2017 09:17 - 15:49, AVR, ссылка, ссылка, полностью)
- Требуется прошить ATmega162 через JTAG у заказчика как то можно это сделать не ставя AVR Studio? Спасибо. - PeterD(28.08.2017 09:06, AVR, полностью)