Отговори на тема  [ 20 мнения ]  Отиди на страница 1, 2  Следваща
MPLAB: Как се слагат етикети в макроси за MPASM? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение MPLAB: Как се слагат етикети в макроси за MPASM?
MPLAB: Как се слагат етикети в макроси за MPASM?
С посления MPLAB съм, като сложа етикети в макроса, при повторно ползвнае на макроса се оплаква:
"Address label duplicated or different in second pass (lbl_Check)"

Код:
TimeBits        Macro           xFile_Ctrl,xBit
                movf            xFile_Ctrl,W
                btfsc           _Z
                goto            lbl_Stop
                addlw           1
                btfss           _Z
                goto            lbl_Check
                bsf             PORTB,xBit
                goto            lbl_Next
lbl_Check
                andwf           vTime_x10ms,W
                btfsc           _Z
                bsf             PORTB,xBit
                btfss           _Z
lbl_Stop
                bcf             PORTB,xBit
lbl_Next
                endm


Вто Сеп 08, 2009 9:50 am
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 06, 2005 2:06 pm
Мнения: 194
Местоположение: Sofia
Мнение 
M1 MACRO
LOCAL ET1,ET2
ET1


ET1


Вто Сеп 08, 2009 10:31 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
Благодаря ти много!


Вто Сеп 08, 2009 11:21 am
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Дек 06, 2008 9:22 am
Мнения: 119
Местоположение: Пловдив
Мнение 
Ето ти един пример за макрос за избор на банка

Код:
BANK0      MACRO              
           BCF      STATUS,RP0
           ENDM


Последна промяна a_stankov на Сря Сеп 09, 2009 7:32 am, променена общо 1 път



Вто Сеп 08, 2009 7:14 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
a_stankov написа:
Ето ти един пример за макрос за избор на банка

BANK0 MACRO
BCF STATUS,RP0
ENDM


Има и по-добри примери :)
Код:
movFL           Macro   File,Literal  ;  File <- W <- Literal
                movlw   Literal
                BankSel File
                movwf   File
             endm


Вто Сеп 08, 2009 7:39 pm
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Дек 06, 2008 9:22 am
Мнения: 119
Местоположение: Пловдив
Мнение 
Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

Код:
TimeBits     
                movf            xFile_Ctrl,W
                btfsc           _Z
                goto            lbl_Stop
                addlw           1
                btfss           _Z
                goto            lbl_Check
                bsf             PORTB,xBit
                goto            lbl_Next
lbl_Check
                andwf           vTime_x10ms,W
                btfsc           _Z
                bsf             PORTB,xBit
                btfss           _Z
lbl_Stop
                bcf             PORTB,xBit
lbl_Next
                return



и след тотва си ги викаш с call и няма да имаш проблеми и самия код става по оптимален.


Сря Сеп 09, 2009 7:29 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
a_stankov написа:
Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

Благодаря ти за препоръката.
Трябва да те разочаровам - в прекъсвания (какъвто е случея), на процесори с само 8 нива на стек подпрограмите са доста противопоказни.
Освен това, примерчето, което си написал, няма как да стане, защото xBit не е точно определен бит (трябва да се предава маска, а тя, в подпрограмата да се пренася на бита на порта).
Както и да е, ако 1995г имаше поне заченки, че Моторола, Мостек или който и да е друг щяха да произведат малки микроконтролери, никога нямаше да се занимавам с тия гурели на микрочип :)


Сря Сеп 09, 2009 8:40 am
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Дек 06, 2008 9:22 am
Мнения: 119
Местоположение: Пловдив
Мнение 
NikB написа:
a_stankov написа:
Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

Благодаря ти за препоръката.
Трябва да те разочаровам - в прекъсвания (какъвто е случея), на процесори с само 8 нива на стек подпрограмите са доста противопоказни.
Освен това, примерчето, което си написал, няма как да стане, защото xBit не е точно определен бит (трябва да се предава маска, а тя, в подпрограмата да се пренася на бита на порта).
Както и да е, ако 1995г имаше поне заченки, че Моторола, Мостек или който и да е друг щяха да произведат малки микроконтролери, никога нямаше да се занимавам с тия гурели на микрочип :)


Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно
защото е така написана , че никога не се връщаш от там от където си дошъл , от call излизаш с goto и въпреки всичко работи безупречно
и има хиляди продадени изделия с нея.Въпрос е на малко фантазия при писането - асемблера е чудесен за тази цел. :D
И при прекъсване невиждам проблем да ползваш подпрограми какво им е толкова противопоказно.
Ако пуснеш програмата през протеус, онзи постоянно пищи за грешка и въпреки това чудо - работи безотказно.


Сря Сеп 09, 2009 11:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

гледам и не вярвам на ушите си ;-)


Чет Сеп 10, 2009 12:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
miro_atc написа:
a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

гледам и не вярвам на ушите си ;-)


T'ва и в Холувудските филми го нема :cry: :cry: :cry:


Чет Сеп 10, 2009 12:48 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Не е писал за какъв пикльо става дума, но май е за 16... с тези 8 нива на стека. То няма и стек, има само FIFO, което пази последните 8 стойности на PC. Ако адреса за връщане не ти трябва, няма проблем да го загубиш, мисля 4е и никаква защита срещу това няма там :) Ама от какъв бяс от call ще се връщаш с goto... че и ще се хвалиш с това :D Това не го разбирам вече.


Чет Сеп 10, 2009 10:37 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
bateAz написа:
miro_atc написа:
a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

гледам и не вярвам на ушите си ;-)


T'ва и в Холувудските филми го нема :cry: :cry: :cry:


Случвало ми се е и на PC. :) Ако прелее в памет, която е заделена за твоя процес, но не се ползва. В случая с микроконтролера е още по-лесно, щото там няма управление на паметта.


Чет Сеп 10, 2009 12:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
a_stankov написа:
...защото е така написана , че никога не се връщаш от там от където си дошъл , от call излизаш с goto и въпреки всичко работи безупречно

Ами много ясно ,че работи - goto не ползва стека. Не е ясно обаче защо скачаш с call след като може директно и с goto, без да товариш стека?


Чет Сеп 10, 2009 1:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
Бах' ти програмиста за хиляди изделия.............. 8O
Голям фантазьор е - спор няма :cry:


Чет Сеп 10, 2009 1:33 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
м'чи ко толкуз...


Чет Сеп 10, 2009 1:43 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни