[comp.lang.c] Interrupt routines in 'C'

arielf@taux01.UUCP (Ariel Faigon) (10/12/89)

--- Background:

There is a general antagonism between striving to write standard
(portable etc.) C programs, and writing embedded applications in C.

I'm not referring to points that are _clearly_ hardware dependent
and as such expected to be written in assembly, but to general universal
concepts that nevertheless didn't found their way into the language.

The pANS distinguishes between a freestanding (embedded) environment
and a hosted environment. The 'C' language was nicely "hosted" by UNIX
as it was shaped; it seems that the pANS, despite its awareness of the
problem came too late for changing that.

--- Examples:

The best example I can think of are interrupt routines: The code generated
by a compiler for an interrupt routine should be somewhat special, e.g.
it may need to save volatile registers, it may need to return-from-interrupt
instead of a simple 'return-from-subroutine'.

[Initialized data is another example: existing implementations of the standard
library (with roots in some *NIX environment) have initialized static data
which prevents them from being reentrant. The pANS should be blessed on this
issue, as it only allows but not mandates such implementations.]

--- The situation as I see it:

The pANS enables implementation-dependent extensions via the #pragma
directive, while this can solve any one C implementor problem, it leads
to a myriad of distinct solutions which is clearly not what a standard
strives to achieve. On the other hand departing from existing C
by adding keywords (such as 'interrupt') seems to be even a worse
solution (it might eventually lead to a different language :-).

I feel that the least of evils for an embedded C (read cross-C-compiler)
implementor is to look around and try to be as close as possible in his/her
solution to existing implementations (If I'm not mistaken some PC compilers
have an 'interrupt' specifier).

--- My question is:

What in your view is the best way to define an interrupt-routine in 'C' ?
Do you know existing C compilers which solve the problem, what is their
exact syntax to define interrupt routines ?

Any help will be appreciated. Please mail answers to me,
If there are more than 10 answers, I'll summarize.
-- 
Ariel Faigon, CTP group, NSTA
National Semiconductor (Israel)
6 Maskit st.  P.O.B. 3007, Herzlia 46104, Israel   Tel. (972)52-522260
arielf%taux01@nsc.com   @{hplabs,pyramid,sun,decwrl} 34 48 E / 32 10 N