|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:05 pm
|
Страница 1 от 1
|
[ 9 мнения ] |
|
| Автор |
Съобщение |
|
polinom
Ранг: Новодошъл
Регистриран на: Съб Юни 09, 2012 12:23 am Мнения: 146 Местоположение: София/Стара Загора
|
 IAR+MSP430+Assembly
Реших да се захвана поне с един асемблер на една фамилия както трябва. Избрал съм MSP-то. Викам ще разгледам малко пък за седмица -две ще го загрея. Първо държа да отбележа че IAR го мразя супер много, но има симулатор, и е супер понякога за 10-20 реда код. С инструкциите нямам проблем всички горе-долу го схващам,но тия асемблерски директиви ме  . Чета "IAR Assembler ™Reference Guide for Texas Instruments’ MSP430 Microcontroller Family", но аз ли съм крив той ли не става, не знам. 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 или защо точно тоя проц".
|
| Пон Фев 03, 2014 8:08 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: IAR+MSP430+Assembly
polinom, не са ти ясни основни положения за контролерите, така че по-леко с мразенето, защото нямаш основа на която да стъшиш за да мразиш. Отделно пък да мразиш развойна среда ми се струва леко пресилено - би трябвало да имаш предпочитани и не предпочитани такива, ама чак пък да обичаш/мразиш  . DW RESET ти дефинира ресет вектора и нищо, че прекъсванията са ти забранени има още един вектор в контролерите - този за рисет. Това е адреса от който контролера тръгва като му пуснеш тока. Ако я изтриеш тая декларация линкера няма да знае къде да ти сложи началото на програмата  . CSTACK и CODE трябва да дефинирани в линкерския файл на проекта. Не мога сега да се сетя как се казваше тоя файл, ама трябва да е някъде в проекта ти. Научи ги тия основни положения и после дай да видим какво ще мразим/обичаме  .
|
| Пон Фев 03, 2014 9:28 pm |
|
 |
|
polinom
Ранг: Новодошъл
Регистриран на: Съб Юни 09, 2012 12:23 am Мнения: 146 Местоположение: София/Стара Загора
|
 Re: IAR+MSP430+Assembly
Чакай сега, аз никога не съм претендирал за тънък познавач, факта че питам го доказва. Исках много да се занимавам с embedded, но просто започнах работа в друга сфера, за сега нивото ми е на хоби ентусиаст, просто гледам да не ръждясвам. В случая аз проблем с контролера нямам, IAR-a за съм го пипал за пръв и последен път преди 3 години за 1 час. Преди време в университета имахме вземане даване с MSP430g2231. Кода правеше същото но беше в пъти по-елементарен. ORG <adsress> кода след него и сега като го видях тоя пример, с тия директиви супер ме обърка, иначе да ресет вектора забравих  голям резил. И тоя CSTACK, за какво се инициализира, освен че е стекова памет. Тоя контролер няма ли си хардуерен такъв ? В картата на паметта Main: code memory 0FFFFh-08000h. По начина по който са ми показали излиза, без да инициализирам CSTACK, ORG 0x8000 и кода върви, но когато стека е създаден за да използвам ORG иска се да се измести ,в моя случай org 0x0394, ми върши работа. Явно CODE и CSTACK сe изчисляват по време на линкаването, и линкера явно си знае какво да прави, как, къде и колко да задели. Сега видях че стака може да се променя, в моя случай е 80 и 80 heap. И в края на деня остава големият въпрос " DW RESET" как процедира, тъй като описанието на директивата от 2 реда е следното "Use DC8, DC16, DC24, DC32, DF32, or DF64to create a constant, which means an area of bytes is reserved big enough for the constant." и нищо повече.Вярно е че по време на дебъга RESET e 16433(каквото и да значи). Мога да си го ползвам без да знам защо и да съм щастлив, но не обичам магически работещият код. Виждам че си написал че DW RESET дефинира ресет вектора, той си е дефинирам в хедърният файл, "#define RESET_VECTOR (15 * 2u)".
Последна промяна polinom на Вто Фев 04, 2014 12:01 am, променена общо 1 път
|
| Пон Фев 03, 2014 11:55 pm |
|
 |
|
Vesko
Ранг: Популярен
Регистриран на: Пон Мар 22, 2010 8:52 pm Мнения: 328
|
 Re: IAR+MSP430+Assembly
Само едно уточнение. Началото на програмата за линкера няма нищо общо с ресет вектора. Линкера ще си линкне програмата и без тази декларация. В общи линии на него ме е все тая къде са ресет векторите на процесора. Старт точката обикновено се дефинира с END директивата на асемблера. А може да се линкне програма и без старт поинт....
|
| Пон Фев 03, 2014 11:58 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: IAR+MSP430+Assembly
То за моженето може и да може, ама какъв е смисъла  . Тук си прав - недоглеждане от моя страна. Разбира се че "ORG RESET_VECTOR" е ресет вектора - незнам къде съм гледал предния път  . DW RESET генерира 16 битова константа, която в случая е началото на програмата и пренасочва ресет вектора към въпросния адрес където е началото.
|
| Вто Фев 04, 2014 2:43 am |
|
 |
|
polinom
Ранг: Новодошъл
Регистриран на: Съб Юни 09, 2012 12:23 am Мнения: 146 Местоположение: София/Стара Загора
|
 Re: IAR+MSP430+Assembly
Другия въпрос на който не можах да намеря отговор е къде се намира стака? Хардуерният ако има такъв, защото в документацията не видях да пише нещо за "hardware stack". При PIC18 си има такава дефиниция и се знае че стака е 31 нива, с 21 битови клетки, реализиран като отделна структура, но достъпен за четене/запис. При MSP430 липсва , или аз не виждам такава информация. Къде е реализиран, може ли да се достъпи, освен чрез POSH,POP или чрез MOV R7,0(SP) и MOV 2(SP),R6. Мисълта ми е от кой до кой адрес се реализира ?
|
| Пет Фев 07, 2014 3:11 pm |
|
 |
|
Vesko
Ранг: Популярен
Регистриран на: Пон Мар 22, 2010 8:52 pm Мнения: 328
|
 Re: IAR+MSP430+Assembly
Стека може да е навсякъде в адресното пространство.
RESET mov.w #SFE(CSTACK),SP ; Initialize stackpointer
Горният ред го инициализира на края на сегмента CSTACK.
|
| Пет Фев 07, 2014 3:14 pm |
|
 |
|
Vesko
Ранг: Популярен
Регистриран на: Пон Мар 22, 2010 8:52 pm Мнения: 328
|
 Re: IAR+MSP430+Assembly
Точно DW RESET на подходящо място дефинира ресет вектора. "ORG RESET_VECTOR" заедно с дефиницията в хедър файла само посочва "правилното" място.
|
| Пет Фев 07, 2014 3:17 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: IAR+MSP430+Assembly
....къде се намира стака? Където го сложиш в рама. МСП няма нищо общо с ПИК, освен силиция и пластмасата. Адресното пространство е едно, можеш да изпълняваш иснтрукции от рама дори - не че ще ти се наложи. На асемблер стека го набутваш в най-горните адреси на рама(На Си е друго, но там не го разбирам.). Като се вика процедура - стекпойнтерът потъва към малките адреси. По принцип следиш да не ти набъбне много използвания рам - и да се презапише от стека , или стека да се инфектира от някоя променлива. Трябва да знаеш кое къде се намира в процесора, как се променя стековия указател . Щом си си харесал ИАР - прочети как се предават параметрите и резултатите между функциите на Си - може да ти потрябва. П Влез в папката на ИАР-а, подпапка "конфиг". Там за всеки процесор има файл. Тези числа и имена , които се чудиш откъде идват - ги има там, или в хедър файла за процесора. На тоя етап тези предефинирани неща сигурно ще са ти от полза. По нататък можеш да ги зарежеш  . Две неща за асемблера да знаеш - в ИАР при заделяне на рам ако трябва да подравняваш на дума, на двойна дума и т.н. - ползвай ALIGN директива. - ако имаш променлива AAA mov #10,AAA и mov #10,&AAA ще дадат един и същ резултат - променливата ще добие стойност 10. Генерираният код обаче е различен. И ако преминеш към процесор с 20 битов адрес ,то първият ред ще се изпълнява коректно, само докато инструкцията се намира в първите 64килобайта. Т
|
| Пет Фев 07, 2014 5:18 pm |
|
|
|
Страница 1 от 1
|
[ 9 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|