[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