atom-1.0.9: A DSL for embedded hard realtime applications.

Safe Haskell | None

Language.Atom.Code

Description

Atom C code generation.

Synopsis

- data Config = Config {
  - cFuncName :: String
  - cStateName :: String
  - cCode :: [Name] -> [Name] -> [(Name, Type)] -> (String, String)
  - cRuleCoverage :: Bool
  - cAssert :: Bool
  - cAssertName :: String
  - cCoverName :: String
  - hardwareClock :: Maybe Clock
  }
- data Clock = Clock {
  - clockName :: String
  - clockType :: Type
  - delta :: Integer
  - delay :: String
  - err :: Maybe String
  }
- writeC :: Name -> Config -> StateHierarchy -> [Rule] -> Schedule -> [Name] -> [Name] -> [(Name, Type)] -> IO RuleCoverage
- defaults :: Config
- defaultClock :: Clock
- cType :: Type -> String
- type RuleCoverage = [(Name, Int, Int)]

# Documentation

data Config

C code configuration parameters.

Constructors

Config |

Fields

cFuncName :: String

  Alternative primary function name. Leave empty to use compile name.

cStateName :: String

  Name of state variable structure. Default: state

cCode :: [Name] -> [Name] -> [(Name, Type)] -> (String, String)

  Custom C code to insert above and below, given assertion names, coverage names, and probe names and types.

cRuleCoverage :: Bool

  Enable rule coverage tracking.

cAssert :: Bool

  Enable assertions and functional coverage.

cAssertName :: String

  Name of assertion function. Type: void assert(int, bool, uint64_t);

cCoverName :: String

  Name of coverage function. Type: void cover(int, bool, uint64_t);

hardwareClock :: Maybe Clock

  Do we use a hardware counter to schedule rules?

data Clock

Data associated with sampling a hardware clock. For the clock to work correctly, you MUST assign `__global_clock` the current time (accoring to `clockName`) the first time you enter the main Atom-generated function calling your rules.

Constructors

Clock |

Fields

clockName :: String

  C function to sample the clock. The funciton is assumed to have the prototype `clockType clockName(void)`.

clockType :: Type

  Clock type. Assumed to be one of Word8, Word16, Word32, or Word64. It is permissible for the clock to rollover.

delta :: Integer

  Number of ticks in a phase. Must be greater than 0.

delay :: String

  C function to delay/sleep. The function is assumed to have the prototype `void delay(clockType i)`, where `i` is the duration of delay/sleep.

err :: Maybe String

  Nothing or a user-defined error-reporting function if the period duration is violated; e.g., the execution time was greater than `delta`. Assumed to have prototype `void err(void)`.

writeC :: Name -> Config -> StateHierarchy -> [Rule] -> Schedule -> [Name] -> [Name] -> [(Name, Type)] -> IO RuleCoverage

defaults :: Config

Default C code configuration parameters (default function name, no pre/post code, ANSI C types).

defaultClock :: Clock

cType :: Type -> String

C99 type naming rules.

type RuleCoverage = [(Name, Int, Int)]