[Oberon] Volatile variables in Oberon

Magnus Karlsson magnus at saanlima.com
Sat Jul 30 19:00:09 CEST 2016


Your C code seems to a bit convoluted if just want to access a register.
This is quite often done by defining the registers as volatile pointers 
like this:

Register address definitions (in this case for a UART):
#define UART0_UDR      (*(volatile  uint8_t *)(0x44000000))
#define UART0_UCR      (*(volatile uint16_t *)(0x44000004))
#define UART0_UBRR     (*(volatile uint16_t *)(0x44000008))

You can then access registers like this (read UART data register):
uint8_t c = UART0_UDR;

Magnus

On 7/29/2016 11:06 PM, Skulski, Wojciech wrote:
> Chris:
>
>> But Oberon variables are not mapped to registers that can be changed "from
>> the other end". The explicit operations SYSTEM.GET and SYSTEM.PUT are used
>> when you want to transfer data between a peripheral register (mapped to an
>> absolute memory location) and Oberon variables.
>   Pardon my C on this mailing list. The point I want to make is that it is ugly.
>
> Here is a sample of my C program where I am reading from an absolute memory location mapped to an FPGA register. The "target" is an integer, which is then used to retrieve a value from the FPGA. The address is not constant, but I can make it constant using a #define.
>
>   long target; /* long int holds addr, needs a typecast */
>   short value;
>   short *virt_saddr;	/* typed pointer to 16-bit short */
>
>   virt_saddr = (short *) target; /* convert target to pointer */
>   value = * virt_saddr;            /* read value from address   */
>
> I would prefer to write in C something like the following:
>   
>   short value at address; /* address is constant, which is most often the case*/
>
> In Oberon it would be something like this:
>
>   CONST address = ....;
>    VAR value: INTEGER AT address; (* address must be constant*)
>
> Now the question, is this unreasonable?
>
> Wojtek
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20160730/576da95a/attachment.html>


More information about the Oberon mailing list