Typically, you develop both Windows and RT source code as shown in this illustration. The remainder of this topic details each step. This topic also describes INtime software's sample applications.
To develop RT applications using INtime software, you must have INtime installed on your system, and a supported version of Microsoft Visual Studio running. Supported versions include:
Note that INtime cannot be integrated with the Community/Express editions of Visual Studio versions. However, the Community edition of Visual Studio 2013 and later is compatible with INtime add-ins.
Before creating the project, decide how to set it up. Typical structures for INtime applications include:
An INtime application typically results in a minimum of one Windows executable (a .DLL or .EXE file) and one RT executable (an .RTA file).
To develop the Windows portion of an INtime application, use Microsoft Visual Studio as you normally would:
The INtime RT Client Browser (INBROW.OCX) is an ActiveX control that you can add to your INtime applications. Add the browser using the Microsoft Visual Studio menu. The Node Browser then displays as an available control on the Controls Toolbar. Add the control to the dialog you desire. For information about including ActiveX controls in projects, see the Microsoft Visual Studio documentation.
Once in your project, the control offers these functions:
Function | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GetCurrentName | Obtains the name of the item highlighted in the INtime RT Client Browser. | ||||||||||||
GetCurrentState | Obtains the state of the item highlighted in the INtime RT Client Browser. Valid states include:
| ||||||||||||
GetMask | Indicates which RT nodes display in the INtime RT Client Browser. | ||||||||||||
SetCurrentName | Not supported. | ||||||||||||
SetCurrentState | Not supported. | ||||||||||||
SetMask | Specify a mask that defines which RT nodes to display, as a combination of:
If not explicitly set, the mask is 0x27, which means one of the following:
| ||||||||||||
SetSelected | Identifies which INtime node to select in the Browser window when you specify a pointer to a string that contains a node name. This function returns TRUE if the name is valid and selected; otherwise it returns FALSE. |
To develop the RT portion of an INtime application, use the INtime wizards available in Microsoft Visual Studio. The INtime wizards guide you through the decisions required to develop the RT portion of an INtime application and generate the corresponding code framework which you fine-tune in Microsoft Visual Studio's editor.
You can choose to develop your application using the native INtime API, which is a fully-featured RTOS API, or else you can choose to develop against the IWIN32 API, a WIN32-compatible API with some extensions for real-time programming, which may make application development quicker when porting code from Windows. You can find a porting guide from migrating WIndows code to INtime IWIN32 here.
You can select one of these INtime wizards:
Note: The RT portion of INtime applications support only source code written in C or C++. They do not support applications written using MFC and/or ATL.
To create the RT portion of an INtime application:
-global
option from the main screen.
The INtime Application Add-in wizard can be used only for a project generated by the INtime Application wizard with the C++ and Full-Featured options selected. To start it, select Tools>TenAsys INtime C++ wizard.
To modify an existing process:
The INtime Shared Library wizard generates the framework for a Real-time shared library. The code generated illustrates how to export both function and variable names, and also initializes the project settings to correctly generate an RSL.
The generated files include:
The main file contains an RslMain function which you can modify, if required. A default RslMain function is linked if this function is deleted from the source file.
The INtime Static Library wizard generates a project that builds a static library fit for linking into INtime projects. After running the wizard, the library is empty. Add files as necessary. Successfully building a static library project results in a LIB file that can be linked into other projects.
The difference between a static and a shared library is that code and data from a static library is added to an executable file at link time, whereas code and data from a shared library is added only when the executable file loads. With a shared library, the shared code can be updated without rebuilding the executable file, but use of a shared library involves some minor overhead.
In certain cases, 3rd-party static libraries developed for WIndows may also be linked to INtime applications. These libraries must have no external dependencies on Windows system calls and other libraries, and must not reference DLLs.
An example of such a library would be the Intel Performance Primitives libraries (see this link for details).
The C++ implementation has changed as the capabilities of the Visual Studio compilers has been upgraded. The map of different library versions to Visual Studio/Platform Toolset versions is as follows:
For detailed settings, see the sections below for each Visual Studio / Platform Toolchain.
Use Microsoft Visual Studio to compile and link the application. The RT portion of INtime applications requires certain project settings. If you use INtime wizards to develop the RT portion of your application, the wizards will set up your project properly. Settings vary, depending on whether you configured Microsoft Visual Studio to build a debug or a release version.
To view and verify settings required by INtime software, select Microsoft Visual Studio's Build>Settings menu option.
Note: Only required RT portion settings are listed. You can enter the values you want in fields for which no setting is listed.
Visual Studio settings vary, depending on the version you use. Go to the appropriate section to see the settings for your version.
Note: The settings for each version apply specifically to the Platform Toolchain version in use, rather than the Visual Studio version. For example you can create a project in Visual Studio 2017 but specify the Platform Toolchain version from Visual Studio 2015 (v140). The settings must be made for toolset v140 in this case.
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 2022 (v143) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Character Set | Not Set |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories |
Must include: |
X | Debug Information Format | Program Database | ||
X | X | Preprocessor | Preprocessor definitions |
__C99__ (in the platform defaults) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version |
21076.20052 (do not use XM mode by default) |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INTIME%rt\lib | |
X | X | Input | Additional Dependencies |
vshelper17.lib |
X | cpplib20d.lib (for C++, Debug) | |||
X | cpplib20r.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 2019 (v142) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Character Set | Not Set |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories |
Must include: |
X | Debug Information Format | Program Database | ||
X | X | Preprocessor | Preprocessor definitions |
__C99__ (in the platform defaults) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version |
21076.20052 (do not use XM mode by default) |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INTIME%rt\lib | |
X | X | Input | Additional Dependencies |
rt.lib |
X | rtpp17d.lib cpplib17d.lib (for C++, Debug) | |||
X | rtpp17.lib cpplib17.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 2017 (v141) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Character Set | Not Set |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories |
Must include: |
X | Debug Information Format | Program Database | ||
X | X | Preprocessor | Preprocessor definitions |
__C99__ (in the platform defaults) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version |
21076.20052 (do not use XM mode by default) 21076.20053 (use XM mode by default) |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INTIME%rt\lib | |
X | X | Input | Additional Dependencies |
rt.lib |
X | rtpp17d.lib cpplib17d.lib (for C++, Debug) | |||
X | rtpp17.lib cpplib17.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 2015 (v140) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Use of ATL | Not using ATL |
X | X | Character Set | Not Set |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories |
Must include: %INTIME%rt\include\cpp11 (if using C++) |
X | Debug Information Format | Program Database | ||
X | X | Preprocessor | Preprocessor definitions |
__C99__ (if in the platform defaults) __INTIME_CPP11 (if using C++11) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version |
21076.20052 (do not use XM mode by default) 21076.20053 (use XM mode by default) |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INtime%rt\lib | |
X | X | Input | Additional Dependencies |
rt.lib |
X | rtpp11d.lib cpplib11.lib (for C++, Debug) | |||
X | rtpp11.lib cpplib11.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 2013 (v120) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Use of ATL | Not using ATL |
X | X | Character Set | Not Set |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories |
Must include: |
X | Debug Information Format | Program Database (recommended for Debug configuration only) | ||
X | X | Preprocessor | Preprocessor definitions | __C99__ (is in the platform defaults) __INTIME__ (is in the platform defaults) __INTIME_CPP07 (if you choose C++) __CPP_LIB_DLL_V1 (if you choose C++) _HAS_NAMESPACE (if you choose C++) UNICODE and _UNICODE (if using wide-character strings) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version |
21076.20052 (do not use XM mode by default) 21076.20053 (use XM mode by default) |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INtime%rt\lib | |
X | X | Input | Additional Dependencies |
rt.lib |
X | rtpp07d.lib cpplib07.lib (for C++, Debug) | |||
X | rtpp07.lib cpplib07.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Target Extension | rta or rsl |
X | X | Platform Toolset | Visual Studio 11 (v110) |
X | X | Use of MFC | Use Standard Windows Libraries |
X | X | Use of ATL | Not using ATL |
X | X | Character Set | Not Set (Unicode not supported) |
X | X | Common Language Runtime support | No Common Language Runtime support |
X | X | WIndows Store App Support | No |
Debug | Release | Field | Value |
---|---|---|---|
X | X | Debugger to launch | INtimeDebugger |
X | X | Command Arguments | command line arguments to be passed to the RTA only used when starting the RTA through Visual Studio |
X | X | RSL debug process | path of an RTA to load when debugging an RSL project only used when starting the RTA through Visual Studio |
X | X | Attach to process | No: create the RSL debug process; Yes: attach to the already running RSL debug process only used when starting the RTA through Visual Studio |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Additional Include Directories | Must include %INTIME%rt\include\cpp07 and %INtime%rt\include (in that order) |
X | Debug Information Format | Program Database (recommended for Debug configuration only) | ||
X | X | Preprocessor | Preprocessor definitions | __C99__ (is in the platform defaults) __INTIME__ (is in the platform defaults) __INTIME_CPP07 (if you choose C++) __CPP_LIB_DLL_V1 (if you choose C++) _HAS_NAMESPACE (if you choose C++) UNICODE and _UNICODE (if using wide-character strings) |
X | X | Ignore Standard Include Files | Yes | |
X | X | Code Generation | Security Check | Yes for Debug configuration, No for Release configuration |
X | X | Advanced | Compile as | Compile as C++ Code (/TP) (if you choose C++) |
Debug | Release | Category | Field | Value |
---|---|---|---|---|
X | X | General | Version | 21076.20052 |
X | X | Enable Incremental Linking | No | |
X | X | Additional Library Directories | Must include %INtime%rt\lib | |
X | X | Input | Additional Dependencies | rt.lib pcibus.lib netlib.lib clib.lib vshelper.lib |
X | rtpp07d.lib cpplib07.lib (for C++, Debug) | |||
X | rtpp07.lib cpplib07.lib (for C++, Release) | |||
X | X | Ignore All Default Libraries | Yes | |
X | X | System | Subsystem: | Console |
X | X | Heap Reserve Size | 0 (zero) which sets this value to the maximum pool size (in bytes) | |
X | X | Heap Commit Size | 0 (zero) which sets this value to the minimum pool size (in bytes) | |
X | X | Stack Reserve Size | Virtual segment (size in bytes) | |
X | X | Stack Commit Size | Stack size for the main thread (in bytes) |
In the list of object/library modules, the following choices depend on other settings:
Debug | Release | Field | Value |
---|---|---|---|
X | X | INtime Node | The INtime node where to debug this application |
X | X | Pool minimum | minimum pool size in bytes; zero means the loader calculates minimum required |
X | X | Pool maximum | maximum pool size in bytes; zero means no limit |
X | X | Virtual segment size | virtual segment size in bytes (maximum process address range in XM mode) |
X | X | Initial thread stack size | Stack size for the main thread in bytes |
X | X | Object directory size | number of entries in the object directory; only used when starting the RTA through Visual Studio |
X | X | Allow execution in data segment | yes: executing code in a data segment is OK; no: trying to execute code in a data segment causes a fault only used when starting the RTA through Visual Studio |
X | X | Use XM mode | (Applies to applications only) Create this RTA so it creates an XM process by default. |