| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| IAR+MSP430+Assembly http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=12667 |
Страница 1 от 1 |
| Автор: | polinom [ Пон Фев 03, 2014 8:08 pm ] | ||||||||||||||||||
| Заглавие: | IAR+MSP430+Assembly | ||||||||||||||||||
Реших да се захвана поне с един асемблер на една фамилия както трябва. Избрал съм MSP-то. Викам ще разгледам малко пък за седмица -две ще го загрея. Първо държа да отбележа че IAR го мразя супер много, но има симулатор, и е супер понякога за 10-20 реда код. С инструкциите нямам проблем всички горе-долу го схващам,но тия асемблерски директиви ме
RSEG CSTACK RSEG- Begins a relocatable segment !?! Това всичко в сегмента ли го бута, или сегмента се загражда от следващият RSEG CODE. Друго то RSEG си иска число значи в CODE и CSTACK са дефинирани някъде. Къде ?? Друго си мислих да направя, но се съм сигурен какво точно да плесна на "org "
Не мога да разбера за какво са сложили долу модул за обслужване на прекъсвания. Tе са забранени не би трябвало да се занимавам с тях, като го махна IAR реве с думите "User error: Illegal opcode found on address 0x0" "DW RESET" за какво е тоя сегмент. Като определението за DW "Generates 16-bit constants".В смисъл то си е RESET си е лейбъл, за пръв път чувам етикет да има стойност. И каква е магическата функция на DW, според това което пише то просто си дефинира константа, да кажем за lookup table. Знам че тук има хора дето са орали и копали с тия процесори, ще се радвам драснат 2-3 реда. Ако може без за коментари от типа "Защо ползвам IAR, MSP430 или защо точно тоя проц". |
|||||||||||||||||||
| Автор: | Dimitar [ Пон Фев 03, 2014 9:28 pm ] |
| Заглавие: | Re: IAR+MSP430+Assembly |
polinom, не са ти ясни основни положения за контролерите, така че по-леко с мразенето, защото нямаш основа на която да стъшиш за да мразиш. Отделно пък да мразиш развойна среда ми се струва леко пресилено - би трябвало да имаш предпочитани и не предпочитани такива, ама чак пък да обичаш/мразиш DW RESET ти дефинира ресет вектора и нищо, че прекъсванията са ти забранени има още един вектор в контролерите - този за рисет. Това е адреса от който контролера тръгва като му пуснеш тока. Ако я изтриеш тая декларация линкера няма да знае къде да ти сложи началото на програмата Научи ги тия основни положения и после дай да видим какво ще мразим/обичаме |
|
| Автор: | polinom [ Пон Фев 03, 2014 11:55 pm ] |
| Заглавие: | Re: IAR+MSP430+Assembly |
Чакай сега, аз никога не съм претендирал за тънък познавач, факта че питам го доказва. Исках много да се занимавам с embedded, но просто започнах работа в друга сфера, за сега нивото ми е на хоби ентусиаст, просто гледам да не ръждясвам. В случая аз проблем с контролера нямам, IAR-a за съм го пипал за пръв и последен път преди 3 години за 1 час. Преди време в университета имахме вземане даване с MSP430g2231. Кода правеше същото но беше в пъти по-елементарен. ORG <adsress> кода след него и сега като го видях тоя пример, с тия директиви супер ме обърка, иначе да ресет вектора забравих |
|
| Автор: | Vesko [ Пон Фев 03, 2014 11:58 pm ] | |||||||||
| Заглавие: | Re: IAR+MSP430+Assembly | |||||||||
Само едно уточнение. Началото на програмата за линкера няма нищо общо с ресет вектора. Линкера ще си линкне програмата и без тази декларация. В общи линии на него ме е все тая къде са ресет векторите на процесора. Старт точката обикновено се дефинира с END директивата на асемблера. А може да се линкне програма и без старт поинт.... |
||||||||||
| Автор: | Dimitar [ Вто Фев 04, 2014 2:43 am ] | ||||||||||||||||||
| Заглавие: | Re: IAR+MSP430+Assembly | ||||||||||||||||||
То за моженето може и да може, ама какъв е смисъла
Тук си прав - недоглеждане от моя страна. Разбира се че "ORG RESET_VECTOR" е ресет вектора - незнам къде съм гледал предния път DW RESET генерира 16 битова константа, която в случая е началото на програмата и пренасочва ресет вектора към въпросния адрес където е началото. |
|||||||||||||||||||
| Автор: | polinom [ Пет Фев 07, 2014 3:11 pm ] |
| Заглавие: | Re: IAR+MSP430+Assembly |
Другия въпрос на който не можах да намеря отговор е къде се намира стака? Хардуерният ако има такъв, защото в документацията не видях да пише нещо за "hardware stack". При PIC18 си има такава дефиниция и се знае че стака е 31 нива, с 21 битови клетки, реализиран като отделна структура, но достъпен за четене/запис. При MSP430 липсва , или аз не виждам такава информация. Къде е реализиран, може ли да се достъпи, освен чрез POSH,POP или чрез MOV R7,0(SP) и MOV 2(SP),R6. Мисълта ми е от кой до кой адрес се реализира ? |
|
| Автор: | Vesko [ Пет Фев 07, 2014 3:14 pm ] |
| Заглавие: | Re: IAR+MSP430+Assembly |
Стека може да е навсякъде в адресното пространство. RESET mov.w #SFE(CSTACK),SP ; Initialize stackpointer Горният ред го инициализира на края на сегмента CSTACK. |
|
| Автор: | Vesko [ Пет Фев 07, 2014 3:17 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: IAR+MSP430+Assembly | |||||||||||||||||||||||||||
Точно DW RESET на подходящо място дефинира ресет вектора. "ORG RESET_VECTOR" заедно с дефиницията в хедър файла само посочва "правилното" място. |
||||||||||||||||||||||||||||
| Автор: | stefan63 [ Пет Фев 07, 2014 5:18 pm ] |
| Заглавие: | Re: IAR+MSP430+Assembly |
....къде се намира стака? Където го сложиш в рама. МСП няма нищо общо с ПИК, освен силиция и пластмасата. Адресното пространство е едно, можеш да изпълняваш иснтрукции от рама дори - не че ще ти се наложи. На асемблер стека го набутваш в най-горните адреси на рама(На Си е друго, но там не го разбирам.). Като се вика процедура - стекпойнтерът потъва към малките адреси. По принцип следиш да не ти набъбне много използвания рам - и да се презапише от стека , или стека да се инфектира от някоя променлива. Трябва да знаеш кое къде се намира в процесора, как се променя стековия указател . Щом си си харесал ИАР - прочети как се предават параметрите и резултатите между функциите на Си - може да ти потрябва. П Влез в папката на ИАР-а, подпапка "конфиг". Там за всеки процесор има файл. Тези числа и имена , които се чудиш откъде идват - ги има там, или в хедър файла за процесора. На тоя етап тези предефинирани неща сигурно ще са ти от полза. По нататък можеш да ги зарежеш Две неща за асемблера да знаеш - в ИАР при заделяне на рам ако трябва да подравняваш на дума, на двойна дума и т.н. - ползвай ALIGN директива. - ако имаш променлива AAA mov #10,AAA и mov #10,&AAA ще дадат един и същ резултат - променливата ще добие стойност 10. Генерираният код обаче е различен. И ако преминеш към процесор с 20 битов адрес ,то първият ред ще се изпълнява коректно, само докато инструкцията се намира в първите 64килобайта. Т |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|