Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

MPLAB: Как се слагат етикети в макроси за MPASM?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7111
Страница 1 от 2

Автор:  NikB [ Вто Сеп 08, 2009 9:50 am ]
Заглавие:  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

Автор:  rumen65 [ Вто Сеп 08, 2009 10:31 am ]
Заглавие: 

M1 MACRO
LOCAL ET1,ET2
ET1


ET1

Автор:  NikB [ Вто Сеп 08, 2009 11:21 am ]
Заглавие: 

Благодаря ти много!

Автор:  a_stankov [ Вто Сеп 08, 2009 7:14 pm ]
Заглавие: 

Ето ти един пример за макрос за избор на банка

Код:
BANK0      MACRO              
           BCF      STATUS,RP0
           ENDM

Автор:  NikB [ Вто Сеп 08, 2009 7:39 pm ]
Заглавие: 

a_stankov написа:
Ето ти един пример за макрос за избор на банка

BANK0 MACRO
BCF STATUS,RP0
ENDM


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

Автор:  a_stankov [ Сря Сеп 09, 2009 7:29 am ]
Заглавие: 

Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

Код:
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 и няма да имаш проблеми и самия код става по оптимален.

Автор:  NikB [ Сря Сеп 09, 2009 8:40 am ]
Заглавие: 

a_stankov написа:
Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

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

Автор:  a_stankov [ Сря Сеп 09, 2009 11:08 pm ]
Заглавие: 

NikB написа:
a_stankov написа:
Използвай повече подпрограми а не макроси.Макросите раздуват кода до безобразие а ще видиш
,че това е важно като почне да не ти стига мястото ето ти примера от първия ти пост.

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


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

Автор:  miro_atc [ Чет Сеп 10, 2009 12:12 am ]
Заглавие: 

a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

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

Автор:  bateAz [ Чет Сеп 10, 2009 12:48 am ]
Заглавие: 

miro_atc написа:
a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

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


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

Автор:  setoy [ Чет Сеп 10, 2009 10:37 am ]
Заглавие: 

Не е писал за какъв пикльо става дума, но май е за 16... с тези 8 нива на стека. То няма и стек, има само FIFO, което пази последните 8 стойности на PC. Ако адреса за връщане не ти трябва, няма проблем да го загубиш, мисля 4е и никаква защита срещу това няма там :) Ама от какъв бяс от call ще се връщаш с goto... че и ще се хвалиш с това :D Това не го разбирам вече.

Автор:  Реконструктор [ Чет Сеп 10, 2009 12:17 pm ]
Заглавие: 

bateAz написа:
miro_atc написа:
a_stankov написа:
Ще ти споделя нещо , имаме във фирмата програма която работи и постоянно се препълва стека.Въпреки това програмата си работи безупречно


8O

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


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


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

Автор:  ji4ka [ Чет Сеп 10, 2009 1:06 pm ]
Заглавие: 

a_stankov написа:
...защото е така написана , че никога не се връщаш от там от където си дошъл , от call излизаш с goto и въпреки всичко работи безупречно

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

Автор:  Wise [ Чет Сеп 10, 2009 1:33 pm ]
Заглавие: 

Бах' ти програмиста за хиляди изделия.............. 8O
Голям фантазьор е - спор няма :cry:

Автор:  ДедоБоре [ Чет Сеп 10, 2009 1:43 pm ]
Заглавие: 

м'чи ко толкуз...

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/