|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:11 am
Zilog - Z8 Encore! F083A Series - Timer & Button
| Автор |
Съобщение |
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 7:23 pm Мнения: 48
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Еми какво да ви кажа, освен едно благодаря на всички ! Аз честно да си призная, кодът предоставен ми от itso.t и slav4o.com ми е по-лесен за разбиране, друг е въпроса, че кодът от relsys вече е от друго ниво (професионален) и явно така и трябва да бъде написан. Сега, друг е въпроса, че аз съм далеч от професионализма, а и както споменах с това се занимавам от скоро (2 месеца - говоря за изучаване на С езика и Zilog микроконтролера). Надявам се всичко да си дойде на мястото и лека по лека да градя и да научавам нови неща. Благодаря ви отново и до скоро виждане в следващата ми тема 
|
| Нед Юли 15, 2018 11:19 am |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12764 Местоположение: София
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Както казах - стилът на писане е нещо което се променя и се развива като всяко друго. Затова и съм отворен за новости и градивна критика. Последното е доста деликатен момент. Критика от типа "това не с е прави така" не работи и не е ефективна. Това което е конструктивно, е нещо от типа - това не се прави така, защото (и следват аргументи и обяснения защо не се). А ако звучат логично и разумно, още по-добре. Добре де, поне кажи след изписване на няколко кубични метра код, джаджата тръгна ли?
|
| Нед Юли 15, 2018 1:01 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
|
| Нед Юли 15, 2018 2:19 pm |
|
 |
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 7:23 pm Мнения: 48
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Разбира се, че работят и двете програми и твоята itso.t и на slav4o.com. Получавам стойности ,като 5.013, 5.1 и т.н. с леки изменения, но са си 5 секунди. А на relsys, щях да му спестя мъките да ми обясни кода си, ама да видим: Не ми се иска да copy-paste твоя код и да питам за всяко едно нещо, но евентуално ако имаш желание и ти е удобно, да ми разпишеш подробно кое, какво прави. Ако не ти се занимава, няма грижи, ще се задоволя и с предишните два кода, които ги разбирам и са ми по-лесни  Благодаря и съжалявам, ако вече прекалявам ! ( : : )
|
| Нед Юли 15, 2018 4:41 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Общо взето според мен излишна функция, предполагам идеята е кода да стане по четлив, но не виждам голяма разлика между: и даже напротив, бих променил името на Time_ms на system_time_ms и тогава ще стане още по чисто. Друг ефект от ограждането на този прост код в оделна функция би бил да се спрат някои оптимизации на компилаторите, само че съвременните компилатори отдавна са захитрели и сами ще изгенерират код със инлайнване на функцията където се употребява. Вместо това ако в дефиницията на променливата се добави volatile нещата сами ще си дойдат на място и компилаторът ще внимава да не оптимизира. На пръв поглед излишна функция, този код ((start_time)^(0xFFFFFFFF))+1 всъщност прави -start_time по засукан начин. Преполагам идеята е била да се отработи ситуация при препълването на time_now т.е. когато то превърти през 2^32 бих препоръчал да се ползва u64 който ще гарантира, че няма да има препълване през живота на продукта. Ако 2^32 препълва, при така написана сметка не се взима в предвид колко пъти е превъртял а се предполага, че е веднъж. За да е по ясно бих го написал така (time_now)+(0xFFFFFFFF-(start_time))+1 + съответен коментар във функцията защо. Но дори и така резултатът ще е един и същ ако вместо целият този if ... else ... се напише просто return time_now-start_time. Подобен код е ясен когато човек го пише, но след време или пък когато трябва да го чете друг човек е труден за разбиране, затова трябва да се пише ясно и когато има нещо неявно да се слага коментар. Друго което прави впечатление е преизползването на скоби във вторият return - явно кода е писан от друг човек с други навици за оскобяване, само че прави лошо впечатление, че не е оправил и първият return на ((time_now)-(start_time)) - това е признак за лека арогантност и мърлящина което пък е признак за аматьорщина - истинският програмист не прави така  Отново засукан начин да се напише нещо съвсем просто: Такъв код пак е признак за over engineering т.е. излишно и прекалено усложняване. На някои хора просто мозъкът им работи така, няма оправия. Практиката е, че по прост код, с по малко изрази, по малко редове и т.н. се разбира и поддържа много по лесно т.е. бързо а от там и евтино във времето. Индийците са царе на този начин на писане - така никой не може да им каже, че не са работили - ама всъщност само са вкарали плява в кода и после някой трябва да минава след тях да опростява. Това го поставям наравно със спагети кода като проблем.
_________________ Мразя да мразя ...
|
| Пон Юли 16, 2018 8:52 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
е да ама u64 /или long long все тая/ яде още повече време на 8 битова въшка, в някои случаи започва да става критично, въпрос на баланс според мен, зависи от задачата. Да едното е съвсем универсално, стига да имаш ресурс. Но така или иначе от друга страна там където си е критично от към време обикновено има отделен таймер. По скоро тук говорим за принципа. Едно време избягвах да използвам системен таймер, и в прекъсването на таймера съм инкрементвал по 6-7 отделни променливи, да но това става трудно за поддръжка, коя каква беше, да ги помня всичките ... една единствена е по-удобно, което не ми пречи да продължавам тук таме да използвам отделни  Като цяло идеята е да няма големи парчета код, по скоро те може да са големи, да не отнемат много време като изпълнение, в които да имаш забранени прекъсвания или да забиеш в тях и да не излезеш сума и време. Имам сега точно един такъв проект който много ме дразни, едно тъпо време не беше специфицирано точно в документацията и уж да подкарам нещата го направих всичко в един цикъл докато не пратя всичките данни, да ама то отива 10 ms, и направо ми боде очите, въпреки че това е най-основната задача на изделието и най-важната, просто не ме кефи да имам процес който да заема 10 ms че и да ми забранява прексванията, верно то е съобразено със цялата периферия и няма нищо критично което може да се случи, USB-то си пее само, за серийния това е време на един байт, но така или иначе ме дразни.
|
| Пон Юли 16, 2018 11:49 am |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Събиране и изваждане са приемливо бързи операции дори и на 8 битов контролер - адд, адц, адц, адц, адц, адц, ... единствено бих се замислил ако има някакви покъртителни ограничения откъм памет и се цеди всеки байт. Няма проблем да се ползва и някакъв софтуерен прескалер, дори е силно препоръчително - по този начин се получава нещо като работа с фиксирана запетая която позволява супер елегантно да се отработват ситуации с промяна на брояча на таймера без да се разбутва останалият код. Ще нахвърлям малко псевдкокод за да стане по ясно: Кода е илюстративен, ако се гони прецизност до такт трябва да се попромени за да се вземат предвид циклите от генерирането на прекъсването до преинициализацията на таймера - най лесно е да не се пипа и да се остави хардуера да преинициализира винаги с една и съща константа. Но все пак има случаи в които трябва да може да се мери време и да се генерират различни интервали с един и същи таймер.
_________________ Мразя да мразя ...
|
| Пон Юли 16, 2018 12:19 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Всъщност.... тя функцията изглеждаше така: Сметнах, че това е в повече за текущите нужди и опростявах директно в браузъра, което е и причина за артефактите (Както и ще трябваше да обяснявам... ама що са толкова времената, там що четеш направо от таймера.... и тнт) Иначе към това: съм против. По - добре е да е по-простичко написано... while-a в прекъсването няма да го коментирам втори път. В крайна сметка, който разбрал, разбрал.....
|
| Пон Юли 16, 2018 10:52 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Metyyy я пробвай този код, как работи:
|
| Пон Юли 16, 2018 11:43 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
|
| Вто Юли 17, 2018 12:16 am |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12764 Местоположение: София
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Ще си позволя да цитирам дедо Боре:
Как се яде слон? Слон се яде на малки хапки.
|
| Вто Юли 17, 2018 1:06 pm |
|
 |
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 7:23 pm Мнения: 48
|
 Re: Zilog - Z8 Encore! F083A Series - Timer & Button
Славчо, кодът не работи, това е грешката - Expression must be an lvalue. Но това е без значение, тъй като вие вече ми показахте как се случват нещата и аз съм доволен, поне на този етап. Сега мисля, да продължа с изучаването на седем сегментен индикатор. Мисля, че темата може да бъде затворена  Благодаря на всички !
|
| Вто Юли 24, 2018 6:32 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|