ZdenekS Programování Mosaic 31. 1. 2023 19:29 1. 2. 2023 20:48

Dobrý den, když jsem se pokusil použít tuto direktivu v ST projektu, tak mi překladač hlásí "Directives {ASM} or {END_ASM} can be entered only inside POU body", bez ohledu na to zda jsem to zkusil v programu, funkčním bloku nebo funkci.

V jaké části tedy může být použita?

Mimochodem - chtěl jsem tím řešit výpočet rozdílu hodnoty pointerů (tedy kolik je mezi nimi bytů), než jsem zcela náhodně zde v jedné z nesouvisejících odpovědí objevil funkci PTR_TO_UDINT a opačné, o které není v nápovědě ani zmínka.

Odpovědi 1

Luboš Urban 1. 2. 2023 20:48

Direktiva {asm} nesmí být použita v deklarační části POU a ani hned za klíčovým slovem END_VAR, kterým končí deklarační část POU. Když taková situace nastane, je potřeba ještě vložit před {asm} begin, což překladači řekne, že tam už začíná výkonná část POU, že už je to součást programu.

Vypadá to takhle:

  VAR
    ...
  END_VAR

  BEGIN
  {ASM}
    ...
  {END_ASM}

// dál pokračuje kód v ST

Vaše odpověď

Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.