|
tin
1.5.9
|
thal is the platform and HAL boundary. It names target profiles, compiler assumptions, scheduler constraints, and adapter shapes that bind the same runtime model to host, bare-metal, RTOS, and realtime OS deployments.
Use thal for:
tin runtime work.tin/platform.h for tin::platform.thal.h for the thal shorthand namespace alias.tin::platform::host_linux_profile, tin::platform::bare_metal_arm_profile, tin::platform::freertos_arm_profile, tin::platform::zephyr_arm_profile, tin::platform::qnx7_profile, and tin::platform::safety_profile for deployment profiles.tin::platform::compiler_satisfies_profile<Profile>() and tin::platform::enforce_compiler_profile<Profile>() for compiler-policy checks.See embedded_framework.md for target integration guidance.
Embedded targets can name a stricter profile and enforce it in a target-specific translation unit:
These checks keep build flags aligned with the deployment profile. Heap policy is also enforced through resource contracts and no-allocation checks because C++ does not expose a portable compiler macro for heap use.
Target-specific code should convert platform facts into runtime inputs before they reach behavior definitions:
The platform adapter owns interrupt, timer, and OS details. The runtime and HSM receive explicit typed events and integer tick metadata.
thal does not need to invent a separate device vocabulary. It can implement the portable contracts named by tio, then connect target events to tin runtime work.
Use tio when you are describing what a driver-shaped object can do. Use thal when you are deciding how that object is backed on a deployment target.
Here the ADC object satisfies a tio concept. The target profile, wake path, ISR-safe send path, and compiler policy are thal concerns. A bare-metal build would name tin::platform::bare_metal_arm_profile in its target-specific translation unit.