Recent

Author Topic: Volatile  (Read 390 times)

dseligo

  • Hero Member
  • *****
  • Posts: 885
Volatile
« on: October 05, 2022, 10:32:55 am »
In C, when you use variable in interrupt routine, you have to declare variable with 'volatile' (so it always load/save variable in SRAM):
Code: C  [Select][+][-]
  1. volatile int test;

Is something similar needed in Free pascal and if it is, how to do it?

RayoGlauco

  • Full Member
  • ***
  • Posts: 134
  • Beers: 1567
Re: Volatile
« Reply #1 on: October 05, 2022, 11:12:09 am »
To err is human, but to really mess things up, you need a computer.

Thaddy

  • Hero Member
  • *****
  • Posts: 12621
Re: Volatile
« Reply #2 on: October 05, 2022, 11:41:37 am »
Yes there is something available in trunk/main: https://wiki.freepascal.org/FPC_New_Features_Trunk#Support_for_.22volatile.22_intrinsic

It comes with a link to an example:
https://gitlab.com/freepascal.org/fpc/source/-/blob/main/tests/test/tmt1.pp

You need trunk/main, it is not in 3.2.2 or fixes 3.2.3

Also note the remark that in the future it may be done through an attribute.
« Last Edit: October 05, 2022, 11:49:57 am by Thaddy »
The only thing I can say about Putin - born st Petersburg- is that he is indeed Russian, as opposed to Stalin, who was Georgian. Depending of historical time frame they could both be Lithuanian or Polish...even German. Shut him up!

dseligo

  • Hero Member
  • *****
  • Posts: 885
Re: Volatile
« Reply #3 on: October 05, 2022, 11:48:24 am »
Thank you all, I'll test it.

ccrause

  • Hero Member
  • *****
  • Posts: 688
Re: Volatile
« Reply #4 on: October 05, 2022, 01:29:46 pm »
In C, when you use variable in interrupt routine, you have to declare variable with 'volatile' (so it always load/save variable in SRAM):
Code: C  [Select][+][-]
  1. volatile int test;

Is something similar needed in Free pascal and if it is, how to do it?
It is not (yet?) required, since FPC will reload global variables. As Thaddy mentioned, volatile is available in the development branch, so eventually it will/may be added to a stable release.  At that time it may be prudent to wrap data access with the volatile intrinsic (when necessary) to guard against overly aggressive compiler optimization interfering with the programmer's assumptions.

 

TinyPortal © 2005-2018