[uanog] об индусах и программировании, или о том почему всё глючит...

Alexander V Soroka alex at euro.net.ua
Fri Apr 13 09:29:50 EEST 2018


Привет !

Преамбула.
Я занимаюсь программированием микроконтроллеров, вот уже лет 20 как.
и давно присматривался к MSP430FRxxxx, от Техас Инструментс.
По сути это PDP-11 в размере 7 на 7мм !
то  что  у  меня в 1986 году занимало два стола - сейчас занимает один
чип 7 на 7мм!!! Это волшебство :)
Изучаю MSP430 - уже перерыл многое и понимать стал какая КРАСИВАЯ(!!!)
архитектура построения! Техасцы просто гении :)
Это песня просто для мультизадачных вещей !!!

Пока рыл примеры - нарвался на индуса, он задавал вопрос на саппорт:
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/602194

Суть  кратко:  индусу  надо  запустить  АЦП  так чтобы оно сделало три
измерения  с  разных  каналов,  и  прервалось по факту когда АЦП будет
записывать третье(с третьего канала) значение в память.

АЦП  там  умное! ему можно сказать: "замеряй с канала номер Х до канала
номер  У и записывай само в память, МИНУЯ ПРОЦЕССОР! "
Причем  ! какие каналы после каких мерять - ЗАПИСЫВАЕМ(!) в
регистры, т.е. нет тупого 1-2-3... а можно сделать любое: 2-1-5-8...

А что сделал Индус?
он  сделал  так  что  АЦП меряет по кругу три канала, но он вписал что
после   каждого   записи  в  память(!)  готового  значения  АЦП  будет
вызываться прерывание!
НАХУЯ  ???  А  для  того  -  всего-то  -  чтобы  переписать  , прикинь
ПЕРЕПИСАТЬ !!! значение из МЕМ-ячейки АЦП в "глобальную переменную"!
бля мудак...
вот потому и глючит всё вокруг ! бо такие пидарасы пишут проги! :((((

из его текста:
ADCValue1 = ADC12MEM1 ;

ADCValue1 - это его "глобальная переменная".
ADC12MEM1  - это ГЛОБАЛЬНОЕ(!) расположение ячейки 16 бит куда пишется
с АЦП значение че намеряло АЦП на том канале который ему сказали в эту
ячейку  ложить.  повторяю: ГОЛОБАЛЬНОЕ! т.е. доступное из проги на С в
любом месте и в любое время!

Ну не мудак?
Ведь  зачем  прерываться  по  готовности  данных  АЦП  если его спецом
сделали чтобы оно само по себе работало! БЕЗ проца и прерываний!
тупо  сам  модуль  по  кругу(как  настроишь)  идет  в  канал,  меряет,
записывает в память, потом идет на новый канал и т.п.

а  ячейка   ADC12MEM1  -  это и так ГЛОБАЛЬНОЕ место - оно отовсюду из
твоей проги доступное! Это прибитое гвоздями место в микросхеме!

и еще мудак сделал в майн процедуре
__delay_cycles(5000); // Delay between conversions
верх маразма !
теперь мы еще процессором ждем АЦП !

Нахуя  тогда  инженеры  ТехасИнструментс  старались  и  строили такую
архитектуру???   чтобы   индус   вот   так   разом  помножил  на  ноль
ПРОИЗВОДИТЕЛЬНОСТЬ чипа???

Мозгов его не хватило сделать философию проще:
1) пусть АЦП там само по кругу, и пишет само в память - МИНУЯ проц!
никаких прерываний работы проца вообще!

2)  когда  нам  потребуется  результат из этого канала АЦП - мы просто
делаем в любом месте нашей проги, НЕ В ПРЕРЫВАНИИ:
ADCValue1 = ADC12MEM1 ;

и ВСЁ!!!!!!!!!!!!!!!!!
и  далее  бегаем  уже со своим ADCValue1 и везде с ним считаем, то что
нам надо - не отрывая проц на постоянные(!) прерывания и укладывание в
память  14  циклов  всего  в  стек, чтобы потом поднимать 14 циклов из
стека, и так с частотой считывания АЦП умножить на три канала!

Ну не мудаки-же такие программеры???

Бля.........  я теперь понимаю почему всё глючит и лагает...


-- 
Best regards,
Alexander V Soroka       http://www.svr.ua/
AS106-RIPE
mailto:alex at euro.net.ua    



More information about the uanog mailing list