|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:27 am
ACORN микро ядро за AVR ATMega MCU in Assembler
| Автор |
Съобщение |
|
denim
Ранг: Минаващ
Регистриран на: Пон Мар 19, 2007 10:15 am Мнения: 26
|
 8 bit
Незнам дали идва края на 8 бит процесори но знам че те могат и вършат страхотна работа.
Обмислям създаването на кластърна операциона система базирана на 8 битови процесори.
Смятам че ако се групират 8 бит процесори в логически операциони еденици може да се получи нещо евтино и мощно.
Необходим е обаче инструментариум чрез който ще се улесни разработката на такива приложения.
|
| Сря Юни 15, 2011 2:49 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Ми другите популярни 8 битови са тия от Моторола (Freescale сега). Те и по-приличат
на AVR май като архитектура (по-скоро е обратното де). HCS12 гледам живеят още,
11 е история (макар жива), 08 и те са живи. Power са голямото, към което си струва
да се ходи от техническа гледна точка (която предполагам те интересува, инак нямаше
да пишеш на асемблер).
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Сря Юни 15, 2011 3:33 pm |
|
 |
|
denim
Ранг: Минаващ
Регистриран на: Пон Мар 19, 2007 10:15 am Мнения: 26
|
Благодаря,
Да интересува ме единствено и само асемблер.
Синхронизиращите алгоритми се възползват от силата на специфичните инструкции.
Пример:
Read-Modify-Write - атомична операция
Read-Skip(jump) - атомична операция
Тук Ц/Ц++ сериозно отстъпва.
Не се сърдете ако обиждам с мнението си.
|
| Сря Юни 15, 2011 3:40 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Не друго ама такива дето като теб пишат основно на асемблер са вече като динозаврите
Едно е да напишеш частта изискваща бързодействие на асемблер и основно на C всичко останало,друго е да копаш само на асемблер.
И сега като си я нашляпал само на асемблер целия труд е непортируем и безполезен ако искаш да минеш на някакъв друг. Пък и да ползваш OS за процесор от типа на AVR е малко безмислно. Може с някои от по големите им процесори ама цените им са прекалено дебели за да си струва да се залагат за нещо голямо.
АVR е цар за дребна автоматика и други дребни приложения. В този сектор и ще си остане.
За по големи неща е глупаво да се залага на нещо което не е 32 бита и не е с единно адресно пространство.
|
| Сря Юни 15, 2011 3:47 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: 8 bit
Виж, не си прави илюзии че с групиране на 8-бит ще докараш производителност на АРМ. Примерно LPC3130 дето е АРМ9 на 180/270MHz при цена 2-3$ при това с набор от периферии и RAM дето на 8-бит ще видиш само през крив макарон. Ако искаш да се занимаваш с клъстърна обработка много по-добре ще е да е го правиш на куртекс примерно, където това е заложено в архитектурата и има не малко "мултикур" чипове. Или поне можеш за обща култура да ги разучиш. Все пак добре е да знаеш какво правят другите
При *някои* АВР компилатори може и да е така
Иначе въпросът не е до "сърдене". Разни хора, разни мнения. Моето е, че това което правиш има повече хляб на нови платформи, отколкото на старите 8-бит. Това че работиш на асемблер не е проблем, особено ако пишеш добър код. Аз също ползвам кърнел писан на асемблер. За всичко останало разбира се ползвам С/С++.
|
| Сря Юни 15, 2011 4:42 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Това са най-дребните предимства от писането на асемблер. Малко хора го правят просто
защото малко хора го умеят истински. Разбира се има значение _какъв_ асемблер, тоя
за 8 битовите ще си остане въздребен за едрите работи. Най-едрия 8-бита асемблер,
който съм виждал, е за 6809 - и преди около 20 години пишех доста на него.
Голямото предимство от писането на свестен асемблер (самия език като семантика) е
в богатството на семантиката, липсата на безсмислено тежки конструкции дето масата
програмисти основното им време отива в това как да уйдисат на езика от високо ниво
а не как да си свършат работа, и липсата на нужда от преводач - с езиците от високо
ниво човек си остава на ниво еквивалентно на нивото "разговорник" ползвайки чужд
език (което не им пречи да блъскат пишейки цели романи, романи като романи
писани ползвайки разговорник  ).
Всички приказки за това как някакъв код се местел лесно от платформа на друга
и т.н. са неверни, не е по-лесно на език от високо ниво отколкото от такъв на
ниско (правил съм го за 68k -> power). А колко от кода писан на високо ниво си
струва да бъде въобще пренасян е тема, дето хич няма и да я почвам  .
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Сря Юни 15, 2011 5:50 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
tqi, както казах всеки има право на собствено мнение...
В твоя случай обаче трябва дебело да се подчертае, че става въпрос за изцяло лично мнение. Няма нито университети, нито сериозни фирми дето биха си позволили да кажат подобно нещо 
|
| Сря Юни 15, 2011 6:11 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Вземи слез от небето най накрая. Не ти приляга да пишеш такива глупости. Вземи малко попрограмирай на C,ама не да напишеш 20 реда и да кажеш ами то C-то много неудобно нещо. Понавлезни,понаправи няколко проекта да хванеш малко как стават нещата и тогава ще можеш наистина да даваш по обосновани оценки за език на високо ниво.
Ако не го направиш,просто е добре да осъзнаеш че не можеш да имаш обективно мнение по темата и да не правиш коментари. Това което си постигнал си е дълбане в някаква твоя си посока и няма нищо общо с реалността валидна за останалите хора Wink
|
| Сря Юни 15, 2011 6:59 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
Някъде бях чел проучване на IBM - един програмист може да "произведе" стотина реда качествен код на ден. Въпросът е какво се постига със 100 реда asm или толкова на hll  . За портване към друга архитектура е ясно - много по-лесно е, когато се ползва hll.
|
| Сря Юни 15, 2011 7:26 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Никола, време за губене със C нямам. На времето съм загубил достатъчно (може би половин
година) с Паскал, та знам за какво става дума. Сега ако почнеш да ми разправяш колко
е голяма разликата между едното и другото и как не я разбирам няма и да се разхиля
а просто ще го игнорирам.
Оставям резултатите ми да говорят. Знам, че е нетривиално това, което правя и приказвам.
Който може да разбере за какво става дума - разбрал. Който не да си се гордее с принадлежността
към масовата общност и да си повтаря това, което всички повтарят. Почти всички хора
правят така.
Впрочем и аз пиша на езици от високо ниво, скрипт езика за DPS е гъвкав и удобен за
доста неща от ежедневието, примерно.
Но за код който ще остава и ще се ползва - и над който ще работя повече от няколко дни - със
сигурност не съм срещнал този, който може да бъде и наполовина толкова ефикасен колкото
аз мога да бъда на VPA.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Сря Юни 15, 2011 8:06 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Току ще сметнах данните за себе си за 14 годишен период - към 400 реда на ден.
Това не на "asm", а на VPA, едва ли на C можеш да намалиш броя на редовете.
Броя на буквите, да, там повечето реда са от 1 буква...
Тая сметка не включва времето, през което съм правил хардуер, платки, не съм
могъл да копая и т.н., затова смятам по 4 дни на седмица - което е леко завишено,
може да излязат и 500 реда средномесечен добив.
После ефикасността е различна според задачата, главната загуба на време е от
измислянето на подходящи алгоритми всъщност. Знам в килобайти на месец как
варирам, от 100 (много рядко нещо ме е озорвало за <100к/месец, веднъж или дваж
за тия години) до 500 (много рядко съм стигал дотам, само когато съм писал
нещо дето е очевидно как ще стане, примерно един дизасемблер за 68к
като правих на времето стана с такова темпо).
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Сря Юни 15, 2011 8:18 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
Според мен е добре да се постигне искания резултат  . По-малко значение имат "изразните" средства, които се ползват. Играл съм си да пиша аналог на printf на asm - стана, ама два пъти по-малко време ми отне да набутам библиотечната функция в rom-a.
|
| Сря Юни 15, 2011 8:33 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Разбира се, че целта е резултатът. И да, ако задачата е "hello world" или нещо подобно езиците
от високо ниво са далеч по-добри, те затова са писани.
Когато програмирането на нещо отнема повече от няколко дни, може би и над месец-два, тогава
високото ниво е прът в колелата. Това, което аз пиша за 3 месеца примерно и става готов работещ
продукт отнема година и нагоре на писачи на език от високо ниво, имал съм през годините
шансове да съпоствям. Някои неща и не мога да сравня, има такива дето факторът е
безкрайност (мъчат не един от 20+ години да направят неща, които имам и са ми отнели
под година, без успех дотук - ако и да са платени по стандартите в германия и щатите).
Естествено не говоря за "box moving", някой взел нещо готово, сменил ми хедъра и айде какъв
ефикасен програмист е - и такива съм срещал немалко. Работи в магазин за компютри, значи
е "компютърен специалист"... (носи кашоните). 
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Сря Юни 15, 2011 8:54 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
tqi, стига толкова вече!
Ако ти е умряла циганката дето те хвали, кажи и лично ще ти потърся нова
Да не разводняваме темата на човека. Ако искаш да му помогнеш, прегледай му работата, да му идеи. Нали си най-добрия все на нещо може да го научиш.
А ако младежът реши да мине на GNU среда, аз мога да му погна с интегрирането на асемблера с другите езици, т.е. как се правят хедъри, секции, дебъг и unwind информация и т.н.
Не че това не може и без мен да го разбере, но мога да му спестя ровене.
|
| Сря Юни 15, 2011 10:08 pm |
|
 |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
С е един от най яките езици.
Примерно ако напишеш input_a();
това става в няколко реда на асемблер...
аз на една брава се мъчих с тъпия асемблер две седмици. после седнах на си го направих това за 15 минути и една малка биричка...
 |  |  |  | Код: //PIC16F84A #include <pic.h> //#include <16F84A.h>
__CONFIG( WDTDIS & PWRTEN );
#define BUTTON_DELAY 25
int kb_hit(); void delay(int delay); void beep(int duration, int frequency); /// beep void correct_beep(); void error_beep(); void reset_beep(); void brava_opeen(); void button_beep();
char read_kb();
int pass_caunter = 1;
char temp_pass1; char temp_pass2; char temp_pass3; char temp_pass4; int reset = 0;
int Pass_count = 0;
int i, j, d; // loops varable
main(){ // Main
///----------- CONFING OPTION = 0b00000100; TRISB = 0b00000000;
TRISA2 = 0; TRISA3 = 0;
TRISB0 = 0; TRISB1 = 0; TRISB2 = 0; TRISB3 = 0; TRISB4 = 1; TRISB5 = 1; TRISB6 = 1; TRISB7 = 1; while(1==1){ // main loop
reset++;
if(pass_caunter < 5) { if(pass_caunter == 1){ if(kb_hit()){ temp_pass1 = read_kb(); pass_caunter++; reset = 0; } }
if(pass_caunter == 2){ if(kb_hit()){ temp_pass2 = read_kb(); pass_caunter++; reset = 0; } }
if(pass_caunter == 3){ if(kb_hit()){ temp_pass3 = read_kb(); pass_caunter++; reset = 0; } }
if(pass_caunter == 4){ if(kb_hit()){ temp_pass4 = read_kb(); pass_caunter++; reset = 0; } } }
if(pass_caunter == 5) { /// cheek pass if((temp_pass1 == '3') && (temp_pass2 == '5') && (temp_pass3 == '4') && (temp_pass4 == '9')) { correct_beep(); brava_opeen(); pass_caunter = 1; } else{ error_beep(); pass_caunter = 1; } }
if(pass_caunter > 1) { if(reset == 10000) { // reset reset_beep();
pass_caunter = 1; temp_pass1 = ' '; temp_pass2 = ' '; temp_pass3 = ' '; temp_pass4 = ' '; reset = 0; } }
} // end main loop } // end main
//------------------------------------------------------------------------ // PROGRAMS // // //----------------------------------------------------------------------
void delay(int delay){ for (i = 0; i < 255; i++) // Simple Delay Loop for (j = 0; j < delay; j++);
}
void beep(int duration, int frequency){ for(d = 0; d < duration; d++) { RA3 = 1; for (i = 0; i < 10; i++) // Simple Delay Loop for (j = 0; j < frequency; j++); RA3 = 0; for (i = 0; i < 10; i++) // Simple Delay Loop for (j = 0; j < frequency; j++); } }
int kb_hit(){ RB0 = 0; RB1 = 0; RB2 = 0; if(RB4 == 0) { RB0 = 1; RB1 = 1; RB2 = 1; return 1; } if(RB5 == 0) { RB0 = 1; RB1 = 1; RB2 = 1; return 1; } if(RB6 == 0) { RB0 = 1; RB1 = 1; RB2 = 1; return 1; } if(RB7 == 0) { RB0 = 1; RB1 = 1; RB2 = 1; return 1; }
RB0 = 1; RB1 = 1; RB2 = 1;
return 0; }
void button_beep(){ beep(50, 5); }
//------SUB RUTINE correct_beep() void correct_beep(){ beep(30,8); delay(20); beep(20,3); delay(20); beep(22,9); }
void error_beep(){ beep(22,9); delay(20); beep(22,9); }
void brava_opeen(){ RA2 = 1; /// oppen delay(1000); RA2 = 0; // close }
void reset_beep(){ beep(100,3); }
char read_kb(){ char rezult;
RB0 = 0; /// ckan row 123 if(RB4 == 0) { button_beep(); rezult = '1'; while(RB4 == 0) { } delay(BUTTON_DELAY); }
if(RB5 == 0) { button_beep(); rezult = '4'; while(RB5 == 0) { } delay(BUTTON_DELAY); }
if(RB6 == 0) { button_beep(); rezult = '7'; while(RB6 == 0) { } delay(BUTTON_DELAY); }
if(RB7 == 0) { button_beep(); rezult = '*'; while(RB7 == 0) { } delay(BUTTON_DELAY); }
RB0 = 1; // end roll skan
RB1 = 0; /// ckan row 123 if(RB4 == 0) { button_beep(); rezult = '2'; while(RB4 == 0) { } delay(BUTTON_DELAY); }
if(RB5 == 0) { button_beep(); rezult = '5'; while(RB5 == 0) { } delay(BUTTON_DELAY); }
if(RB6 == 0) { button_beep(); rezult = '8'; while(RB6 == 0) { } delay(BUTTON_DELAY); }
if(RB7 == 0) { button_beep(); rezult = '0'; while(RB7 == 0) { } delay(BUTTON_DELAY); }
RB1 = 1; // end roll skan
RB2 = 0; /// ckan row 123 if(RB4 == 0) { button_beep(); rezult = '3'; while(RB4 == 0) { } delay(BUTTON_DELAY); }
if(RB5 == 0) { button_beep(); rezult = '6'; while(RB5 == 0) { } delay(BUTTON_DELAY); }
if(RB6 == 0) { button_beep(); rezult = '9'; while(RB6 == 0) { } delay(BUTTON_DELAY); }
if(RB7 == 0) { button_beep(); rezult = '*'; while(RB7 == 0) { } delay(BUTTON_DELAY); }
RB2 = 1; // end roll skan
return rezult; }
|  |  |  |  |
И бравата си върви вече година без да спира хахха....
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Пет Юни 24, 2011 8:03 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|