Skip to Main Content Skip to Search
Product Documentation

Setting Up a Target

Target/Compiler Overview

Many applications are designed to run on specific target CPUs and operating systems. The type of CPU determines many data characteristics, such as data sizes and addressing. These factors can affect whether errors (such as overflows) will occur.

Since some run-time errors are dependent on the target CPU and operating system, you must specify the type of CPU and operating system used in the target environment before running a verification.

For detailed information on each Target/Compilation option, see Target/Compilation Options in the Polyspace Products for C/C++ Reference.

Specifying Target Environment

The Compiler Settings tab in the Configuration pane of the Project Manager perspective allows you to specify the target operating system and processor type for your application.

To specify the target environment for your application:

  1. From the Target operating system drop-down list, select the operating system on which your application is designed to run.

  2. From the Target processor type drop-down list, select the processor on which your application is designed to run.

For detailed specifications for each predefined target processor, see Predefined Target Processor Specifications.

Specifying Target/Compilation Parameters

You can also set Target/Compilation options through the Configuration > All Settings tab in the Project Manager perspective.

To specify target parameters for your configuration:

  1. In the Configuration pane, select the All Settings tab. Under Analysis options, you see different categories of options, for example, General, Target/Compilation, and Compliance with standards

  2. Expand Target/Compilation.

  3. The Target/Compilation options appear.

  4. Select the Target processor type for your application.

  5. Specify the Operating system target for your application.

For detailed specifications for each predefined target processor, see Predefined Target Processor Specifications.

For information on each Target/Compilation option, see Target/Compilation Options in the Polyspace Products for C/C++ Reference.

Predefined Target Processor Specifications

Polyspace software supports many commonly used processors, as listed in the table below. To specify one of the predefined processors, select it from the Target processor type drop-down list.

Predefined Target Processor Specifications

Targetcharshortintlonglong longfloatdoublelong doubleptrsign of charendianalign
i38681632326432649632signedLittle32
sparc816323264326412832signedBig64
m68k / ColdFire[a] 81632326432649632signedBig64
powerpc816323264326412832unsignedBig64
c-16781616323232646416signedLittle64
tms320c3x3232323264323240[b] 32signedLittle32
sharc21x6132323232643232
[64]
32
[64]
32signedLittle32
NEC-V85081632323232326432signedLittle32 [16, 8]
hc08[c] 81616 [32]32323232
[64]
32
[64]
16[d] unsignedBig32 [16]
hc12581616 [32]32323232
[64]
32
[64]
326signedBig32 [16]
mpc5xx58163232643232
[64]
32
[64]
32signedBig32 [16]
c188161632 [24][e] 3232323216 [24]signedLittle8
x86_648163264 [32][f] 6432649664signedLittle64 [32]
mcpu
(Advanced)
8
[16]
8
[16]
16
[32]
3232
[64]
3232
[64]
32
[64]
16
[32]
signedLittle32
[16, 8]

[a] The M68k family (68000, 68020, etc.) includes the "ColdFire" processor

[b] All operations on long double values will be imprecise (that is, shown as orange).

[c] Non ANSI C specified keywords and compiler implementation-dependent pragmas and interrupt facilities are not taken into account by this support

[d] All kinds of pointers (near or far pointer) have 2 bytes (hc08) or 4 bytes (hc12) of width physically.

[e] The c18 target supports the type short long as 24-bits.

[f] Use option -long-is-32bits to support Microsoft C/C++ Win64 target

After selecting a predefined target, you can modify some default attributes by selecting the browse button to the right of the Target processor type drop-down menu. The optional settings for each target are shown in [brackets] in the table.

If your processor is not listed, you can specify a similar processor that shares the same characteristics, or create a generic target processor.

Modifying Predefined Target Processor Attributes

You can modify certain attributes of the predefined target processors. If your specific processor is not listed, you may be able to specify a similar processor and modify its characteristics to match your processor.

To modify target processor attributes:

  1. In the Project Manager perspective, select the Configuration > All Settings tab.

  2. Expand the Target/Compilation node.

  3. Select the Target processor type you want to use.

  4. Select the browse button to the right of the Target processor type drop-down menu.

    The Advanced target options dialog box opens.

  5. Modify the attributes as needed.

    For information on each target option, see Generic Target Options in the Polyspace Products for C/C++ Reference.

  6. Click OK to save your changes.

Defining Generic Target Processors

If your application is designed for a custom target processor, you can configure many basic characteristics of the target by selecting the selecting the mcpu... (Advanced) target, and specifying the characteristics of your processor.

To configure a generic target:

  1. In the Project Manager perspective, select the Configuration > All Settings tab.

  2. Under Analysis options, expand the Target/Compilation node.

  3. From the Target processor type drop-down list, select mcpu... (Advanced).

    The Generic target options dialog box opens.

  4. In the Enter the target name field, enter a name for your target.

  5. Specify the appropriate parameters for your target, such as the size of basic types, and alignment with arrays and structures.

    For example, when the alignment of basic types within an array or structure is always 8, it implies that the storage assigned to arrays and structures is strictly determined by the size of the individual data objects (without fields and end padding).

  6. Click Save to save the generic target options and close the dialog box.

Common Generic Targets

The following tables describe the characteristics of common generic targets.

ST7 (Hiware C compiler : HiCross for ST7)

ST7charshortintlonglong longfloatdoublelong doubleptrchar isendian
size81616323232323216/32unsignedBig
alignment816/816/832/16/832/16/832/16/832/16/832/16/832/16/8N/AN/A

ST9 (GNU C compiler : gcc9 for ST9)

ST9charshortintlonglong longfloatdoublelong doubleptrchar isendian
size81616323232646416/64unsignedBig
alignment888888888N/AN/A

Hitachi H8/300, H8/300L

Hitachi H8/300, H8/300L

charshortintlonglong longfloatdoublelong doubleptrchar isendian
size81616/323264326546416unsignedBig
alignment81616161616161616N/AN/A

Hitachi H8/300H, H8S, H8C, H8/Tiny

Hitachi H8/300H, H8S, H8C, H8/Tiny

charshortintlonglong longfloatdoublelong doubleptrchar isendian
size81616/ 32326432646432unsignedBig
alignment81632/ 1632/1632/1632/1632/1632/1632/16N/AN/A

Viewing Existing Generic Targets

Generic targets that you create are listed in the Polyspace Preferences dialog box.

To view existing generic targets:

  1. Select Options > Preferences.

    The Preferences dialog box appears.

  2. Select the Generic targets tab.

    Previously defined generic targets appear in the generic targets list.

  3. Click Cancel to close the dialog box.

Deleting a Generic Target

Generic targets that you create are stored as a Polyspace software preference. Generic targets remain in your preferences until you delete them.

To delete a generic target:

  1. Select Options > Preferences.

    The Polyspace Preferences dialog box opens.

  2. Select the Generic targets tab.

  3. Select the target you want to remove.

  4. Click Remove.

  5. Click OK to apply the change and close the dialog box.

Compiling Operating System Dependent Code (OS-target issues)

This section describes the options required to compile and verify code designed to run on specific operating systems. It contains the following:

Predefined Compilation Flags for C Code

These flags concern the predefined OS-target options: no-predefined-OS, linux, vxworks, Solaris and visual (-OS-target option).

OS-targetCompilation flags—include file and content
no-predefined-OS-D__STDC__ 
visual-D__STDC__-include <product_dir>/cinclude/pst-visual.h
vxworks-D__STDC__
-DANSI_PROTOTYPES
-DSTATIC=
-DCONST=const
-D__GNUC__=2
-Dunix
-D__unix
-D__unix__
-Dsparc
-D__sparc
-D__sparc__
-Dsun
-D__sun
-D__sun__
-D__svr4__
-D__SVR4
-include <product_dir>/cinclude/pst-vxworks.h
linux-D__STDC__
-D__GNUC__=2
-D__GNUC_MINOR__=6
-D__GNUC__=2
-D__GNUC_MINOR__=6
-D__ELF__
-Dunix
-D__unix
-D__unix__
-Dlinux
-D__linux
-D__linux__
-Di386
-D__i386
-D__i386__
-Di686
-D__i686
-D__i686__
-Dpentiumpro
-D__pentiumpro
-D__pentiumpro__
<product_dir>/cinclude/pst-linux.h
Solaris-D__STDC__
-D__GNUC__=2
-D__GNUC_MINOR__=8
-D__GNUC__=2
-D__GNUC_MINOR__=8
-D__GCC_NEW_VARARGS__
-Dunix
-D__unix
-D__unix__
-Dsparc
-D__sparc
-D__sparc__
-Dsun
-D__sun
-D__sun__
-D__svr4__
-D__SVR4
No -include file mentioned

Predefined Compilation Flags for C++ Code

The following table shown for each —OS-target, the list of compilation flags defined by default, including pre-include header file (see also –include):

-OS-targetCompilation flags-include fileMinimum set of options
Linux-D__SIZE_TYPE__=unsigned
-D__PTRDIFF_TYPE__=int
-D__inline__=inline
-D__signed__=signed
-D__gnuc_va_list=va_list
-D__STL_CLASS_PARTIAL_ SPECIALIZATION
-D__GNU_SOURCE
-D__STDC__ -D__ELF__
-Dunix -D__unix
-D__unix__ -Dlinux
-D__linux -D__linux__
-Di386 -D__i386
-D__i386__ -Di686
-D__i686 -D__i686__
-Dpentiumpro
-D__pentiumpro
-D__pentiumpro__
<product_dir>/
cinclude/
pst-linux.h
polyspace-[desktop-]cpp -OS-target Linux \

-I <polyspace_install>/include/ include-linux \

-I <product_dir>/include/ include-linux/next

Where the Polyspace product has been installed in the folder <polyspace_install>

vxWorks-D__SIZE_TYPE__=unsigned
-D__PTRDIFF_TYPE__=int
-D__inline__=inline
-D__signed__=signed
-D__gnuc_va_list=va_list
-D__STL_CLASS_PARTIAL_ SPECIALIZATION
-DANSI_PROTOTYPES
-DSTATIC=
-DCONST=const
-D__STDC
-D__GNU_SOURCE
-Dunix
-D__unix
-D__unux__
-Dsparc
-D__sparc
-D__sparc__
-Dsun
-D__sun
-D__sun__
-D__svr4
-D__SVR4
<product_dir>/ cinclude/
pstvxworks. h
polyspace-[desktop-]cpp \ -OS-target vxworks \ -I /your_path_to/ Vxworks_include_folders
visual /visual6-D__SIZE_TYPE__=unsigned
-D__PTRDIFF_TYPE__=int
-D__STRICT_ANSI__
-D__inline__=inline
-D__signed__=signed
-D__gnuc_va_list=va_list
-D_POSIX_SOURCE
-D__STL_CLASS_PARTIAL_ SPECIALIZATION
<product_dir>/ cinclude/
pstvisual. h
Solaris-D__SIZE_TYPE__=unsigned
-D__PTRDIFF_TYPE__=int
-D__inline__=inline
-D__signed__=signed
-D__gnuc_va_list=va_list
-D__STL_CLASS_PARTIAL_ SPECIALIZATION
-D__GNU_SOURCE
-D__STDC
-D__GCC_NEW_VARARGS__
-Dunix
-D__unix
-D__unux__
-Dsparc
-D__sparc
-D__sparc__
-Dsun
-D__sun
-D__sun__
-D__svr4
-D__SVR4

If Polyspace runs on a Linux machine:

polyspace-[desktop-]cpp \
-OS-target Solaris \
-I /your_path_to_solaris_include

If Polyspace runs on a Solaris machine:

polyspace-cpp \
-OS-target Solaris \
-I /usr/include

no-
predefined-
OS
-D__SIZE_TYPE__=unsigned
-D__PTRDIFF_TYPE__=int
-D__STRICT_ANSI__
-D__inline__=inline
-D__signed__=signed
-D__gnuc_va_list=va_list
-D_POSIX_SOURCE
-D__STL_CLASS_PARTIAL_ SPECIALIZATION
polyspace-[desktop-]cpp \
-OS-target no-predefined-OS \
-I /your_path_to/ MyTarget_include_folders

My Target Application Runs on Linux

The minimum set of options is as follows:

polyspace-c \
	-OS-target Linux \
	-I Polyspace_Install/Verifier/include/include-linux \
	-I Polyspace_Install/Verifier/include/include-linux/next \
	...

where the Polyspace product has been installed in the folder Polyspace_Install.

If your target application runs on Linux but you are launching your verification from Windows, the minimum set of options is as follows:

polyspace-c \
	-OS-target Linux \
	-I Polyspace_Install\Verifier\include\include-linux \
	-I Polyspace_Install\Verifier\include\include-linux\next \
	...

where the Polyspace product has been installed in the folder Polyspace_Install.

My Target Application Runs on Solaris

If Polyspace software runs on a Linux machine:

polyspace-c \
	-OS-target Solaris \
	-I /your_path_to_solaris_include

If Polyspace software runs on a Solaris™ machine:

polyspace-c \
	-OS-target Solaris \
	-I /usr/include

My Target Application Runs on Vxworks

If Polyspace software runs on either a Solaris or a Linux machine:

polyspace-c \
	-OS-target vxworks \
	-I /your_path_to/Vxworks_include_folders

My Target Application Does Not Run on Linux, vxworks nor Solaris

If Polyspace software does not run on either a Solaris or a Linux machine:

polyspace-c \
	-OS-target no-predefined-OS \
	-I /your_path_to/MyTarget_include_folders

Address Alignment

Polyspace software handles address alignment by calculating sizeof and alignments. This approach takes into account 3 constraints implied by the ANSI standard which guarantee that: 

Consider the example:

struct foo {char a; int b;} 

Ignoring or Replacing Keywords Before Compilation

You can ignore noncompliant keywords such as "far" or 0x followed by an absolute address. The template provided in this section allows you to ignore these keywords.

To ignore keywords:

  1. Save the following template in c:\Polyspace\myTpl.pl.

  2. In the Target/Compilation options, select Command/script to apply to preprocessed files.

  3. Select myTpl.pl using the browse button.

For more information, see -post-preprocessing-command.

Content of the myTpl.pl file

#!/usr/bin/perl

##############################################################
# Post Processing template script
#
##############################################################
# Usage from Project Manager GUI:
#
# 1) Linux: /usr/bin/perl PostProcessingTemplate.pl
# 2) Solaris: /usr/local/bin/perl PostProcessingTemplate.pl
# 3) Windows: \Verifier\tools\perl\win32\bin\perl.exe <pathtoscript>\
PostProcessingTemplate.pl
#
##############################################################

$version = 0.1;

$INFILE = STDIN;
$OUTFILE = STDOUT;

while (<$INFILE>)
{

	# Remove far keyword
	s/far//;

	# Remove "@ 0xFE1" address constructs
	s/\@\s0x[A-F0-9]*//g;

	# Remove "@0xFE1" address constructs
	# s/\@0x[A-F0-9]*//g;

	# Remove "@ ((unsigned)&LATD*8)+2" type constructs
	s/\@\s\(\(unsigned\)\&[A-Z0-9]+\*8\)\+\d//g;

	# Convert current line to lower case
# $_ =~ tr/A-Z/a-z/;

	# Print the current processed line
	print $OUTFILE $_;
}

Perl Regular Expression Summary

#########################################################
# Metacharacter What it matches
#########################################################
# Single Characters
# . Any character except newline
# [a-z0-9] Any single character in the set
# [^a-z0-9] Any character not in set
# \d A digit same as
# \D A non digit same as [^0-9]
# \w An Alphanumeric (word) character
# \W Non Alphanumeric (non-word) character
#
# Whitespace Characters
# \s Whitespace character
# \S Non-whitespace character
# \n newline
# \r return
# \t tab
# \f formfeed
# \b backspace
#
# Anchored Characters
# \B word boundary when no inside []
# \B non-word boundary
# ^ Matches to beginning of line
# $ Matches to end of line
#
# Repeated Characters
# x? 0 or 1 occurence of x
# x* 0 or more x's
# x+ 1 or more x's
# x{m,n} Matches at least m x's and no more than n x's
# abc All of abc respectively
# to|be|great One of "to", "be" or "great"
#
# Remembered Characters
# (string) Used for back referencing see below
# \1 or $1 First set of parentheses
# \2 or $2 First second of parentheses
# \3 or $3 First third of parentheses
##########################################################
# Back referencing
#
# e.g. swap first two words around on a line
# red cat -> cat red
# s/(\w+) (\w+)/$2 $1/;
#
##########################################################

Verifying Code That Uses Keil or IAR Dialects

Typical embedded control applications frequently read and write port data, set timer registers and read input captures. To deal with this without using assembly language, some microprocessor compilers have specified special data types like sfrand sbit. Typical declarations are:

sfr A0 = 0x80; 
sfr A1 = 0x81; 
sfr ADCUP = 0xDE; 
sbit EI = 0x80; 

These declarations reside in header files such as regxx.h for the basic 80Cxxx micro processor. The definition of sfr in these header files customizes the compiler to the target processor.

When accessing a register or a port, using sfr data is then simple, but is not part of standard ANSI C:

int status,P0; 

void main (void) { 
  ADCUP = 0x08; /* Write data to register */ 
  A1 = 0xFF; /* Write data to Port */ 
  status = P0; /* Read data from Port */ 
  EI = 1; /* Set a bit (enable all interrupts) */ 
} 

You can verify this type of code using the Dialect support option (-dialect). This option allows the software to support the Keil or IAR C language extensions even if some structures, keywords, and syntax are not ANSI standard. The following tables summarize what is supported when verifying code that is associated with the Keil or IAR dialects.

The following table summarizes the supported Keil C language extensions:

Example: -dialect keil -sfr-types sfr=8

Type/LanguageDescriptionExampleRestrictions
Type bit
  • An expression to type bit gives values in range [0,1].

  • Converting an expression in the type, gives 1 if it is not equal to 0, else 0. This behavior is similar to c++ bool type.

bit x = 0, y = 1,
 z = 2;
assert(x == 0);
assert(y == 1);
assert(z == 1);
assert(sizeof(bit)
 == sizeof(int));
pointers to bits and arrays of bits are not allowed
Type sfr
  • The -sfr-types option defines unsigned types name and size in bits.

  • The behavior of a variable follows a variable of type integral.

  • A variable which overlaps another one (in term of address) will be considered as volatile.

sfr x = 0xf0; // 
declaration of
variable x at 
address 0xF0
sfr16 y = 0x4EEF;
 

For this example, options need to be:

-dialect keil 
-sfr-types sfr=8,		\
				sfr16=16
sfr and sbit types are only allowed in declarations of external global variables.
Type sbit
  • Each read/write access of a variable is replaced by an access of the corresponding sfr variable access.

  • Only external global variables can be mapped with a sbit variable.

  • Allowed expressions are integer variables, cells of array of int and struct/union integral fields.

  • a variable can also be declared as extern bit in an another file.

sfr x = 0xF0;
sbit x1 = x ^ 1; // 1st bit of x
sbit x2 = 0xF0 ^ 2; // 2nd bit of x
sbit x3 = 0xF3; // 3rd bit of x
sbit y0 = t[3] ^ 1;


/* file1.c */
sbit x = P0 ^ 1;
/* file2.c */
extern bit x;
x = 1; // set the 1st bit of P0 to 1
Absolute variable locationAllowed constants are integers, strings and identifiers.
int var _at_ 0xF0
int x @ 0xFE ;
static const 
int y @ 0xA0 = 3;
Absolute variable locations are ignored (even if declared with a #pragma location).
Interrupt functionsA warnings in the log file is displayed when an interrupt function has been found: "interrupt handler detected : <name>" or "task entry point detected : <name>"
void foo1 (void) 
interrupt XX = YY
using 99 {…}
void foo2 (void) _
task_ 99 _priority_
2 {…}
Entry points and interrupts are not taken into account as -entry-points.
Keywords ignoredalien, bdata, far, idata, ebdata, huge, sdata, small, compact, large, reentrant. Defining -D __C51__, keywords large code, data, xdata, pdata and xhuge are ignored.

The following table summarize the IAR dialect:

Example: -dialect iar -sfr-types sfr=8

Type/LanguageDescriptionExampleRestrictions
Type bit
  • An expression to type bit gives values in range [0,1].

  • Converting an expression in the type, gives 1 if it is not equal to 0, else 0. This behavior is similar to c++ bool type.

  • If initialized with values 0 or 1, a variable of type bit is a simple variable (like a c++ bool).

  • A variable of type bit is a register bit variable (mapped with a bit or a sfr type)

union { 
  int v; 
  struct { 
    int z; 
  } y; 
} s; 

void f(void) { 
  bit y1 = s.y.z . 2; 
  bit x4 = x.4; 
  bit x5 = 0xF0 . 5; 
  y1 = 1; 
	// 2nd bit of s.y.z
	// is set to 1 
}; 
pointers to bits and arrays of bits are not allowed
Type sfr
  • The -sfr-types option defines unsigned types name and size.

  • The behavior of a variable follows a variable of type integral.

  • A variable which overlaps another one (in term of address) will be considered as volatile.

sfr x = 0xf0; // 
declaration of
variable x at 
address 0xF0
sfr and sbit types are only allowed in declarations of external global variables.
Individual bit access
  • Individual bit can be accessed without using sbit/bit variables.

  • Type is allowed for integer variables, cells of integer array, and struct/union integral fields.

int x[3], y;
x[2].2 = x[0].3 + y.1;
Absolute variable locationAllowed constants are integers, strings and identifiers.
int var @ 0xF0; 
int xx @ 0xFE ; 
static const int y   \
	@0xA0 = 3; 
Absolute variable locations are ignored (even if declared with a #pragma location).
Interrupt functions
  • A warning is displayed in the log file when an interrupt function has been found: "interrupt handler detected : funcname"

  • A monitor function is a function that disables interrupts while it is executing, and then restores the previous interrupt state at function exit.

interrupt [1] 		 \
 using [99] void 	 \ 
 foo1(void) { ... }; 

monitor [3] void 	 \
 foo2(void) { ... }; 
Entry points and interrupts are not taken into account as -entry-points.
Keywords ignoredsaddr, reentrant, reentrant_idata, non_banked, plm, bdata, idata, pdata, code, data, xdata, xhuge, interrupt, __interrupt and __intrinsic
Unnamed struct/union
  • Fields of unions/structs with no tag and no name can be accessed without naming their parent struct.

  • Option -allow-unnamed-fields need to be used to allow anonymous struct fields.

  • On a conflict between a field of an anonymous struct with other identifiers:

    • with a variable name, field name is hidden

    • with a field of another anonymous struct at different scope, closer scope is chosen

    • with a field of another anonymous struct at same scope: an error "anonymous struct field name <name> conflict" is displayed in the log file.

union { int x; };
union { int y; struct { int
z; }; } @ 0xF0;
no_init attribute
  • a global variable declared with this attribute is handled like an external variable.

  • It is handled like a type qualifier.

no_init int x;
no_init union 
{ int y; } @ 0xFE;
#pragma no_init has no effect

The option –sfr-types defines the size of a sfr type for the Keil or IAR dialect.

The syntax for an sfr element in the list is type-name=typesize.

For example:

–sfr-types sfr=8,sfr16=16

defines two sfr types: sfr with a size of 8 bits, and sfr16 with a size of 16-bits. A value type-name must be given only once. 8, 16 and 32 are the only supported values for type-size.

How to Gather Compilation Options Efficiently

The code is often tuned for the target (as discussed to Verifying Code That Uses Keil or IAR Dialects). Rather than applying minor changes to the code, create a single polyspace.h  file which will contain all target specific functions and options. The -include option can then be used to force the inclusion of the polyspace.h file in all source files under verification.

Where there are missing prototypes or conflicts in variable definition, writing the expected definition or prototype within such a header file will yield several advantages.

Direct benefits:

Indirect benefits:

Example

This is an example of a file that can be used with the -include option.

// The file may include (say) a standard include file implicitly 
// included by the cross compiler 

#include <stdlib.h> 
#include "another_file.h" 

// Generic definitions, reusable from one project to another 
#define far 
#define at(x) 

// A prototype may be positioned here to aid in the solution of 
// a link phase conflict between 
// declaration and definition. This will allow detection of the 
// same error at compilation time instead of at link time. 
// Leads to: 
// - earlier detection 
// - precise localisation of conflict at compilation time 
void f(int); 

// The same also applies to variables. 
extern int x; 

// Standard library stubs can be avoided, 
// and OS standard prototypes redefined. 

#define POLYSPACE_NO_STANDARD_STUBS	// use this flag to prevent the
									 				//automatic stubbing of std functions 
#define __polyspace_no_sscanf 
#define __polyspace_no_fgetc 
void sscanf(int, char, char, char, char, char); 
void fgetc(void); 

[a] The M68k family (68000, 68020, etc.) includes the "ColdFire" processor

[b] All operations on long double values will be imprecise (that is, shown as orange).

[c] Non ANSI C specified keywords and compiler implementation-dependent pragmas and interrupt facilities are not taken into account by this support

[d] All kinds of pointers (near or far pointer) have 2 bytes (hc08) or 4 bytes (hc12) of width physically.

[e] The c18 target supports the type short long as 24-bits.

[f] Use option -long-is-32bits to support Microsoft C/C++ Win64 target

[7] except in the cases of "double" and "long" on some targets.

  


 © 1984-2012- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS