PSoC 4 Peripheral Driver Library - Alpha
SysLib (System Library)

General Description

The system libraries provide APIs that can be called in the user application to handle the timing, logical checking or register.

The functions and other declarations used in this driver are in cy_syslib.h. You can include cy_pdl.h (ModusToolbox only) to get access to all functions and declarations in the PDL.

The SysLib driver contains a set of different system functions. These functions can be called in the application routine. Major features of the system library:

Configuration Considerations

Assertion Usage
Use the CY_ASSERT() macro to check expressions that must be true as long as the program is running correctly. It is a convenient way to insert sanity checks. The CY_ASSERT() macro is defined in the cy_syslib.h file which is part of the PDL library. The behavior of the macro is as follows: if the expression passed to the macro is false, output an error message that includes the file name and line number, and then halts the CPU.
In case of fault, the CY_ASSERT() macro calls the Cy_SysLib_AssertFailed() function. This is a weakly linked function. The default implementation stores the file name and line number of the ASSERT into global variables, cy_assertFileName and cy_assertLine . It then calls the Cy_SysLib_Halt() function.

Firmware can redefine the Cy_SysLib_AssertFailed() function for custom processing.

The PDL source code uses this assert mechanism extensively. It is recommended that you enable asserts when debugging firmware.
Assertion Classes and Levels
The PDL defines three assert classes, which correspond to different kinds of parameters. There is a corresponding assert "level" for each class.

Class MacroLevel MacroType of check
CY_ASSERT_CLASS_1 CY_ASSERT_L1 A parameter that could change between different PSoC devices (e.g. the number of clock paths)
CY_ASSERT_CLASS_2 CY_ASSERT_L2 A parameter that has fixed limits such as a counter period
CY_ASSERT_CLASS_3 CY_ASSERT_L3 A parameter that is an enum constant

Firmware defines which ASSERT class is enabled by defining CY_ASSERT_LEVEL. This is a compiler command line argument, similar to how the DEBUG / NDEBUG macro is passed.
Enabling any class also enables any lower-numbered class. CY_ASSERT_CLASS_3 is the default level, and it enables asserts for all three classes. The following example shows the command-line option to enable all the assert levels:

The use of special characters, such as spaces, parenthesis, etc. must be protected with quotes.

After CY_ASSERT_LEVEL is defined, firmware can use one of the three level macros to make an assertion. For example, if the parameter can vary between devices, firmware uses the L1 macro.


If the parameter has bounds, firmware uses L2.


If the parameter is an enum, firmware uses L3.


Each check uses the appropriate level macro for the kind of parameter being checked. If a particular assert class/level is not enabled, then the assert does nothing.

More Information

Refer to the technical reference manual (TRM).

MISRA-C Compliance

The SysLib driver has the following specific deviations:

MISRA Rule Rule/Directive Class (Required/Advisory) Rule/Directive Description Description of Deviation(s)
Directive 4.3 R Assembly language shall be encapsulated and isolated. Not critical. Deviation will be fixed in final release.
Directive 4.5 A Identifiers in the same name space with overlapping visibility should be typographically unambiguous. List of macro is provided for backward compatibility. It will be removed, when 3rd part software is updated.
8.9 A An object should be defined at block scope if its identifier only appears in a single function. PDL is a library. The cy_faultFrame is provided as part user API.


VersionChangesReason for Change
1.0 Initial version

API Reference

 Data Structures
 Enumerated Types