[elektro] MPLAB C30 inline asm

hg12345 hg12345 at freemail.hu
Fri Apr 23 11:09:16 CEST 2010


Őnáló fordítási egységben van.

Ha megírtam nehezítetten akkor ASM-ben megy. :-(, de nem akartam ASM-ben irni programot.


Hogy szép a C nyelv és nehéz? Nem tudom milyen a többi implementáció, de igazából sokat nem várok azoktól se, egy biztos uC környezetre egy nagy kalap sz...rt ér az egész. 
Mire kikerülöm azokat a hülyeségeket amit az leírásba meghatároztak kitépem a hajamat, aztán amikor kiderül számolni se tunaultak és programozni a fordító megvalósítói az már csak ráadás. Az eredmény lassú és nagy program. Eddig azt hittem, hogy 30% nagyobb kód és kb ennyivel lassabb futás egy jó ASM programhoz képest, (persze jó programozó kell) ez ezt jelentősen felül múlja.


  
  Talán,

sokszor az előző sorban, vagy a környezetében!

A minap jártam ugy , hogy egy az INT rutinban elhelyezett
függvény okozott gondot.
Amit persze nem lehet az inicializáló rutinban szintén meghívni,
mert az ezáltal kettős szálon hívódna meg.. Igy utólag logikus!
És ezt mint hibaüzit, EGYENLŐRE sehol sem találom a kézikönyben.

De azért a fordító a problémakört  szerencsére korrekten lekezeli,
és egy 'héber' anyázással kiszól ha kell ..

Meghatározhatatlan esetekben
végül is próbálkozni kell igy is - ugy is.
Talán, ha végre valamit is lefordít,
  a miértekért megmarad az ASM-ben turkálás..

Szinte bármit is megtehetsz !!!
Ezért is nehéz és szép  nyelv a C :)

Üdv   István





2010.04.22. 18:51:16 dátumon hg12345 <hg12345 at freemail.hu> írta:

> Hi!
>
> Néha már azt hiszem értem a MPLAB C30  (alias GCC 4.xx) inline asm :-(
> De tévedtem :-(
>
> Két problémám van, szeretnék egy asm fuggvényt C betétként megírni.
>
> A függvényt megírtam, az csinálja mit szeretnék, de !
>
> 1, ha használnám a regiszter változókat amit a bemenetnek definiáltam
>
> ExtMath.c.s:57: Error: bad expression
> ExtMath.c.s:57: Warning: Missing , assumed.
> ExtMath.c.s:57: Error: Too many operands ('mov.d %1,w4').
>
> üzeneteket kapom.   %1 -> "r"(T21) ahol
>
> register long T21 asm("w0"); van definiálva.
>
> a "mov.d w0,w4" simán lefordul.
>
> 2, amikor simán lefordul és az optimalizálást is bekapcsolom akkor  
> egyetlen utasítás sor se tetszik neki:
>
> ExtMath.c.p: line 0055: PA-E0013 Error: Unrecognized instruction mnemonic
> ExtMath.c.p: line 0055: PA-E0028 Error: Expected a machine or assembler  
> instruction
>
> Ami a legszebb, hogy az 55 sorban:
>
> 	mov.d	w0,w4				
> mov.d	w2,w6				
> mul.uu	w4,w6,w0
>
> a helyes kód van.
>
>  Hol lehet a hiba?
>
> üdv
>
>
> -----------------------------------------
>           elektro[-flame|-etc]



-- 
Az Opera forradalmian új levelezőjét használva: http://www.opera.com/mail/

-----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list