JAL manual - language - pragma's

previous up next


name

The pragma name can be used to document the file name of a source file. The compiler checks that the stated name is indeed the current file name (the .jal extension must be omitted).

examples:

 -- a comment can state anything:
 -- this is file xyz
 -- but when this compiles you can be sure 
 -- that this is indeed file e0001!
 pragma name e0001 


target specification

The target specification pragma's give the compiler information about the target. The target chip (16c84, 16f84, SX18, SX28) and oscillator setting (hs, xt, rc, lp or internal ) must be specified. Optionally the watchdog (on or off, default off), protection (on or off, default off) and powerup delay (on or off, default on) can be specified. The clock frequency is not needed by the compiler, but some libraries ( busy delay, interval delay, hd44780, asynch ) need the clock frequency which is provided by the (pre-declared) global variable target_clock.

It is possibly to put all required pragma's in a project's source file, but it will often be easier to include one of the standard target files (16c84_4, SX28_50 etc.).

examples:

 -- 16c84_14.jal
 pragma target chip 16c84
 pragma target clock 4_000_000
 pragma target osc xt
 pragma target watchdog off
 pragma target powerup on
 pragma target protection off


jump_table

The pragma jump_table informs the compiler that the current subprogram contains code which manipulates the program counter via the PCL register. The compiler will ensure that the PCLATH bits are set appropriatelty.

examples:

 procedure _seven_table is
 pragma jump_table
 assembler
 addwf 2, f
 retlw seven_0
 ...
 retlw seven_f
 end assembler
 end procedure 


error

The error pragma produces a compilation error when it reaches the code generation phase of the compiler. It can be used to check for certain errors at compilation time, for instance an un-anticipated clock frequency.

Note that constant expressions evaluation and dead branch elimination takes place even when all optimization is switched off, hence contructs like the one below will work even without optimization.

examples:

 if target_clock < 4_000_000 then pragma error -- clock frequency must be at least 4 MHz end if 


test

The test pragma's can be used for two purposes:

The pragma test catch states that the next line should cause a compilation error at the indicated position. When this is the case the compiler will return a success condition, otherwise the compiler will return a failure condition.

examples:

 
 var byte n
 pragma test catch 9
 var bit n

The pragma test assert states that during simulated execution at this point of the program the indicated variable should have the indicated value. The compiler contains an integrated CPU core simulator which is activated by the -t option.

The pragma test done states that the running simulation should be ended. The compiler will return a success status.

examples:

 
 var byte a, b, c
 a = 5
 b = 6
 c = a * b
 pragma test assert c == 30
 c = a % b
 pragma test assert c == 5
 pragma test done

previous up next

AltStyle によって変換されたページ (->オリジナル) /