MCU HCS08 Compiler
MCU HCS08 Compiler
Chapter 1
Overview
1.1 Accompanying Documentation..................................................................................................................................51
Chapter 2
Using Compiler
Chapter 3
Introduction
3.1 Compiler Environment................................................................................................................................................55
3.7 Highlights....................................................................................................................................................................79
3.8.2.4 HCS08 Compiler > Output > Configuration for list of included files in make format............84
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 3
Section number Title Page
3.9 Integration into Microsoft Visual C++ 2008 Express Edition (Version 9.0 or later).................................................103
3.11.3 Tools...........................................................................................................................................................109
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
4 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 4
Graphical User Interface
4.1 Launching Compiler...................................................................................................................................................111
4.2.3 Toolbar.......................................................................................................................................................116
4.3.3.1 Examples..................................................................................................................................124
4.3.6 Modifiers....................................................................................................................................................127
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 5
Section number Title Page
Chapter 5
Environment
5.1 Current Directory........................................................................................................................................................142
5.5 Paths............................................................................................................................................................................145
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
6 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 6
Files
6.1 Input Files...................................................................................................................................................................161
Chapter 7
Compiler Options
7.1 Option Recommendations...........................................................................................................................................166
7.2.3.1.1 Example..............................................................................................................170
7.2.3.1.5 -ArgFile: Specify a file from which additional command line options will be
read......................................................................................................................177
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 7
Section number Title Page
7.2.3.1.12 -Ccx: Cosmic Compatibility Mode for Space Modifiers and Interrupt
Handlers..............................................................................................................188
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
8 Freescale Semiconductor, Inc.
Section number Title Page
7.2.3.1.42 -LicWait: Wait until Floating License is Available from Floating Li- cense
Server..................................................................................................................229
7.2.3.1.45 -LmCfg: Configuration for List of Included Files in Make Format (option -
Lm)......................................................................................................................233
7.2.3.1.54 -NoClrVol: Do not use CLR for volatile variables in the direct page................244
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 9
Section number Title Page
7.2.3.1.78 -OnPMNC: Disable Code Generation for NULL Pointer to Member Check.....281
7.2.3.1.83 -Pe: Do Not Preprocess Escape Sequences in Strings with Absolute DOS
Paths....................................................................................................................291
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
10 Freescale Semiconductor, Inc.
Section number Title Page
7.2.3.1.98 -WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch
Mode...................................................................................................................314
7.2.3.1.99 -WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode316
Chapter 8
Compiler Predefined Macros
8.1 Compiler Vendor Defines...........................................................................................................................................342
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 11
Section number Title Page
Chapter 9
Compiler Pragmas
9.1 Pragma Details............................................................................................................................................................355
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
12 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 10
ANSI-C Frontend
10.1 Implementation Features.............................................................................................................................................391
10.1.1 Keywords...................................................................................................................................................392
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 13
Section number Title Page
10.1.5.1 Compatibility...........................................................................................................................407
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
14 Freescale Semiconductor, Inc.
Section number Title Page
10.5 Bitfields.......................................................................................................................................................................423
10.6 Segmentation...............................................................................................................................................................425
10.7 Optimizations..............................................................................................................................................................428
10.9.5.1 General.....................................................................................................................................442
10.9.5.2 Macros......................................................................................................................................443
10.9.5.3 Enumerations...........................................................................................................................445
10.9.5.4 Types........................................................................................................................................446
10.9.5.5 Functions..................................................................................................................................447
10.9.5.6 Variables..................................................................................................................................447
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 15
Section number Title Page
10.9.5.7 Comments................................................................................................................................448
10.9.5.8 Guidelines................................................................................................................................449
Chapter 11
Generating Compact Code
11.1 Compiler Options........................................................................................................................................................451
11.4.6 Bitfields......................................................................................................................................................459
11.4.14 Qualifiers....................................................................................................................................................464
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
16 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 12
HC(S)08 Backend
12.1 Memory Models..........................................................................................................................................................465
12.3.3 Bitfields......................................................................................................................................................470
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 17
Section number Title Page
12.4.9 Segmentation..............................................................................................................................................479
12.4.10 Optimizations.............................................................................................................................................480
Chapter 13
High-Level Inline Assembler for the HC(S)08
13.1 Syntax.........................................................................................................................................................................487
13.2 C Macros.....................................................................................................................................................................488
13.4.9 Assertions...................................................................................................................................................494
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
18 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 14
ANSI-C Library Reference
Chapter 15
Library Files
15.1 Directory Structure......................................................................................................................................................503
Chapter 16
Special Features
16.1 Memory Management - malloc(), free(), calloc(), realloc(); alloc.c, and heap.c........................................................507
16.7 ctype............................................................................................................................................................................510
Chapter 17
Library Structure
17.1 Error Handling............................................................................................................................................................513
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 19
Section number Title Page
Chapter 18
Types and Macros in the Standard Library
18.1 errno.h.........................................................................................................................................................................523
18.2 float.h..........................................................................................................................................................................524
18.3 limits.h........................................................................................................................................................................524
18.4 locale.h........................................................................................................................................................................525
18.5 math.h..........................................................................................................................................................................527
18.6 setjmp.h.......................................................................................................................................................................528
18.7 signal.h........................................................................................................................................................................528
18.8 stddef.h........................................................................................................................................................................529
18.9 stdio.h..........................................................................................................................................................................529
18.10 stdlib.h.........................................................................................................................................................................530
18.11 time.h..........................................................................................................................................................................530
18.12 string.h........................................................................................................................................................................531
18.13 assert.h........................................................................................................................................................................531
18.14 stdarg.h........................................................................................................................................................................532
18.15 ctype.h.........................................................................................................................................................................532
Chapter 19
The Standard Functions
19.1 abort()..........................................................................................................................................................................536
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
20 Freescale Semiconductor, Inc.
Section number Title Page
19.2 abs().............................................................................................................................................................................537
19.4 asctime()......................................................................................................................................................................539
19.6 assert().........................................................................................................................................................................540
19.9 atexit().........................................................................................................................................................................542
19.10 atof()............................................................................................................................................................................543
19.11 atoi()............................................................................................................................................................................544
19.12 atol()............................................................................................................................................................................545
19.13 bsearch()......................................................................................................................................................................546
19.14 calloc()........................................................................................................................................................................547
19.16 clearerr()......................................................................................................................................................................549
19.17 clock().........................................................................................................................................................................549
19.20 ctime().........................................................................................................................................................................551
19.21 difftime().....................................................................................................................................................................552
19.22 div().............................................................................................................................................................................552
19.23 exit()............................................................................................................................................................................553
19.26 fclose()........................................................................................................................................................................555
19.27 feof()...........................................................................................................................................................................555
19.28 ferror().........................................................................................................................................................................556
19.29 fflush().........................................................................................................................................................................557
19.30 fgetc()..........................................................................................................................................................................557
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 21
Section number Title Page
19.31 fgetpos()......................................................................................................................................................................558
19.32 fgets()..........................................................................................................................................................................559
19.35 fopen().........................................................................................................................................................................561
19.36 fprintf()........................................................................................................................................................................563
19.37 fputc()..........................................................................................................................................................................563
19.38 fputs()..........................................................................................................................................................................564
19.39 fread()..........................................................................................................................................................................564
19.40 free()............................................................................................................................................................................565
19.41 freopen()......................................................................................................................................................................566
19.43 fscanf()........................................................................................................................................................................567
19.44 fseek().........................................................................................................................................................................568
19.45 fsetpos().......................................................................................................................................................................569
19.46 ftell()...........................................................................................................................................................................569
19.47 fwrite()........................................................................................................................................................................570
19.48 getc()...........................................................................................................................................................................571
19.49 getchar()......................................................................................................................................................................572
19.50 getenv().......................................................................................................................................................................572
19.51 gets()...........................................................................................................................................................................573
19.52 gmtime()......................................................................................................................................................................573
19.53 isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), and isxdigit()574
19.54 labs()...........................................................................................................................................................................575
19.56 ldiv()............................................................................................................................................................................577
19.57 localeconv().................................................................................................................................................................577
19.58 localtime()...................................................................................................................................................................578
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
22 Freescale Semiconductor, Inc.
Section number Title Page
19.61 longjmp().....................................................................................................................................................................580
19.62 malloc().......................................................................................................................................................................580
19.63 mblen()........................................................................................................................................................................581
19.64 mbstowcs()..................................................................................................................................................................582
19.65 mbtowc().....................................................................................................................................................................582
19.66 memchr().....................................................................................................................................................................583
19.67 memcmp()...................................................................................................................................................................584
19.69 memset().....................................................................................................................................................................585
19.70 mktime()......................................................................................................................................................................586
19.72 perror()........................................................................................................................................................................587
19.74 printf().........................................................................................................................................................................589
19.75 putc()...........................................................................................................................................................................589
19.76 putchar()......................................................................................................................................................................590
19.77 puts()...........................................................................................................................................................................591
19.78 qsort()..........................................................................................................................................................................591
19.79 raise()..........................................................................................................................................................................592
19.80 rand()...........................................................................................................................................................................593
19.81 realloc().......................................................................................................................................................................593
19.82 remove()......................................................................................................................................................................594
19.83 rename()......................................................................................................................................................................595
19.84 rewind().......................................................................................................................................................................596
19.85 scanf().........................................................................................................................................................................596
19.86 setbuf()........................................................................................................................................................................597
19.87 setjmp().......................................................................................................................................................................598
19.88 setlocale()....................................................................................................................................................................598
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 23
Section number Title Page
19.89 setvbuf()......................................................................................................................................................................599
19.90 signal()........................................................................................................................................................................600
19.93 sprintf().......................................................................................................................................................................603
19.95 srand().........................................................................................................................................................................607
19.96 sscanf()........................................................................................................................................................................607
19.97 strcat().........................................................................................................................................................................611
19.98 strchr().........................................................................................................................................................................612
19.99 strcmp().......................................................................................................................................................................612
19.100 strcoll()........................................................................................................................................................................613
19.101 strcpy()........................................................................................................................................................................614
19.102 strcspn().......................................................................................................................................................................614
19.103 strerror()......................................................................................................................................................................615
19.104 strftime().....................................................................................................................................................................615
19.105 strlen().........................................................................................................................................................................617
19.106 strncat().......................................................................................................................................................................617
19.107 strncmp().....................................................................................................................................................................618
19.108 strncpy()......................................................................................................................................................................619
19.109 strpbrk().......................................................................................................................................................................619
19.110 strrchr().......................................................................................................................................................................620
19.111 strspn()........................................................................................................................................................................620
19.112 strstr()..........................................................................................................................................................................621
19.113 strtod().........................................................................................................................................................................622
19.114 strtok().........................................................................................................................................................................623
19.115 strtol()..........................................................................................................................................................................623
19.116 strtoul()........................................................................................................................................................................625
19.117 strxfrm()......................................................................................................................................................................626
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
24 Freescale Semiconductor, Inc.
Section number Title Page
19.118 system().......................................................................................................................................................................627
19.121 time()...........................................................................................................................................................................629
19.122 tmpfile()......................................................................................................................................................................629
19.123 tmpnam().....................................................................................................................................................................630
19.124 tolower()......................................................................................................................................................................631
19.125 toupper()......................................................................................................................................................................631
19.126 ungetc().......................................................................................................................................................................632
19.129 wctomb().....................................................................................................................................................................635
19.130 wcstombs()..................................................................................................................................................................636
Chapter 20
Appendices
Chapter 21
Porting Tips and FAQs
21.1 Migration Hints...........................................................................................................................................................639
21.1.1.10 @interrupt................................................................................................................................644
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 25
Section number Title Page
21.1.1.13 Linker *.prm File (for the Cosmic compiler) and Linker *.prm File (for the HC(S)08
Compiler).................................................................................................................................646
21.1.8 _asm("sequence").......................................................................................................................................650
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
26 Freescale Semiconductor, Inc.
Section number Title Page
21.6.1.1 The Compiler Reports an Error, but WinEdit Does not Display it..........................................668
21.6.1.4 The code seems to be correct, but the application does not work............................................670
21.6.1.6 The make Utility does not Make the entire Application..........................................................670
21.6.1.8 The help file cannot be opened by double clicking on it in the File Manager or in the
Explorer....................................................................................................................................671
21.6.1.13 How can I load the same memory configuration every time the simulator or debugger
starts?.......................................................................................................................................672
21.6.1.14 How can I automatically start a loaded program in the simulator or debugger and stop at a
specified breakpoint?...............................................................................................................672
21.6.1.17 How can I use a custom name for the main() function?..........................................................673
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 27
Section number Title Page
21.6.1.18 How can I set the reset vector to the beginning of the startup code?.......................................673
21.6.1.21 What should be done when "error while adding default.env options" appears after starting
the compiler?............................................................................................................................673
21.6.1.22 After starting the ICD Debugger, an "Illegal breakpoint detected" error appears. Why?.......674
21.6.1.23 How can I write initialized data into the ROM area?..............................................................674
21.8.4 Brackets......................................................................................................................................................677
21.8.5 Parentheses.................................................................................................................................................678
21.8.8 Extensions..................................................................................................................................................679
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
28 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 22
Global Configuration File Entries
22.1 [Options] Section........................................................................................................................................................683
22.1.1 DefaultDir..................................................................................................................................................683
22.2.1 SaveOnExit................................................................................................................................................684
22.2.2 SaveAppearance.........................................................................................................................................684
22.2.3 SaveEditor..................................................................................................................................................685
22.2.4 SaveOptions...............................................................................................................................................685
22.2.6 TipFilePos..................................................................................................................................................686
22.2.7 ShowTipOfDay..........................................................................................................................................686
22.2.8 TipTimeStamp...........................................................................................................................................687
22.3.1 Editor_Name..............................................................................................................................................687
22.3.2 Editor_Exe.................................................................................................................................................688
22.3.3 Editor_Opts................................................................................................................................................688
22.4 Example......................................................................................................................................................................689
Chapter 23
Local Configuration File Entries
23.1 [Editor] Section...........................................................................................................................................................691
23.1.1 Editor_Name..............................................................................................................................................691
23.1.2 Editor_Exe.................................................................................................................................................692
23.1.3 Editor_Opts................................................................................................................................................692
23.2.1 RecentCommandLineX..............................................................................................................................693
23.2.2 CurrentCommandLine...............................................................................................................................694
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 29
Section number Title Page
23.2.3 StatusbarEnabled........................................................................................................................................694
23.2.4 ToolbarEnabled..........................................................................................................................................695
23.2.5 WindowPos................................................................................................................................................695
23.2.6 WindowFont...............................................................................................................................................695
23.2.7 Options.......................................................................................................................................................696
23.2.8 EditorType.................................................................................................................................................697
23.2.9 EditorCommandLine..................................................................................................................................697
23.2.10 EditorDDEClientName..............................................................................................................................697
23.2.11 EditorDDETopicName...............................................................................................................................698
23.2.12 EditorDDEServiceName............................................................................................................................698
23.3 Example......................................................................................................................................................................699
Chapter 24
Known C++ Issues in the HC(S)08 Compilers
24.1 Template Issues...........................................................................................................................................................701
24.2 Operators.....................................................................................................................................................................702
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
30 Freescale Semiconductor, Inc.
Section number Title Page
Chapter 25
Banked Memory Support
25.1 Introduction.................................................................................................................................................................735
25.2.6 Example.....................................................................................................................................................741
25.3.3 Example.....................................................................................................................................................743
Chapter 26
Compiler Messages
26.1 Compiler Messages.....................................................................................................................................................747
26.1.6 C53: Message <Id> is not used by this version. The mapping of this message is ignored. ......................749
26.1.8 C56: Option value overridden for option <OptionName>. Old value `<OldValue>', new value
`<NewValue>'............................................................................................................................................750
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 31
Section number Title Page
26.1.10 C65: Environment macro expansion message '' for <variablename> .......................................................751
26.1.25 C1014: Integral type expected or enum value out of range ......................................................................760
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
32 Freescale Semiconductor, Inc.
Section number Title Page
26.1.48 C1037: Illegal initialization for extern variable in block scope ................................................................772
26.1.57 C1046: Cannot create compiler generated <Special member="" function>=""> for nameless class .......777
26.1.58 C1047: Local compiler generated <Special member function> not supported ........................................778
26.1.63 C1052: Unions cannot have class/struct object members containing Con/Destructor/Assign-Operator ..782
26.1.66 C1055: External linkage for class members not possible .........................................................................783
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 33
Section number Title Page
26.1.70 C1059: Parameter type for <FunctionKind> parameter <No> must be <Type> ......................................786
26.1.72 C1061: Conversion operator must not have return type specified before operator keyword ...................786
26.1.74 C1063: Global or static-member operators must have a class as first parameter .....................................787
26.1.76 C1065: 'inline' is the only legal storage class for Constructors ................................................................789
26.1.95 C1086: Global unary operator must have one parameter .........................................................................799
26.1.96 C1087: Static unary operator must have one parameter ...........................................................................799
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
34 Freescale Semiconductor, Inc.
Section number Title Page
26.1.98 C1089: Global binary operator must have two parameters .......................................................................800
26.1.99 C1090: Static binary operator must have two parameters ........................................................................800
26.1.101 C1092: Global unary/binary operator must have one or two parameters .................................................801
26.1.102 C1093: Static unary/binary operator must have one or two parameters ...................................................801
26.1.104 C1095: Postfix ++/-- operator must have integer parameter .....................................................................802
26.1.107 C1098: Modifiers for non-member or static member functions illegal ....................................................803
26.1.113 C1104: Bit field type is neither integral nor enum type ............................................................................806
26.1.116 C1107: Long long bit fields not supported yet .........................................................................................808
26.1.117 C1108: Constructor cannot have own class/struct type as first and only parameter .................................809
26.1.122 C1113: Interrupt specifier used twice for same function ..........................................................................812
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 35
Section number Title Page
26.1.127 C1118: Only bases and class member functions can be virtual ................................................................814
26.1.130 C1121: Definition needed if called with explicit scope resolution ...........................................................817
26.1.134 C1125: Cannot instantiate abstract class as a type of explicit conversion ................................................823
26.1.135 C1126: Abstract class cause inheriting pure virtual without overriding function(s) ................................825
26.1.138 C1129: Parameter list missing in pointer to member function type .........................................................827
26.1.139 C1130: This C++ feature is disabled in your current cC++/EC++ configuration .....................................829
26.1.142 C1133: Such an initialization requires STATIC CONST INTEGRAL member ......................................831
26.1.143 C1134: Static data members are not allowed in local classes ...................................................................833
26.1.144 C1135: Ignore Storage Class Specifier cause it only applies on objects ..................................................834
26.1.145 C1136: Class <Ident> is not a correct nested class of class <Ident> ........................................................835
26.1.148 C1139: Interrupt routine should not have any return value nor any parameter ........................................838
26.1.149 C1140: This function is already declared and has a different prototype ...................................................840
26.1.152 C1143: Ambiguous Cosmic space modifier. Only one per declaration allowed ......................................842
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
36 Freescale Semiconductor, Inc.
Section number Title Page
26.1.156 C1392: Pointer to virtual methods table not qualified for code address space (use -Qvtprom or -
Qvtpuni) ....................................................................................................................................................848
26.1.157 C1393: Delta value does not fit into range (option -Tvtd) ........................................................................848
26.1.158 C1395: Classes should be the same or derive one from another ..............................................................850
26.1.160 C1397: Kind of member and kind of pointer to member are not compatible ...........................................856
26.1.161 C1398: Pointer to member offset does not fit into range of given type (option -Tpmo) ..........................858
26.1.163 C1401: This C++ feature has not been implemented yet ..........................................................................860
26.1.164 C1402: This C++ feature (<Feature>) is not implemented yet .................................................................860
26.1.179 C1417: Const/volatile not allowed for type of new operator ....................................................................867
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 37
Section number Title Page
26.1.211 C1803: Illegal use of address of function compiled under the pragma REG_PROTOTYPE ..................897
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
38 Freescale Semiconductor, Inc.
Section number Title Page
26.1.227 C1820: Destructor call must have 'void' formal parameter list .................................................................908
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 39
Section number Title Page
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
40 Freescale Semiconductor, Inc.
Section number Title Page
26.1.272 C2006: (un)signed char reference must be const for init with char ..........................................................938
26.1.281 C2015: Template is used with the wrong number of arguments ..............................................................948
26.1.286 C2020: Template parameter not used in function parameter list ..............................................................951
26.1.288 C2022: Pure virtual can be called only using explicit scope resolution ...................................................953
26.1.291 C2025: Default argument expression can only contain static or global objects or constants ...................956
26.1.294 C2202: Too many initializers for global Ctor arguments .........................................................................958
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 41
Section number Title Page
26.1.317 C2709: Illegal floating-point exponent ('-', '+' or digit expected) .............................................................975
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
42 Freescale Semiconductor, Inc.
Section number Title Page
26.1.333 C3304: Too many internal ids, split up compilation unit .........................................................................984
26.1.339 C3601: Pragma TEST_CODE: mode <Mode>, size given <Size> expected <Size>, hashcode given
<HashCode>, expected <HashCode> .......................................................................................................987
26.1.340 C3602: Global objects: <Number>, Data Size (RAM): <Size>, Const Data Size (ROM): <Size> .........988
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 43
Section number Title Page
26.1.368 C4206: pragma pop found without corresponding pragma push ..............................................................1006
26.1.374 C4302: Could not generate inline expansion for this function call ...........................................................1008
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
44 Freescale Semiconductor, Inc.
Section number Title Page
26.1.387 C4411: Maximum number of arguments for macro expansion reached ...................................................1016
26.1.400 C4424: # in substitution list must be followed by name of formal parameter ..........................................1024
26.1.401 C4425: ## in substitution list must be preceded and followed by a symbol .............................................1025
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 45
Section number Title Page
26.1.417 C4441: Preprocessor output file <file> could not be opened ....................................................................1032
26.1.420 C4444: Line number for line directive must be > 0 and <= 32767 ...........................................................1035
26.1.423 C4447: Unexpected tokens following preprocessor directive - expected a newline ................................1037
26.1.428 C4701: pragma TEST_ERROR: Message <ErrorNumber> did not occur ...............................................1039
26.1.433 C5000: Following condition fails: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <=
sizeof(long long) .......................................................................................................................................1041
26.1.434 C5001: Following condition fails: sizeof(float) <= sizeof(double) <= sizeof(long double) <=
sizeof(long long double) ...........................................................................................................................1042
26.1.439 C5006: Illegal type settings for HIWARE Object File Format ................................................................1044
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
46 Freescale Semiconductor, Inc.
Section number Title Page
26.1.443 C5300: Limitation: code size '<actualSize>' > '<limitSize>' bytes ...........................................................1046
26.1.451 C5355: Encryption source '<SrcFile>' and destination file '<DstFile>' are the same ...............................1049
26.1.460 C5700: Internal Error <ErrorNumber> in '<Module>', please report to <Producer> ...............................1054
26.1.461 C5701: Internal Error #<ErrorNumber> in '<Module>' while compiling file '<File>, procedure
'<Function>', please report to <Producer> ................................................................................................1055
26.1.462 C5702: Local variable '<Variable>' declared in function '<Function>' but not referenced ......................1056
26.1.463 C5703: Parameter '<Parameter>' declared in function '<Function>' but not referenced ..........................1056
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 47
Section number Title Page
26.1.477 C5912: Code in 'if' and 'else' part are the same .........................................................................................1064
26.1.478 C5913: Conditions of 'if' and 'else if' are the same ...................................................................................1064
26.1.479 C5914: Conditions of 'if' and 'else if' are inverted ....................................................................................1065
26.1.488 C6001: Could not Open Asm Include File because of <reason> ..............................................................1071
26.1.492 C18001: Incompatible memory model (banked memory model) for the chosen derivative ....................1073
26.1.494 C18003: _linear pointer to object in non-LINEAR CONST_SEG [Object addresses extended]..............1074
26.1.496 C18004: MMU can be used for HCS08 derivatives only .........................................................................1075
26.1.497 C18005: Unsupported pointer qualifier combination for function pointer ...............................................1075
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
48 Freescale Semiconductor, Inc.
Section number Title Page
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 49
Section number Title Page
26.1.532 C20099: Cannot take address difference between local varaiables ..........................................................1091
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
50 Freescale Semiconductor, Inc.
Chapter 1
Overview
The HC(S)08 Build Tools Reference Manual for Microcontrollers describes the compiler
used for the Freescale 8-bit Microcontroller Unit (MCU) chip series. This document
consists of the following sections:
• Using Compiler : Describes how to run the compiler
• ANSI-C Library Reference : Describes how the compiler uses the ANSI-C library
• Appendices : Lists FAQs, global and local configuration file entries, and known C++
issues
NOTE
The technical notes and application notes are placed at the
following location: <CWInstallDir>\MCU\Help\PDF, where,
CWInstallDir is the directory in which the CodeWarrior
software is installed.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 51
Additional Information Resources
NOTE
To view the online help for the CodeWarrior tools, first
select Help > Help Contents from the IDE's menu bar.
Next, select required manual from the Contents list. For
general information about the CodeWarrior IDE and
debugger, refer to the CodeWarrior Common Features
Guide in this folder: <CWInstallDir>\MCU\Help\PDF
Refer to the documentation listed below for details about the programming languages:
• American National Standard for Programming Languages - C, ANSI/ISO 9899-1990
(see ANSI X3.159-1989, X3J11)
• The C Programming Language, second edition, Prentice-Hall 1988
• C: A Reference Manual, second edition, Prentice-Hall 1987, Harbison and Steele
• C Traps and Pitfalls, Andrew Koenig, AT&T Bell Laboratories, Addison-Wesley
Publishing Company, Nov. 1988, ISBN 0-201-17928-8
• Data Structures and C Programs, Van Wyk, Addison-Wesley 1988
• How to Write Portable Programs in C, Horton, Prentice-Hall 1989
• The UNIX Programming Environment, Kernighan and Pike, Prentice-Hall 1984
• The C Puzzle Book, Feuer, Prentice-Hall 1982
• C Programming Guidelines, Thomas Plum, Plum Hall Inc., Second Edition for
Standard C, 1989, ISBN 0-911537-07-4
• DWARF Debugging Information Format, UNIX International, Programming
Languages SIG, Revision 1.1.0 (October 6, 1992), UNIX International, Waterview
Corporate Center, 20 Waterview Boulevard, Parsippany, NJ 07054
• DWARF Debugging Information Format, UNIX International, Programming
Languages SIG, Revision 2.0.0 (July 27, 1993), UNIX International, Waterview
Corporate Center, 20 Waterview Boulevard, Parsippany, NJ 07054
• System V Application Binary Interface, UNIX System V, 1992, 1991 UNIX Systems
Laboratories, ISBN 0-13-880410-9
• Programming Microcontroller in C, Ted Van Sickle, ISBN 1878707140
• C Programming for Embedded Systems, Kirk Zurell, ISBN 1929629044
• Programming Embedded Systems in C and C ++, Michael Barr, ISBN 1565923545
• Embedded C, Michael J. Pont, ISBN 020179523X
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
52 Freescale Semiconductor, Inc.
Chapter 2
Using Compiler
This section consists of the following chapters that describe the use and operation of the
compiler:
• Introduction : Describes the compiler.
• Graphical User Interface : Describes the compiler's GUI.
• Environment : Describes the environment variables.
• Files : Describes how the compiler processes input and output files.
• Compiler Options : Describes the full set of compiler options.
• Compiler Predefined Macros : Lists all predefined macros of the compiler.
• Compiler Pragmas : Lists the available pragmas.
• ANSI-C Frontend : Describes the ANSI-C implementation.
• Generating Compact Code : Describes programming guidelines for the developer to
produce compact and efficient code.
• HC(S)08 Backend : Describes code generator and basic type implementation, also
hints about hardware-oriented programming (optimizations and interrupt functions)
specific for HC(S)08.
• High-Level Inline Assembler for the HC(S)08 : Describes the HLI assembler for the
HC(S)08 compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 53
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
54 Freescale Semiconductor, Inc.
Chapter 3
Introduction
This chapter describes the HC(S)08 Compiler that is part of the CodeWarrior
Development Studio for Microcontrollers V10.x. The Compiler consists of a Frontend,
which is language-dependent, and a Backend, which is hardware-dependent and generates
object code specific to HC08 and HCS08. Chapters one and two describe the
configuration and creation of projects that target HC08 and HCS08 microcontrollers.
Chapter three describes the Compiler in greater detail.
NOTE
The CodeWarrior Development Studio tools actually support
both the HC08 and HCS08 Microcontroller derivatives. For
brevity, this document uses the label HC(S)08 to describe
where the tools support both Microcontrollers derivatives.
Where information is specific to HC08, the label HC08 is used,
and where it is specific to HCS08, the label HCS08 is used.
This chapter consists of the following topics.
• Compiler Environment
• Designing a Project
• Creating and Managing Project Using CodeWarrior IDE
• Using Standalone Compiler
• Build Tools (Application Programs)
• Startup Command-Line Options
• Highlights
• CodeWarrior Integration of Build Tools
• Integration into Microsoft Visual C++ 2008 Express Edition (Version 9.0 or later)
• Compiler Modes and Language Extensions
• Object-File Formats
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 55
Designing Project
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
56 Freescale Semiconductor, Inc.
Chapter 3 Introduction
You can create a Microcontrollers project and generate the basic project files using the
New Bareboard Project wizard in the CodeWarrior IDE.
You can use the CodeWarrior Projects view in the CodeWarrior IDE to manage files in
the project.
This section covers the following topics:
• Creating Project using CodeWarrior Project Wizard
• Analysis of Groups in CodeWarrior Projects View
• Analysis of Files in CodeWarrior Projects View
The steps below create an example Microcontrollers project that uses C language for its
source code.
1. Select Start > Programs > Freescale CodeWarrior > CW for MCU v10.x >
CodeWarrior from the Windows® Taskbar.
The Workspace Launcher dialog box appears. The dialog box displays the default
workspace directory. For this example, the default workspace is workspace_MCU.
2. Click OK to accept the default location. To use a workspace different from the
default, click Browse and specify the desired workspace.
The CodeWarrior IDE for Microcontrollers V10.x appears.
3. Select File > New > Bareboard Project from the IDE menu bar.
The Create an MCU Bareboard Project page of the New Bareboard Project
wizard appears.
4. Type the name of the project in the Project name text box. For this example, type
HCS08_project. Click Next.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 57
Creating and Managing Project Using CodeWarrior IDE
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
58 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The wizard automatically generates the startup and initialization files for the specific
microcontroller derivative, and assigns the entry point into your ANSI-C project (the
main() function). The HCS08_project project appears in the CodeWarrior Projects
view in the Workbench window.
NOTE
For detailed descriptions of the options available in the
New Bareboard Project wizard pages, refer to the
Microcontrollers V10.x Targeting Manual.
By default, the project is not built. To do so, select Project > Build Project from the
IDE menu bar. Expand the HCS08_project : FLASH tree control in the CodeWarrior
Projects view to view its supporting directories and files.
NOTE
To configure the IDE, so that it automatically builds the
project when a project is created, select Window >
Preferences to open the Preferences window. Expand the
General node and select Workspace. In the Workspace
panel, check the Build automatically checkbox and click
OK.
NOTE
The contents of the project directory vary depending upon
the options selected while creating the project.
The view displays the logical arrangement of the files in the HCS08_project project
directory. At this stage, you can safely close the project and reopen it later, if desired.
The following is the list of default groups and files displayed in the CodeWarrior
Projects view.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 59
Creating and Managing Project Using CodeWarrior IDE
In the CodeWarrior Projects view, the project files are distributed into five major
groups, each with their own folder within the HCS08_project folder.
The default groups and their usual functions are:
• FLASH
The HCS08 group contains all of the files that CodeWarrior uses to build the program.
It also stores any files generated by the build process, such as any binaries ( .o, .obj,
and .abs), and a map file ( .map). CodeWarrior uses this directory to manage the build
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
60 Freescale Semiconductor, Inc.
Chapter 3 Introduction
process, so you should not tamper with anything in this directory. This directory's
name is based on the build configuration, so if you switch to a different build
configuration, its name changes.
• Lib
The Lib group contains the C-source code file for the specific Microcontrollers
derivative. For this example, the mc9s08gt32.c file supports the MC9S08GT32 derivative.
This file defines symbols that you use to access the Microcontrollers registers and
bits within a register. It also defines symbols for any on-chip peripherals and their
registers. After the first build, you can expand this file to see all of the symbols that it
defines.
• Project_Headers
The Project_Headers group contains the derivative-specific header files required by the
Microcontrollers derivative file in the Lib group.
• Project_Settings
This group contains the files used to manage a debugging session. These are the
debug launch configuration ( .launch), a memory configuration file ( .mem) for the
target hardware, and any TCL script files ( .tcl).
• Linker_Files
This group contains the burner file ( .bbl), and the linker command file ( .prm).
• Startup_Code
This group contains the source code that manages the Microcontrollers
initialization and startup functions. For HCS08 derivatives, these functions
appear in the source file start08.c.
• Sources
This group contains the C source code files. The New Bareboard Project wizard
generates a default main.c file for this group. You can add your own source files to
this folder. You can double-click on these files to open them in the IDE's editor. You
can right-click the source files and select Resource Configurations > Exclude from
Build to prevent the build tools from compiling them.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 61
Creating and Managing Project Using CodeWarrior IDE
Expand the groups in the CodeWarrior Projects view to display all the default files
generated by the New Bareboard Project wizard.
The wizard generates following three C source code files, located in their respective
folders in the project directory:
• main.c,
located in <project_directory>\Sources
• start08.c, and
located in <project_directory>\Project_Settings\Startup_Code
• mc9s08gt32.c
located in <project_directory>\Lib
At this time, the project should be configured correctly and the source code should be
free of the syntactical errors. If the project has been built earlier, you should see a link to
the project's binary files, and the HCS08 folder in the CodeWarrior Projects view.
To understand what the IDE does while building a project, clean the project and build the
project again:
1. Select Project > Clean from the IDE menu bar.
The Clean dialog box appears.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
62 Freescale Semiconductor, Inc.
Chapter 3 Introduction
3. Click OK .
The Binaries link disappears, and the FLASH folder is deleted.
4. To build the project, right-click the project and select Build Project .
The Console view displays the statements that direct the build tools to compile and
link the project. The Binaries link appears, and so does the FLASH folder.
During a project build, the C source code is compiled, the object files are linked together,
and the CPU derivative's ROM and RAM area are allocated by the linker according to the
settings in the linker command file. When the build is complete, the FLASH folder contains
the HCS08_project.abs file.
The Linker Map file, HCS08_project.map, indicates the memory areas allocated for the
program.
To examine the source file, main.c, do the following:
• Double click the main.c file in the Sources group.
The IDE opens the main.c file in the editor area.
Use the integrated editor to write your C source files ( *.c and *.h) and add them to your
project. During development, you can test your source code by building and simulating/
debugging your application.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 63
Using Standalone Compiler
You can use the HC(S)08 Compiler as a standalone compiler. In this section, we will
create a new project directory using some of the previously created files, and build the
application.
NOTE
Although it is possible to create and configure a project from
scratch using the standalone Build Tools, it is easier and faster
to create, configure, and manage your project using the
CodeWarrior Projects wizard.
This section covers the following topics:
• Configuring the Compiler
• Selecting Input Files
• Compiling C Source Code Files
Build tools use a tool directory for configuring and locating their generated files. For the
Microcontrollers V10.x build tools, the tool directory is the prog folder, and is located in
the <CWInstallDir>\MCU folder, where CWInstallDir is the directory in which the CodeWarrior
software is installed.
Build tools require information from the configuration files. There are two types of
configuration data:
• Global
Global data is common to all build tools and projects, and includes data for each
build tool, such as the directory path for recent project listings. All tools may store
some global data in a mcutools.ini file. Each tool looks for this file in the tool
directory first, then in the Microsoft Windows installation directory (for example, C:
\WINDOWS). The following listing shows the locations for the global configuration file.
<CWInstallDir>\MCU\prog\mcutools.ini - #1 priority
C:\WINDOWS\mcutools.ini - used if there is no mcutools.ini file above
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
64 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The Compiler uses the initialization file in the prog folder if you start the tool from
the prog folder.
That is, <CWInstallDir>\MCU\prog\mcutools.ini, where, CWInstallDir is the directory in
which the CodeWarrior software is installed.
The Compiler uses the initialization file in the Windows directory if the tool is started
outside the prog folder. That is, C:\WINDOWS\mcutools.ini
NOTE
For information about entries for the global configuration
file, refer to the Global Configuration File Entries in the
Appendices.
• Local
Local data files can be used by any build tool for a particular project. These files are
typically stored in a project folder. For information about local configuration file
entries, refer to the Local Configuration File Entries in the Appendices.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 65
Using Standalone Compiler
NOTE
You can also use an existing configuration file. Select File
> Load Configuration to open the existing configuration
file.
4. Select File > Save Configuration (or Save Configuration As ) from the HC08
Compiler menu bar.
The Saving Configuration as dialog box appears.
5. Browse and select the folder where you want to save the configuration. In this
example, folder X15 is used to save the configuration.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
66 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The project directory folder now contains the newly-created project.ini configuration
file. The project configuration file contains a copy of the [CHC08_Compiler] section
of the project.ini file located in the prog folder. If a build tool modifies any project
option, the changes are specified in appropriate section of the project configuration
file.
NOTE
Option changes made to the project.ini file in the prog
folder apply to all projects. Recall that this file stores the
global tool options.
7. Select Compiler > Options > Options from the HC08 Compiler menu bar.
The HC08 Compiler Option Settings dialog box appears.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 67
Using Standalone Compiler
The project does not contain any source code files at this point. Copy and paste the C
source code (*.c) and header (*.h) files from the previous project, HCS08_project, to save
time.
1. Copy the Sources folder from the HCS08_project folder and paste it into the X15 project
folder.
2. Copy the Project_Headers folder from the HCS08_project folder and paste it into the X15
project folder.
3. Copy and paste the HCS08_project project's Lib folder into the X15 project folder.
4. In the X15 folder, create a new folder Project_Settings. Copy and paste the Startup_Code
folder from the HCS08_project\Project_Settings folder into the X15\Project_Settings
folder.
Now there are five items in the X15 project folder, as shown in the figure below:
• the project.ini configuration file
• the Sources folder, which contains the main.c source file
• the Project_Headers folder, which contains:
• the derivative.h header file, and
• the mc9s08gt32.h header file
• the Lib folder, which contains the mc9s08gt32.h source file
• the Project_settings\Startup_Code folder, which contains the start up and initialization
file, start08.c
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
68 Freescale Semiconductor, Inc.
Chapter 3 Introduction
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 69
Using Standalone Compiler
The HC08 Compiler window provides information about the compilation process,
and generates the error messages if the compilation fails. In this case, the C5200:
`FileName' file not found error message appears twice, once for start08.h and once for
non_bank.sgm.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
70 Freescale Semiconductor, Inc.
Chapter 3 Introduction
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 71
Using Standalone Compiler
The Tips section in the help for the C5200 error states that the correct paths and
names for the source files must be specified. The following folder contains both the
missing files, start08.h and non_bank.sgm:
<CWInstallDir>\MCU\lib\hc08c\include
NOTE
The #include preprocessor directive for the start08.h file and
the non_bank.sgm file appears on line 21 and 31 of the
start08.c file, respectively.
To resolve the error, modify the compiler configuration so that it can locate the missing
files.
1. Select File > Configuration from the HC08 Compiler menu bar.
The Configuration dialog box appears.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
72 Freescale Semiconductor, Inc.
Chapter 3 Introduction
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 73
Using Standalone Compiler
Now that you have specified the paths to the missing files, you can try again to compile
the start08.c file.
1. Select File > Compile from the HC08 Compiler menu bar.
2. Navigate to the Project_settings\Startup_Code folder in the project directory.
3. Select start08.c.
4. Click Open.
The HC08 Compiler window indicates successful compilation of the start08.c file and
displays following results:
• The start08.c file involved the use of four header files.
• The Compiler generated an assembler listing file ( start08.lst) for the start08.c file.
• The Compiler generated an object file ( start08.o) in the Sources folder, using the
ELF/DWARF 2.0 format.
• The Code Size was 149 bytes.
• The compiler created six global objects and the Data Size was 6 bytes in RAM.
• There were 0 errors, 0 warnings, and 0 information messages.
Tip
Clear the Compiler window at any time by selecting View
> Log > Clear Log from the HC08 Compiler menu bar.
The compiler places the object file in the Sources folder, and generates output listing files
in the project folder. The binary object files and the input modules have identical names
except for the extension used. Any assembly output files generated for each C source
code file is similarly named.
At this time, only two of the three C source code files have been compiled. Locate the
remaining C source code file, MC9S08GT32.c, in the Lib folder of the current directory, X15.
The compiler places the object-code files it generates in the same folder that contains the
C source code files. However, you can also specify a different location for the object-
code files.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 75
Using Standalone Compiler
To redirect the object-code file for the MC9S08GT32.c file to another folder, modify the
compiler configuration so that when the MC9S08GT32.c file is compiled, the object code file
goes into a different folder. For more information, refer to the OBJPATH: Object File
Path).
1. Using Windows Explorer, create a new folder in the current directory and name it
ObjectCode.
2. Select File > Configuration from the HC08 Compiler menu bar.
3. Select the Environment tab and select Object Path.
4. Click Browse.
The Browse for Folder dialog box appears.
5. In the Browse for Folder dialog box, browse for and select the ObjectCode folder.
6. Click OK.
The Browse for Folder dialog box closes.
7. Click Add.
The new object path appears in the lower pane.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
76 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The Compiler log states that the object code file, MC9S08GT32.o, is created in the ObjectCode
folder, as specified. Save the project configuration again in case you wish to recompile
any of the C source code files in future.
Tip
Move the other two object code files to the ObjectCode folder so
that all object code files for the project are in the same place.
This makes project management easier.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 77
Build Tools (Application Programs)
The haphazard builds of this project are intentionally designed to illustrate what happens
if paths are not configured properly while compiling a project using the Compiler tool.
The header files may be included by either C source or other header files. The lib folder
in the CodeWarrior installation directory contains derivative-specific header and other
files for Microcontrollers projects.
When you build another project with the Build Tool Utilities, make sure that the settings
for the input and output files are done in advance.
Now that the project's object code files are available, you can use the linker build tool,
linker.exe, together with an appropriate *.prm file, to link these object-code files with the
library files and create an *.abs executable output file.
Refer to the Linker section in the Build Tool Utilities Manual for details. However, the
project set up and configuration is faster and easier using the New Bareboard Project
wizard.
The standalone build tools (application programs) can be found in the \prog folder, which
is located within the folder where the CodeWarrior software is installed.
<CWInstallDir>\MCU\prog
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
78 Freescale Semiconductor, Inc.
Chapter 3 Introduction
NOTE
There may be some additional tools in your \prog folder or you
may find some tools missing, depending on your license
configuration.
Startup command-line options are special tool options that are specified at tool startup,
that is while launching the tool. They cannot be specified interactively.
Some of these options open special dialog boxes, such as the Configuration and Message
dialog boxes, for a build tool.
The following table lists the Startup command-line options and their description:
Table 3-2. Startup Command-line Options
Startup Command-line Option Description
-Prod Specifies the current project directory or file. For more
information, refer to the topic, -Prod: Specify Project File at
Startup.
ShowOptionDialog Opens the Option dialog box.
ShowMessageDialog Opens the message dialog box.
ShowConfigurationDialog Opens the File > Configuration dialog box.
ShowBurnerDialog Opens the Burner dialog box.
ShowSmartSliderDialog Opens the CompilerSmart Control dialog box. This is
compiler option.
ShowAboutDialog Opens the About dialog box.
NOTE
For more information on the build tool dialog boxes, refer to
the Graphical User Interface chapter.
Listing: Example of -Prod Command-Line Option
C:\Freescale\CW MCU V10.x\MCU\prog>linker.exe -
Prod=C:\Freescale\demo\myproject.pjt
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 79
CodeWarrior Integration of Build Tools
3.7 Highlights
All required CodeWarrior plug-ins are installed together with the Eclipse IDE. The
program that launches the IDE with the CodeWarrior tools, cwide.exe, is installed in the
eclipse directory (by default, C:\Freescale\CW MCU V10.x\eclipse). The plug-ins are installed
in the eclipse\plugins directory.
This section covers the following topics:
• Combined or Separated Installations
• HCS08 Compiler Build Settings Panels
• CodeWarrior Tips and Tricks
The installation script enables you to install several CPUs along one single installation
path. This saves disk space and enables switching from one processor family to another
without leaving the IDE.
NOTE
It is possible to have separate installations on one machine.
There is only one point to consider: The IDE uses COM files,
and for COM the IDE installation path is written into the
Windows Registry. This registration is done in the installation
setup. However, if there is a problem with the COM registration
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
80 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The following sections describe the settings panels that configure the HC(S)08 Compiler
build tool options. These panels are part of the project's build properties settings, which
are managed in the Properties window. To access these panels, proceed as follows:
1. Select the project for which you want to set the build properties, in the CodeWarrior
Projects view.
2. Select Project > Properties from the IDE menu bar.
The Properties for <project> dialog box appears.
3. Expand the C/C++ Build tree control and select Settings.
The various settings for the build tools are displayed in the right panel. If not, select
the Tool Settings tab.
The options are grouped by tool, such as Messages , Host , General , Disassembler ,
Linker , Burner , HCS08Compiler , HCS08 Assembler and Preprocessor options.
Depending on the build properties you wish to configure, select the appropriate option in
the Tool Settings tab page.
NOTE
For information about other build properties panels, refer to the
Microcontrollers V10.x Targeting Manual.
The following listed are the build properties panels for the HC(S)08 Compiler.
Table 3-3. Build Properties Panels for HC(S)08 Compiler
Build Tool Build Properties Panels
HCS08 Compiler HCS08 Compiler > Output
HCS08 Compiler > Output > Configure Listing File
HCS08 Compiler > Output > Configuration for list of included
files in make format
HCS08 Compiler > Input
HCS08 Compiler > Language
HCS08 Compiler > Language > CompactC++ features
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 81
CodeWarrior Integration of Build Tools
Use this panel to specify the command, options, and expert settings for the HC(S)08
compiler. Additionally, the HCS08 Compiler tree control includes the general, include
file search path settings. The following figure shows the HC(S)08 Compiler settings.
The following table lists the HSC08 Compiler panel options for HC(S)08 Compiler.
Table 3-4. Tool Settings - HCS08 Compiler Options
Option Description
Command Shows the location of the linker executable file. Default value
is: "${HC08Tools}/chc08"
All options Shows the actual command line the compiler will be called
with.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
82 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Use this panel to control how the compiler generates the output file, as well as error and
warning messages. You can specify whether to allocate constant objects in ROM,
generate debugging information, and strip file path information. The following figure
shows the Output panel.
The following table lists the Output panel options for HC(S)08 compiler.
Table 3-5. Tool Settings - HCS08 Compiler > Output Options
Option Description
Allocate CONST objects in ROM (-Cc) Refer to the -Cc: Allocate Const Objects into ROM topic.
Encrypt Files (e.g. %f.e%e) (-Eencrypt) Refer to the -Eencrypt: Encrypt Files topic.
Encryption key (-EKey) Refer to the -Ekey: Encryption Key topic.
Object File Format Refer to the -F (-Fh, -F1, -F1o, -F2, -F2o,-F6, or -F7): Object-
File Format topic.
General Assembler Include File (e.g. %f.inc) (-La) Refer to the -La: Generate Assembler Include File topic.
Generate Listing File (e.g. %n.lst) (-Lasm) Refer to the -Lasm: Generate Listing File topic.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 83
CodeWarrior Integration of Build Tools
Table 3-5. Tool Settings - HCS08 Compiler > Output Options (continued)
Option Description
Log predefined defines to file (e.g. predef.h) (-Ldf) Refer to the -Ldf: Log Predefined Defines to File topic.
List of included files to ` .inc' file (-Li) Refer to the -Li: List of Included Files to ".inc" File topic.
Write statistic output to file (e.g. logfile.txt) (-Ll) Refer to the -Ll: Write Statistics Output to File topic.
List of included files in make format (e.g. make.txt ) (-Lm) Refer to the -Lm: List of Included Files in Make Format topic.
Append object file name to list (e.g. obklist.txt ) (-Lo) Refer to the -Lo: Append Object File Name to List (enter
[<files>]) topic.
Preprocessor output ( e.g. %n.pre ) (-Lp) Refer to the -Lp: Preprocessor Output topic.
Strip path information (-NoPath) Refer to the -NoPath: Strip Path Info topic.
Use this panel to configure the listing files for HC(S)08 Compiler. The following figure
shows the Configure Listing File panel.
Figure 3-20. Tool Settings - HCS08 Compiler > Output > Configure Listing File
NOTE
For information about the description of the options appearing
in the Configure Listing File panel for HC(S)08 Compiler,
refer to the -Lasmc: Configure Listing File topic.
3.8.2.4 HCS08 Compiler > Output > Configuration for list of included
files in make format
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
84 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Use this panel to configure the list of included files in make format for HC(S)08
Compiler to generate the output.
The following figure shows the Configuration for list of included files in make format
panel.
NOTE
For information about the description of the options appearing
in the Configuration for list of included files in make format
panel for HC(S)08 Compiler, refer to the -LmCfg:
Configuration for List of Included Files in Make Format (option
-Lm) topic.
Use this panel to specify file search paths and any additional include files the HCS08
Compiler should use. You can specify multiple search paths and the order in which you
want to perform the search.
The IDE first looks for an include file in the current directory, or the directory that you
specify in the INCLUDE directive. If the IDE does not find the file, it continues searching the
paths shown in this panel. The IDE keeps searching paths until it finds the #include file or
finishes searching the last path at the bottom of the Include File Search Paths list. The
IDE appends to each path the string that you specify in the INCLUDE directive.
NOTE
The IDE displays an error message if a header file is in a
different directory from the referencing source file. Sometimes,
the IDE also displays an error message if a header file is in the
same directory as the referencing source file.
For example, if you see the message Could not open source file myfile.h, you must add the
path for myfile.h to this panel. The following figure shows the Input panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 85
CodeWarrior Integration of Build Tools
The following table lists the Input panel options for HC(S)08 Compiler.
Table 3-6. Tool Settings - HCS08 Compiler > Input Options
Option Description
Filenames are clipped to DOS length ( -!) Refer to the -!: Filenames are clipped to DOS Length topic.
Include File Path ( -I) Refer to the -I: Include File Path topic.
Additional Include Files ( -AddIncl) Refer to the -AddIncl: Additional Include File topic.
Include files only once ( -Pio) Refer to the -Pio: Include Files Only Once topic.
The following table lists and describes the toolbar buttons that help work with the file
paths.
Table 3-7. Include File Path (-I) Toolbar Buttons
Button Description
Add - Click to open the Add directory path dialog box and
specify location of the library you want to add.
Delete - Click to delete the selected library path.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
86 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The following figure shows the Add directory path dialog box.
Figure 3-22. Tool Settings - HCS08 Compiler > Input - Add Directory Path Dialog Box
Figure 3-23. Tool Settings - HCS08 Compiler > Input - Edit Directory Path Dialog Box
The buttons in the Add directory path and Edit directory path dialog boxes help work
with the paths.
• OK- Click to confirm the action and exit the dialog box.
• Cancel- Click to cancel the action and exit the dialog box.
• Workspace - Click to display the File selection dialog box and specify the path. The
resulting path, relative to the workspace, appears in the appropriate list.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 87
CodeWarrior Integration of Build Tools
• File system - Click to display the Browse For Folder dialog box and specify the
path. The resulting path appears in the appropriate list.
• Variables - Click to display the Select build variable dialog box. The resulting path
appears in the appropriate list.
The following table lists and describes the toolbar buttons that help work with the search
paths.
Table 3-8. Additional Include Files (-AddIncl) Toolbar Buttons
Button Description
Add - Click to open the Add file path dialog box and specify
location of the library you want to add.
Delete - Click to delete the selected library path.
Edit - Click to open the Edit file path dialog box and update
the selected path.
Move up - Click to move the selected path one position
higher in the list.
Move down - Click to move the selected path one position
lower in the list.
Figure 3-24. Tool Settings - HCS08 Compiler > Input - Add File Path Dialog Box
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
88 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Figure 3-25. Tool Settings - HCS08 Compiler > Input - Edit File Path Dialog Box
The buttons in the Add file path and Edit file path dialog boxes help work with the
paths.
• OK- Click to confirm the action and exit the dialog box.
• Cancel- Click to cancel the action and exit the dialog box.
• Workspace - Click to display the File selection dialog box and specify the path. The
resulting path, relative to the workspace, appears in the appropriate list.
• File system - Click to display the Open dialog box and specify the path. The
resulting path appears in the appropriate list.
• Variables - Click to display the Select build variable dialog box. The resulting
variable appears in the path list.
Use this panel to specify code-generation and symbol-generation options for HC(S)08
Compiler.
The following figure shows the Language panel.
The following table lists the Language panel options for HC(S)08 Compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 89
CodeWarrior Integration of Build Tools
Use this panel to specify the options to disable the CompactC++ features for the HC(S)08
Compiler. The following figure shows the CompactC++ features panel.
Figure 3-27. Tool Settings - HCS08 Compiler > Language > CompactC++ Features
NOTE
For information about the description of the options appearing
in the CompactC++ features panel for HC(S)08 Compiler,
refer to the
Use this panel to specify the host options for HC(S)08 Compiler. The following figure
shows the Host panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
90 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The following table lists and describes the options for Host panel.
Table 3-10. Tool Settings - HCS08 Compiler > Host Options
Option Description
Set environment variable ( -Env) Refer to the -Env: Set Environment Variable topic.
Borrow license feature ( -LicBorrow) Refer to the -LicBorrow: Borrow License Feature topic.
Wait until a license is available from floating license server ( - Refer to the -LicWait: Wait until Floating License is Available
LicWait) from Floating Li- cense Server topic.
Application Standard Occurrence Refer to the -View: Application Standard Occurrence topic.
Use this panel to specify code-generation and symbol-generation options for the HC(S)08
Compiler. The following figure shows the Code Generation panel.
The following table lists the Code Generation panel options for HC(S)08 compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 91
CodeWarrior Integration of Build Tools
Table 3-11. Tool Settings - HCS08 Compiler > Code Generation Options
Option Description
Bit field byte allocation ( -BfaB[MS|LS]) Refer to the -BfaB: Bitfield Byte Allocation topic.
Bit field gap limit ( -BfaGapLimitBits) Refer to the -BfaGapLimitBits: Bitfield Gap Limit topic.
Bit field type size reduction Refer to the -BfaTSR: Bitfield Type Size Reduction topic.
Maximum load factor for switch tables ( 0-100) ( - Refer to the -CswMaxLF: Maximum Load Factor for Switch
CswMaxLF) Tables topic.
Minimum number of labels for switch tables ( -CswMinLB) Refer to the -CswMinLB: Minimum Number of Labels for
Switch Tables topic.
Minimum load factor for switch tables ( 0-100) ( -CswMinLF) Refer to the -CswMinLF: Minimum Load Factor for Switch
Tables topic.
Minimum number of labels for switch search tables ( - Refer to the -CswMinSLB: Minimum Number of Labels for
CswMinSLB) Switch Search Tables topic.
Switch off code generation ( -Cx) Refer to the -Cx: Switch Off Code Generation topic.
Do not use CLR for volatile variables in the direct page ( - Refer to the -NoClrVol: Do not use CLR for volatile variables
NoClrVol) in the direct page topic.
Qualifier for virtual table pointers ( -Qvtp) Refer to the -Qvtp: Qualifier for Virtual Table Pointers topic.
Use IEEE32 for double (default is IEEE64) Refer to the -Fd: Double is IEEE32 topic.
Assume HLI code saves modified registers Refer to the -Asr: It is Assumed that HLI Code Saves Written
Registers topic.
Use this panel to specify the messages options for the HC(S)08 Compiler. The following
figure shows the Messages panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
92 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The following table lists and describes the options for Messages panel.
Table 3-12. Tool Settings - HCS08 Compiler > Messages Options
Option Description
Don't print INFORMATION messages ( -W1) Refer to the -W1: Don't Print Information Messages topic.
Don't print INFORMATION or WARNING messages ( -W2) Refer to the -W2: Do not Print INFORMATION or WARNING
Messages topic.
Create err.log Error file Refer to the -WErrFile: Create "err.log" Error File topic.
Cut file names in Microsoft format to 8.3 ( -Wmsg8x3) Refer to the -Wmsg8x3: Cut Filenames in Microsoft Format to
8.3 topic.
Set message file format for batch mode Refer to the -WmsgFb (-WmsgFbv, -WmsgFbm): Set
Message File Format for Batch Mode topic.
Message Format for batch mode (e.g. %"%f%e%"(%l): %K Refer to the -WmsgFob: Message Format for Batch Mode
%d: %m) ( -WmsgFob) topic.
Message Format for no file information (e.g. %K %d: %m) ( - Refer to the -WmsgFonf: Message Format for No File
WmsgFonf) Information topic.
Message Format for no position information (e.g. %"%f%e%": Refer to the -WmsgFonp: Message Format for No Position
%K %d: %m) ( -WmsgFonp) Information topic.
Create Error Listing File Refer to the -WOutFile: Create Error Listing File topic.
Maximum number of error messages ( -WmsgNe) Refer to the -WmsgNe: Maximum Number of Error Messages
(enter <number>) topic.
Maximum number of information messages ( -WmsgNi) Refer to the -WmsgNi: Maximum Number of Information
Messages (enter <number>) topic.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 93
CodeWarrior Integration of Build Tools
Table 3-12. Tool Settings - HCS08 Compiler > Messages Options (continued)
Option Description
Maximum number of warning messages ( -WmsgNw) Refer to the -WmsgNw: Maximum Number of Warning
Messages (enter <number>) topic.
Error for implicit parameter declaration ( -Wpd) Refer to the -Wpd: Error for Implicit Parameter Declaration
topic.
Set messages to Disable Enter the messages that you want to disable.
Set messages to Error Enter the messages that you want to set as error.
Set messages to Information Enter the messages that you want to set as information.
Set messages to Warning Enter the messages that you want to set as warning.
Use this panel to specify the options for disabling the user messages for the HC(S)08
Compiler.
The following figure shows the Disable user messages panel.
Figure 3-31. Tool Settings - HCS08 Compiler > Messages > Disable user messages
NOTE
For information about the description of the options available in
the Disable user messages panel of HC(S)08 Compiler, refer to
the -WmsgNu: Disable User Messages topic.
Use this panel to specify preprocessor behavior. You can specify the file paths and define
macros.
The following figure shows the Preprocessor panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
94 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The following table lists the Preprocessor panel options for HC(S)08 Compiler.
Table 3-13. Tool Settings - HCS08 Compiler > Preprocessor Options
Option Description
Define preprocessor macros ( -D) Defines, deletes, or rearranges the preprocessor macros. You
can specify multiple macros and change the order in which
the IDE uses the macros. Defines the preprocessor macros
and optionally assign their values. This setting is equivalent to
specifying the -D name[=value] command-line option. To
assign a value, use the equal sign (=) with no white space.
For example, this syntax defines a preprocessor value named
EXTENDED_FEATURE and assigns ON as its value:
EXTENDED_FEATURE=ONNote: If you do not assign a value
to the macro, the shell assigns a default value of 1.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 95
CodeWarrior Integration of Build Tools
The following table lists and describes the toolbar buttons that help work with
preprocessor macro definitions.
Table 3-14. Define Preprocessor Macros Toolbar Buttons
Button Description
Add - Click to open the Enter Value dialog box and specify
the path/macro.
Delete - Click to delete the selected path/macro.
Edit - Click to open the Edit Dialog dialog box and update
the selected path/macro.
Move up - Click to move the selected path/macro one
position higher in the list.
Move down - Click to move the selected path/macro one
position lower in the list.
Figure 3-33. Tool Settings - HCS08 Compiler > Preprocessor - Enter Value Dialog Box
Figure 3-34. Tool Settings - HCS08 Compiler > Preprocessor - Edit Dialog Box
The buttons in the Enter Value and Edit Dialog dialog boxes help work with the
preprocessor macros.
• OK- Click to confirm the action and exit the dialog box.
• Cancel- Click to cancel the action and exit the dialog box.
• Variables- Click to select the build variable.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
96 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Use this panel to specify the type sizes for HC(S)08 Compiler. The following figure
shows the Type Sizes panel.
NOTE
For information about the description of the options appearing
in the Type Sizes panel for HC(S)08 Compiler, refer to the -T:
Flexible Type Management topic.
Use this panel to specify other flags for the HC(S)08 Compiler to use.
The following figure shows the General panel.
The following table lists the General panel options for HC(S)08 compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 97
CodeWarrior Integration of Build Tools
Use this panel to control compiler optimizations. The compiler's optimizer can apply any
of its optimizations in either global or non-global optimization mode. You can apply
global optimization at the end of the development cycle, after compiling and optimizing
all source files individually or in groups.
The following figure shows the Optimization panel.
The following table lists the Optimization panel options for HC(S)08 compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
98 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Use this panel to configure the tree optimizer options for the HC(S)08 compiler
optimization.
The following figure shows the Tree optimizer panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 99
CodeWarrior Integration of Build Tools
Figure 3-38. Tool Settings - HCS08 Compiler > Optimization > Tree optimizer
NOTE
For information about the description of the options appearing
in the Tree optimizer panel for HC(S)08 Compiler, refer to the
-Ont: Disable Tree Optimizer topic.
Use this panel to optimize the library functions for the HC(S)08 compiler.
The following figure shows the Optimize Library Function panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
100 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Figure 3-39. Tool Settings - HCS08 Compiler > Optimization > Optimize Library Function
NOTE
For information about the description of the options appearing
in the Optimize Library Function panel for HC(S)08
compiler, refer to the -Oilib: Optimize Library Functions topic.
Use this panel to configure the branch optimizer for the HC(S)08 compiler. The
following figure shows the Branch Optimizer panel.
Figure 3-40. Tool Settings - HCS08 Compiler > Optimization > Branch Optimizer
NOTE
For information about the description of the options appearing
in the Branch Optimizer panel for HC(S)08 compiler, refer to
the -OnB: Disable Branch Optimizer topic.
Use this panel to configure peephole optimization for the HC(S)08 Compiler. The
following figure shows the Peephole Optimization panel.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 101
CodeWarrior Integration of Build Tools
Figure 3-41. Tool Settings - HCS08 Compiler > Optimization > Peephole Optimization
NOTE
For information about the description of the options appearing
in the Peephole Optimization panel for HC(S)08 compiler,
refer to the -OnP: Disable Peephole Optimization topic.
You can use the following listed tips and tricks in the CodeWarrior for Microcontrollers
V10.x:
• If Simulator or Debugger cannot be launched, check the project's launch
configuration settings. For more information about the launch configurations and
their settings, refer to the Microcontrollers V10.x Targeting Manual.
NOTE
The project's launch configurations can be viewed and
modified from the IDE's Run Configurations or Debug
Configurations dialog boxes. To open these dialog boxes,
select Run > Run Configurations or Run > Debug
Configurations.
• If a file cannot be added to the project, its file extension may not be available in the
File Types panel. To resolve the issue, add the file's extension to the list in the File
Types panel. To access the File Types panel, proceed as follows:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
102 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Use the following procedure to integrate the CodeWarrior tools into the Microsoft Visual
Studio (Visual C++) IDE.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 103
Integration into Microsoft Visual C++ 2008 Express Edition (Version 9.0 or later)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
104 Freescale Semiconductor, Inc.
Chapter 3 Introduction
Similarly, you can display other build tools in the Tools menu. Use Build Tools
(Application Programs) to obtain the file names of the other build tools and specify the
file names in the Arguments text box.
This arrangement allows the active (selected) file to be compiled or linked in the Visual
Editor. Tool messages are reported in the Visual Output window. You can double-click
an error message in this window and the offending source code statement is displayed in
the editor.
A new empty toolbar named Freescale Tools appears on your screen, adjacent to the
Customize window.
6. Select the Commands tab.
7. From the Category drop-down list box, select Tools .
8. The right side of the window displays a list of commands. Search for the commands
labeled External Command x, where x represents a number. This number corresponds to
an entry in the Menu contents text box of the External Tools window. Count down
the list in the External Tools window until you reach the first external tool you
defined. For this example, it is HCS08 Compiler , and was the third choice on the
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 105
Compiler Modes and Language Extensions
menu. Therefore, the desired tool command would be External Command 3. Alternately,
with Tools selected in the Customize window's Commands tab, click on the Tools
menu and it display the menu choices, with the external commands displayed.
9. Drag the desired command to the Freescale Tools toolbar.
A button labeled External Tool 3 appears on the Freescale Tools toolbar.
Tip
If the button appears dimmed, you have chosen an inactive
external tool entry. Check your count value and try another
external command entry.
10. Continue with this same sequence of steps to add the HCS08 Linker and HCS08
Assembler.
11. All of the default command names, such as External Command 3 , External
Command 4 , and External Command 5 on the toolbar are undescriptive, making it
difficult to know which tool to launch. You must associate a name with them.
12. Right-click on a button in the Freescale Toolbar to open the button's context menu.
13. Select Name from the context menu.
14. Enter a descriptive name into the text field.
15. Repeat this process for all of the tools that you want to display in the toolbar.
16. Click Close to close the Customize window.
This enables you to start the CodeWarrior tools from the toolbar, as shown in the
following figure.
It is possible to have the compiler operate in one of several modes to enforce certain
programming language practices or to support special programming language extensions.
You can:
• Force the compiler into a strict ANSI-C compliant mode, or
• Use language extensions that are specially designed for more efficient embedded
systems programming.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
106 Freescale Semiconductor, Inc.
Chapter 3 Introduction
The compiler supports the C++ language, if the C++ feature is enabled with a license file.
Some features of the C++ language are not designed for embedded controllers. If they are
used, they may produce large amounts of code and require a lot of processor overhead,
thereby sapping performance.
Avoid this situation by using the compactC++ and EC++ language extensions, which are
subsets of the C++ language. Each subset is adapted for embedded application
programming.
These subsets of the C++ language avoids implicit and explicit overhead of the C++
language (for example, virtual member functions and multiple inheritance). The EC++ is
a restricted subset, while compactC++ includes features which are not in the EC++
definition. This makes it more flexible.
Another key aspect of compactC++ is its flexible configuration of the language (for
example, allowed keywords, code generation behavior, and message management). The
compiler is adapted for the special needs for embedded programming.
The compiler provides the following language settings:
• ANSI-C: The compiler behaves as an ANSI-C compiler. It is possible to force the
compiler into a strict ANSI-C compliant mode, or to use language extensions
designed for efficient embedded systems programming.
• EC++: The compiler behaves as a C++ compiler. The following features are not
allowed in EC++:
• Mutable specifier
• Exception handling
• Runtime type identification
• Namespace
• Template
• Multiple inheritance
• Virtual inheritance
• Library support for w_char and long double
• cC++, compactC++: In this mode, the compiler behaves as a full C++ compiler that
allows the C++ language to be configured to provide compact code. This enables
developers to enable/disable and configure the following C++ features:
• Multiple inheritance
• Virtual inheritance
• Templates
• Trigraph and bigraph
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 107
Object-File Formats
• Compact means:
• No mutable qualifier
• No exception handling
• No runtime type identification
• No namespaces
• No library support for w_char and long double
• C++: The compiler behaves as a full C++ compiler. However, because the C++
language provides some features not usable for embedded systems programming,
such features may be not usable.
NOTE
Currently, for the MCU V10.x release, the Eclipse UI only
allows you to turn C++ language support on or off. The UI
currently does not implement settings for EC++ and
compactC++ language extensions. You must use command
line arguments to specify the compiler's support for these
language extensions. More details on these arguments can
be found in Compiler Options chapter, under -C++ (-C++f,
-C++e, -C++c): C++ Support.
The compiler supports two different object-file formats: ELF/DWARF and the vendor-
specific HIWARE object-file format. The object-file format specifies the format of the
object files ( *.o), library files ( *.lib), and the absolute files ( *.abs).
NOTE
Do not mix object-file formats. Both the HIWARE and the
ELF/DWARF object files use the same filename extensions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
108 Freescale Semiconductor, Inc.
Chapter 3 Introduction
However, third-party tool vendors must support this object-file format explicitly. Note
that there is a lack of extensibility, a lack of debug information, and no C++ support. For
example, HIWARE Object-file Format does not support the full flexibility of Compiler
Type Management.
Using the HIWARE object-file format may also result in slower source or debug
information loading. In the HIWARE object-file format, the source position information
is provided as position information (offset in file), and not directly in a file, line, or
column format. The debugger must translate this HIWARE object-file source information
format into a file, line, or column format. This tends to slow down the source file or
debugging information loading process.
The ELF/DWARF object-file format originally comes from the UNIX world. This format
is very flexible and supports extensions.
Many chip vendors define this object-file format as the standard for tool vendors
supporting their devices. This standard allows inter-tool operability making it possible to
use the compiler from one tool vendor, and the linker from another. The developer has
the choice to select the best tools for the tool chain. In addition, other third parties (for
example, emulator vendors) need only support this object file to support a wide range of
tool vendors.
Object-file sizes are larger when compared with the HIWARE object-file format. This
object-file format also supports ANSI-C.
3.11.3 Tools
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 109
Object-File Formats
• Decoder
Use the same executable, decoder.exe, for both the HIWARE and the ELF/DWARF
object-file formats.
• Linker
Use the same executable, linker.exe, for both the HIWARE and the ELF/DWARF
object-file formats.
• Simulator or Debugger
The simulator and the debugger support both object-file formats.
You cannot mix HIWARE and ELF object files. You can mix ELF object files with
DWARF 1.1 and DWARF 2.0 debug information. However, the final generated
application contains no debug data.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
110 Freescale Semiconductor, Inc.
Chapter 4
Graphical User Interface
Graphical User Interface (GUI) provides a simple yet powerful user interface for the
CodeWarrior build tools. Following are the features of the CodeWarrior build tools GUI:
• An interactive mode for those who need an easy way to modify the tool settings
• A batch mode that allows the tools to interoperate with a command-line interface
(CLI) and make files
• Online Help
• Error Feedback
• Easy integration into other tools, for example, CodeWarrior IDE, CodeWright,
Microsoft Visual Studio, and WinEdit
This chapter describes the GUI and provides useful hints. Its major topics are:
• Launching Compiler
• Compiler Main Window
• Editor Settings Dialog Box
• Save Configuration Dialog Box
• Environment Configuration Dialog Box
• Standard Types Settings Dialog Box
• Option Settings Dialog Box
• Smart Control Dialog Box
• Message Settings Dialog Box
• About Dialog Box
• Specifying Input File
You can use either of the ways to launch the HC(S)08 Compiler:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 111
Launching Compiler
If you start the compiler with no options and no input files, the tool enters the interactive
mode and the compiler GUI is displayed. This is usually the case if you start the compiler
using the Windows Explorer or an Desktop or Programs menu icon.
The following code specifies an input line associated with a desktop icon for the HC(S)08
compiler:
chc08.exe -F2 a.c d.c
If you are using the command prompt to start the compiler and specify arguments, such
as options and/or input files, the compiler starts in the batch mode. In the batch mode, the
compiler does not open a window or does not display GUI. The taskbar displays the
progress of the compilation processes, such as processing the input.
The following code presents a command to run the HC(S)08 compiler and process two
source files, a.c and d.c, which appear as arguments:
C:\Freescale\CW MCU v10.x\MCU\prog>chc08.exe - F2 a.c d.c
The compiler redirects message output, stdout using the redirection operator, ` >'. The
redirection operation instructs the compiler to write the message output to a file. The
following code redirects command-line message output to a file, myoutput.o:
C:\Freescale\CW MCU v10.x\MCU\prog>chc08.exe - F2 a.c d.c > myoutput.o
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
112 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
The command line process returns after the compiling process starts. It does not wait
until the previous process has terminated. To start a tool and wait for termination , for
example, to synchronize successive operations, use the start command in the Windows®
2000, Windows XP, or Windows Vista™ operating systems, or use the /wait options
(refer to the Windows Help `help start'). Using start /wait pairs, you can write perfect
batch files. The following code starts a compilation process but waits for the termination
of the prior activities before beginning:
C:\Freescale\CW MCU v10.x\MCU\prog>start/wait chc08.exe -F2 a.c d.c
If you do not specify a filename while starting the Compiler, the CompilerMain
Window is empty on startup.
The Compiler window consists of a window title, a menu bar, a toolbar, a content area,
and a status bar.
When the Compiler starts, the Tip of the Day dialog box displaying the latest tips,
appears in the Compiler main window.
• The Next Tip button displays the next tip about the Compiler.
• To disable the Tip of the Day dialog box from opening automatically when the
application starts, clear the Show Tips on StartUp checkbox.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 113
Compiler Main Window
NOTE
This configuration entry is stored in the local project file.
• To enable automatic display of the Tip of the Day dialog box when the Compiler
starts, select Help > Tip of the Day . The Tip of the Day dialog box opens. Check
the Show Tips on StartUp checkbox.
• Click Close to close the Tip of the Day window.
The IDE enables/disables the Tip of the Day as per the option you selected.
This section covers the following topics:
• Window Title
• Content Area
• Toolbar
• Status Bar
• Compiler Menu Bar
• File Menu
• Compiler Menu
• View Menu
• Help Menu
The window title displays the Compiler name and the project name. If a project is not
loaded, the Compiler displays Default Configuration in the window title. An asterisk
( *) after the configuration name indicates that some settings have changed. The Compiler
adds an asterisk ( *) whenever an option, the editor configuration, or the window
appearance changes.
The content area displays the logging information about the compilation process. This
logging information consists of:
• the name of the file being compiled,
• the whole name, including full path specifications, of the files processed, such as C
source code files and all of their included header files
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
114 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 115
Compiler Main Window
4.2.3 Toolbar
The toolbar consists of an array of buttons and a content box, just above the content area.
Starting from left to right, these elements are:
• The three left-most buttons in the toolbar correspond to the New ,
LoadConfiguration , and Save Configuration entries of the File menu.
• The Help button opens on-line help window.
• The Context Help button, when clicked, has the cursor change its form and display a
question mark beside the pointer. Clicking an item calls the help file. Click on
menus, toolbar buttons, or the window area to get information specific to that item.
NOTE
You can also access context help by typing the key
shortcut, Shift-F1.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
116 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
• The next four buttons open the Options , Smart Slider , Standard Types , and
Messages dialog boxes. These dialog boxes are used to modify the compiler's
settings, such as language used, optimization levels, and size of various data types.
The use of the dialog boxes are discussed later in the chapter.
• The right-most button clears the content area (Output Window).
The status bar displays the current status of the compiler when it processes a file.When
the compiler is idle, the message area displays a brief description of function of the
button or menu entry when you place the cursor over an item on the toolbar. The
following figure shows the status bar of the compiler.
The following table lists the menus available in the Compiler menu bar.
Table 4-1. Menu Items in Menu Bar
Menu Item Description
File Menu Manage the Compiler's configuration files
Compiler Menu Set the Compiler's options
View Menu Customize the Compiler's window output
Help Menu Access the standard Windows Help menu
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 117
Compiler Main Window
The File menu is used to save or load Compiler configuration files. A Compiler
configuration file contains the following information:
• Compiler option settings specified in the settings panels
• Message Settings that specify which messages to display and which messages to treat
as error messages
• List of the last command lines executed and the current command line being
executed
• Window position information
• Tip of the Day settings, including the current entry and enabled/disabled status
Configuration files are text files which have the standard * .ini extension. You can define
as many configuration files as required for the project and can switch among the different
configuration files using the File > Load Configuration , File > Save Configuration
menu entries, or the corresponding toolbar buttons.
The following table lists the File menu options.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
118 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Use the Compiler menu to customize the Compiler. It allows you to set certain compiler
options graphically, such as the optimization level. The table below lists the Compiler
menu options.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 119
Compiler Main Window
Use the View menu to customize the Compiler window, such as display or hide the status
bar or toolbar, set the font used in the window, or clear the window's content area.The
table below lists the View Menu options.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
120 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Use the Help menu to activate or deactivate the Tip of the Day dialog box at application
startup. In addition, it provides access a standard Windows Help file and an About box.
The table below lists the Help menu options.
The Editor Settings dialog box has a main selection entry. Depending on the main type
of editor selected, the content below changes.
These are the main entries for the Editor configuration:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 121
Editor Settings Dialog Box
All tools and projects on one work station share the Global Editor option. The
mcutools.ini global initialization file stores the configuration in the [Editor] section. The
editor command line specifies some Modifiers.
All tools using the same project file share the Local Editor option. Modifying an entry of
the Global or Local configuration modifies the behavior of the other tools using the same
entry when these tools are restarted.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
122 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Selecting this editor option, as shown in the figure below, associates a separate editor for
error feedback with the application. The configured editor (that is, Global or Local) is not
used for error feedback.
In the Command Line text box, enter the command that starts the editor.
The format of the editor command depends on the syntax. Specify Modifiers in the editor
command line to refer to specific line numbers in the file. (Refer Modifiers.)
The format of the editor command depends upon the syntax that is used to start the editor.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 123
Editor Settings Dialog Box
4.3.3.1 Examples
For CodeWright V6 editor, use the following command line (with an adapted path to the
cw32.exe file):
C:\cw32.exe %f -g%l
For the WinEdit 32-bit version, use the following command line (with an adapted path to
the winedit.exe file):
C:\WinEdit32\WinEdit.exe %f /#:%l
Enter the Service Name , Topic Name , and the Client Command for the DDE
connection to the editor. The Topic Name and Client Command entries can have
modifiers for the filename, line number, and column number as explained in Modifiers.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
124 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
For Microsoft Developer Studio, use the settings in the following listing.
Listing: Microsoft Developer Studio Configuration
Service Name :
msdev
NOTE
The DDE application (for example, Microsoft Developer Studio
or UltraEdit) must be running, or DDE communications will
fail.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 125
Editor Settings Dialog Box
Select CodeWarrior (with COM) to use the CodeWarrior IDE as the editor. This
registers CodeWarrior IDE as the COM server by the installation script.
CAUTION
This panel supports use of the legacy CodeWarrior IDE. It is
not for use with the Eclipse IDE that hosts the CodeWarrior for
Microcontrollers V10.x.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
126 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
4.3.6 Modifiers
The configuration must contain modifiers that instruct the editor which file to open and at
which line.
• The %f modifier refers to the name of the file (including path) where the message is
detected.
• The %l modifier refers to the line number where the message is detected.
• The %c modifier refers to the column number where the message is detected.
NOTE
The %l modifier can only be used with an editor which is
started with a line number as a parameter, except when
working with WinEdit version 3.1 or lower or with
Notepad. When working with these editors, start the editor
with the filename as a parameter and then select the menu
entry Go to to jump on the line where the message has been
detected. In that case the editor command looks like: C:
\WINAPPS\WINEDIT\Winedit.EXE %f check the editor manual for
the command line definition for starting the editor.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 127
Save Configuration Dialog Box
Select the Save Configuration tab to access the Save Configuration dialog box. Specify
which portions of your configuration to save to the project file.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
128 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
• Environment Variables
Check this option to save the environment variable changes made in the
Environment configuration dialog box.
NOTE
By clearing specific option, only some parts of a
configuration file are written. For example, clear the
Options checkbox when the best options are found.
Subsequent future save commands no longer modify these
options.
• Save on Exit
The application saves the current configuration on exit. No save confirmation dialog
is displayed. If this option is not set, the application will not write the configuration
at exit, even if parts of the configuration have changed. No save confirmation
appears in either case when closing the application.
Most settings are stored in the configuration file only. The only exceptions are:
• The recently used configuration list.
• All settings in this dialog box.
NOTE
The tool configurations can (and in fact are intended
to) coexist in the same file as the project configuration
of UltraEdit-32. When the shell configures an editor,
the application reads this content out of the project file
( project.ini), if present. This filename is also
suggested (but not required) to be used by the tool.
Open the Environment Configuration dialog box to configure the environment. The
dialog box's content is read from the [ Environment Variables] section of the actual project
file.
The following listing shows the available environment variables.
Listing: Environment aariables
General Path: GENPATH
Object Path: OBJPATH
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 129
Standard Types Settings Dialog Box
Text Path: TEXTPATH
Absolute Path: ABSPATH
Header File Path: LIBPATH
Various Environment Variables: other variables not mentioned above.
NOTE
The variables are written to the project file only if you save the
configuration by either, select File > Save Configuration or
press CTRL+S. In addition, you can specify in the Save
Configuration as dialog box if the environment is written to
the project file or not.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
130 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Use the Standard Types Settings dialog box to define the size to associate with each
ANSI C standard type. You can also use the -T: Flexible Type Management compiler
option to configure ANSI-C standard type sizes.
NOTE
Not all formats may be available for a target. In addition, there
must be at least one type for each size. For example, it is invalid
to specify all types to a size of 32 bits. Also, the HIWARE
Format does not support a size greater than 8 bits for the char
type.
The following listing lists the rules that apply when you modify the size associated with
an ANSI-C standard type:
Listing: Size Relationships for the ANSI-C Standard Types.
sizeof(char) <= sizeof(short)
sizeof(short) <= sizeof(int)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 131
Option Settings Dialog Box
Use the Option Settings dialog box) to set or reset tool options. This panel also displays
the possible command line arguments used to invoke these options in the lowest pane.
The available options are arranged into different groups, with separate tabs for each
group. The content of the list box depends on the selected tab. The table below lists the
Option Settings selections.
NOTE
Not all of the option tabs may be available.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
132 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Checking the application option checkbox sets the option. To obtain more detailed
information about a specific option, click once on the option text to select the option and
press the F1 key or click Help .
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 133
Smart Control Dialog Box
NOTE
When you select options requiring additional parameters, you
can open an edit box or an additional sub-window where the
additional parameters are set.
Use the Smart Control dialog box to define the optimization level you want to apply
during compilation of the input file. Five sliders are available to adjust how the source
code is optimized, such as for execution speed or compact size. Refer to the table below
for option descriptions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
134 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
The first four sliders in this panel are directly linked. That is, moving one slider updates
the positions of the other three, according to the adjustment.
The command line automatically updates with the options set in accordance with the
settings of the different sliders.
Use the Message Settings dialog box to map messages to a different message class.
Some buttons in the panel may be disabled. (For example, if an option cannot be moved
to an Information message, the Move to: Information button is disabled.) The following
table describes the buttons available in this dialog box.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 135
Message Settings Dialog Box
A panel is available for each error message class. The content of the list box depends on
the selected panel. The following table lists the message group definitions.
Table 4-10. Message Group Definitions
Message Group Description
Disabled Lists all disabled messages. Messages displayed in the list
box will not be displayed by the tool.
Information Lists all information messages. Information messages
describe the actions taken by the tool.
Warning Lists all warning messages. When a warning message is
generated, input file processing continues.
Error Lists all error messages. When an error message is
generated, input file processing continues.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
136 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
Each message has its own prefix (for example, `C' for Compiler messages, `A' for
Assembler messages, `L' for Linker messages, `M' for Maker messages, `LM' for
Libmaker messages) followed by a 4- or 5-digit number. This number allows an easy
search for the message both in the manual or on-line help.
This section covers the following topics:
• Changing Class Associated with Message
• Retrieving Information about Error Message
Use the buttons located on the right hand side of the panel to configure your own
message mapping among the different message classes. Each button refers to a message
class. To change the class associated with a message, select the message in the list box
and then click the button associated with the class to which you want to move the
message.
To define a warning message as an error message:
1. Click the Warning panel to display the list of all warning messages in the list box.
2. Select the message you want to change in the list box.
3. Click Error to define this message as an error message.
NOTE
Messages cannot be moved to or from the fatal error class.
NOTE
The Move to buttons are active only when messages that
can be moved are selected. When you select a message
which cannot be moved to a specific group, the
corresponding Move to button for that group is disabled
(grayed).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 137
About Dialog Box
To save your changes to the message mappings, click OK to close the Message Settings
panel. Clicking Cancel discards your changes and closes the panel.
You can access information about each message displayed in the list box. Select the
message in the list box and then click Help or press the F1 key. An information box opens
which contains a more detailed description of the error message, as well as a small
example of code that may have generated the error message. If several messages are
selected, help information for the first is shown. When no message is selected, pressing
the F1 key or the Help button shows the help information for this panel.
Open the About dialog box by selecting Help > About . The About window contains
information regarding your tool. The current directory and the versions of subparts of the
application are also shown. The main version displays separately at the top of the
window.
Use the Extended Information button to get license information about all software
components in the same directory as that of the executable file.
Click OK to close this dialog box.
NOTE
During processing, the Extended Information button cannot
request information regarding software components. This
information displays only if the tool is inactive.
There are different ways to specify the input file. During compilation, the configuration
established in the different dialog boxes sets the options. Before compiling a file, make
sure you have associated a working directory with your editor.
The topics covered here are as follows:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
138 Freescale Semiconductor, Inc.
Chapter 4 Graphical User Interface
• Methods of Compilation
• Message/Error Feedback
• Use Information from Compiler Window
• Working with User-Defined Editor
There are several different methods for compiling input files. The following table lists
different compilation methods.
Table 4-11. Compilation Methods
Method Description
Use the Command Line in the Toolbar to Compile Use the command line to compile a new file or to open a
previously compiled file.
Compile a New File Enter a new filename and additional compiler options in the
command line. The specified file compiles as soon as you
click Compile in the toolbar or press the Enter key.
Compile an Existing File Display the previously executed command using the arrow on
the right side of the command line. Select a command by
clicking on it. It appears in the command line. The specified
file compiles as soon as you click Compile in the toolbar.
Use File > Compile When you select File > Compile , a standard open file dialog
appears. Use this to browse to the file you want to compile.
The selected file compiles as soon as you click Open.
Use Drag and Drop Drag a filename from an external application (for example the
File Manager/Explorer) and drop it into the compiler window.
The dropped file compiles as soon as you release the mouse
button. Files with the *.ini extension load immediately as
configuration files and do not compile. Use one of the other
methods to compile a C file with the *.c extension.
Check for errors or warnings after compilation by using one of several methods. The
following listing lists the format of the error messages.
Listing: Format of an Error Message
>> <FileName>, line <line number>, col <column number>, pos <absolute
position in file>
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 139
Specifying Input File
WHILE (TRUE) {
Refer also the -WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive
Mode and -WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch
Mode compiler options for different message formats.
Once a file compiles, the compiler window content area displays the list of all detected
errors or warnings.
Use your editor to open the source file and correct the errors.
Configure the edito r you want to use for message/error feedback in the Configuration
panel before you begin the compile process. Once a file compiles, double-click on an
error message. The selected editor automatically activates and points to the line
containing the error.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
140 Freescale Semiconductor, Inc.
Chapter 5
Environment
This chapter describes all the environment variables that the compiler uses. Some
environment variables are also used by other tools. Consult the tool manuals for specific
variable use information.
The major sections in this chapter are:
Use environment variables to set environment parameters. Specify your environment
using one of the following methods:
• (Recommended Method) The current project file with the [ Environment
Configuration ] panel. Specify this file on tool startup using the -Prod option ( -Prod:
Specify Project File at Startup).
• An optional default.env file in the current directory. CodeWarrior IDE tools support
backward compatibility for this file. Specify the filename using the ENVIRONMENT
variable ( ENVIRONMENT: Environment File Specification). Using the default.env
file is not recommended.
• Setting environment variables on system level (DOS level). This method is not
recommended.
Use the following syntax for setting an environment variable:
Parameter: <KeyName>=<ParamDef>
NOTE
Normally no white space is allowed in the definition of an
environment variable.
Listing: Setting the GENPATH Environment Variable
GENPATH=C:\INSTALL\LIB;D:\PROJECTS\TESTS;/usr/local/lib;
/home/me/my_project
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 141
Current Directory
• Putting the definitions into the actual project file in the [Environment Variables]
section.
• Putting the definitions in the default.env file in the default directory.
NOTE
The maximum length of environment variable entries in the
default.env file is 4096 characters.
• Putting the definitions in a file given by the value of the ENVIRONMENT system
environment variable.
NOTE
Set the default directory mentioned above using the
DEFAULTDIR system environment variable ( DEFAULTDIR:
Default Current Directory).
When looking for an environment variable, all programs first search the system
environment, then the default.env file, and finally the global environment file defined by
ENVIRONMENT. If no definition is found, the tools assume a default value.
NOTE
You can also change the environment using the -Env option ( -
Env: Set Environment Variable).
NOTE
Make sure that there are no spaces at the end of any
environment variable declaration.
• Current Directory
• Environment Macros
• Global Initialization File (mcutools.ini)
• Local Configuration File
• Paths
• Line Continuation
• Environment Variable Details
The current directory is the base search directory in which the tool begins a search for
files (for example, for the default.env file). Either the operating system or the program
determines the current directory of a tool.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
142 Freescale Semiconductor, Inc.
Chapter 5 Environment
• For UNIX operating systems, the current directory is the directory in which the
binary file is located when launched.
• For Microsoft Windows-based operating systems, the current directory is defined as
follows:
• If the tool is launched using the File Manager or Explorer, the current directory
is the location of the launched executable.
• If the tool is launched using an Icon on the Desktop, the current directory is the
one specified and associated with the Icon.
• If the tool is launched by another launching tool with its own current directory
specification (for example, an editor), the current directory is the one specified
by the launching tool (for example, current directory definition).
• For the tools, the location of the local project file defines the current directory.
Changing the current project file also changes the current directory if the new project
file is in a different directory.
NOTE
Browsing for a C file does not change the current directory.
You can use macros in your environment settings, as shown in the following listing.
Listing: Using Macros for Setting Environment Variables
MyVAR=C:\test
TEXTPATH=$(MyVAR)\txt
OBJPATH=${MyVAR}\obj
In the example above, TEXTPATH expands to C:\test\txt and OBJPATH expands to C:\test\obj.
You can use $() or ${}. However, you must define the referenced variable.
You may also use special variables when using macros. Always surround special
variables with brackets {}. Special variables are case-sensitive. In addition, the variable
content contains the directory separator ` \'. The special variables are:
• { Compiler}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 143
Global Initialization File (mcutools.ini)
Path of the executable one directory level up, if the executable file is C:\Freescale\prog
\linker.exe, and the variable is C:\Freescale\.
• { Project}
Path of the current project file. Use this special variable if the current project file is C:
\demo\project.ini, and the variable contains C:\demo\.
• { System}
Path of your Windows system installation, for example, C:\WINNT\.
All tools store some global data in the mcutools.ini file. The tool first searches for
mcutools.ini in the tool directory (path of the executable). If mcutools.ini is not found in
the tool directory, the tool looks for mcutools.ini in the Microsoft Windows installation
directory (for example, C:\WINDOWS).
Listing: Typical Global Initialization File Locations
C:\WINDOWS\mcutools.ini
D:\INSTALL\prog\mcutools.ini
If you start the tool in the D:\INSTALL\prog directory, the tool uses the project file located in
the same directory as the tool ( D:\INSTALL\prog\mcutools.ini).
If you start the tool some other way, the tool uses the project file in the Windows
directory ( C:\WINDOWS\mcutools.ini).
Global Configuration File Entries documents the sections and entries you can include in
mcutools.ini.
The configuration file stores all configuration properties. Different applications use the
same configuration file.
The shell uses the project.ini configuration file in the current directory. When the shell
uses the same file as the compiler, the shell writes and maintains the Editor Configuration
used by the compiler. Apart from this, the compiler can use any filename for the project
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
144 Freescale Semiconductor, Inc.
Chapter 5 Environment
file. The configuration file has the same format as the windows *.ini files. The compiler
stores its own entries with the same section name as those in the global mcutools.ini file.
The compiler backend is encoded into the section name, so that a different compiler
backend can use the same file without any overlapping. Different versions of the same
compiler use the same entries. When you must store options available in only one
compiler version in the configuration file, you must maintain a separate configuration file
for each different compiler version. If no incompatible options are enabled, you may use
the same file for both compiler versions.
Be aware of these rules when changing the directory or making changes to the
configuration file:
• The current directory is always the directory in which the configuration file is
located.
• Loading a configuration file in a different directory changes the current directory.
• Changing the current directory reloads the entire default.env file.
• Loading or storing a configuration file reloads the options in the environment
variable COMPOPTIONS and adds the options to the project options. This becomes an
issue when different default.env files, containing incompatible options in the
COMPOPTIONS variable, exist in different directories.
• Loading a project using the default.env adds the options in COMPOPTIONS to the
configuration file.
• Storing this configuration in a different directory which contains a default.env
with incompatible options adds the options to default.env. The compiler remarks
the inconsistency.
• Use the option settings dialog box to remove the option from the configuration
file, or remove the option from the default.env with the shell or a text editor.
At startup, use one of two methods to load a configuration:
• Use the -Prod: Specify Project File at Startup command line option
• Use the project.ini file in the current directory.
Using the -Prod option uses the directory which contains the project file as the current
directory. Specifying the directory when using the -Prod option loads the project.ini file
in this directory.
Local Configuration File Entries documents the sections and entries you can include in a
project.ini file.
5.5 Paths
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 145
Line Continuation
A path list is a list of directory names separated by semicolons. Declare path names using
the following Extended Backus-Naur Form (EBNF) syntax . Most environment variables
contain path lists to direct the compiler to the file location as shown in the Listing:
Environment Variable Path List with Four Possible Paths.
Listing: EBNF Path Syntax
PathList = DirSpec {; DirSpec}.
DirSpec = [*] DirectoryName.
NOTE
This procedure uses some DOS environment variables (like
GENPATH or LIBPATH).
If you work with the CodeWright editor, you can set the environment using a
<project>.pjt file in your project directory. This enables you to have different projects in
different directories, each with its own environment.
NOTE
When using WinEdit, do not set the system environment
variable DEFAULTDIR: Default Current Directory. If you do
so, and this variable does not contain the project directory given
in WinEdit's project configuration, files might not be placed
where you expect them to be.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
146 Freescale Semiconductor, Inc.
Chapter 5 Environment
However, this feature may not work well used together with paths. For example, the
following code is a valid use of the continuation character:
GENPATH=.\
TEXTFILE=.\txt
To avoid such problems, use a semicolon ( ;) at the end of a path if using a continuation
character ( \) at the end of the line, as shown in the following listing.
Listing: Using a Semicolon to Allow a Multiple Line Environment Variable
GENPATH=.\;TEXTFILE=.\txt
The remainder of this chapter describes each of the possible environment variables. The
following table lists these description topics in their order of appearance for each
environment variable.
Table 5-1. Environment Variables-Documentation Topics
Topic Description
Tools Lists tools that use this variable.
Synonym Lists any synonyms that exist for the environment variable.
Synonyms may be used for older releases of the Compiler
and will be removed in the future. A synonym has lower
precedence than the environment variable.
Syntax Specifies the syntax of the option in EBNF format.
Arguments Describes and lists optional and required arguments for the
variable.
Default Shows the default setting for the variable or none.
Description Provides a detailed description of the option and how to use
it.
Example Gives an example of usage, and the effects of the variable
when possible. The example shows an entry in the
default.env for a PC.
See also Names related sections.
Tools
Compiler
Synonym
HICOMPOPTIONS
Syntax
COMPOPTIONS={<option>}
Arguments
<option>: Compiler command-line option
Default
None
Description
Set this environment variable to instruct the Compiler to append its contents to the
command line each time a file is compiled. Use this environment variable to specify
global options that should always be set. This frees you from having to specify them for
every compilation.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
148 Freescale Semiconductor, Inc.
Chapter 5 Environment
NOTE
We do not recommend using this environment variable if the
Compiler used is version 5.x, because it adds the specified
options to the options stored in the project.ini file.
Listing: Setting Default Values for Environment Variables (Not Recommended)
COMPOPTIONS=-W2 -Wpd
See also
Compiler Options
Tools
Compiler, Assembler, Linker, or Librarian
Synonym
None
Syntax
COPYRIGHT=<copyright>
Arguments
< copyright>: copyright entry
Default
None
Description
Each object file contains an entry for a copyright string. The decode retrieves this
information from the object files.
Example
COPYRIGHT=Copyright by Freescale
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 149
Environment Variable Details
environmental variables :
• USERNAME: User Name in Object File
• INCLUDETIME: Creation Time in Object File
Tools
Compiler, Assembler, Linker, Decoder, Debugger, Librarian, Maker, or Burner
Synonym
None
Syntax
DEFAULTDIR=<directory>
Arguments
< directory>: Directory to be the default current directory
Default
None
Description
Specifies the default directory for all tools. All the tools indicated above take the
specified directory as their current directory instead of the directory defined by the
operating system or launching tool.
NOTE
This is an environment variable on a system level (global
environment variable). It cannot be specified in a default
environment file ( default.env).
Specify the default directory for all tools in the CodeWarrior suite:
DEFAULTDIR=C:\INSTALL\PROJECT
See also
Current Directory
Global Initialization File (mcutools.ini)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
150 Freescale Semiconductor, Inc.
Chapter 5 Environment
Tools
Compiler, Linker, Decoder, Debugger, Librarian, Maker, or Burner
Synonym
HIENVIRONMENT
Syntax
ENVIRONMENT=<file>
Arguments
<file>: filename with path specification, without spaces
Default
None
Description
This variable is specified on a system level. The application looks in the current directory
for an environment file named default.env. Use ENVIRONMENT (for example, set in the
autoexec.bat (DOS) or *.cshrc (UNIX)), to specify a different filename.
NOTE
This system level (global) environment variable cannot be
specified in a default environment file ( default.env).
Example
ENVIRONMENT=\Freescale\prog\global.env
Tools
Compiler, Assembler, Linker, or Burner
Synonym
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 151
Environment Variable Details
Syntax
ERRORFILE=<filename>
Arguments
<filename>: filename with possible format specifiers
Description
The ERRORFILE environment variable specifies the name for the error file.
Possible format specifiers are:
%n: Substitute with the filename, without the path.
%p: Substitute with the path of the source file.
%f: Substitute with the full filename, i.e., with the path and name (the same as %p%n).
A notification box displays in the event of an improper error filename.
Examples
ERRORFILE=MyErrors.err
Writes all errors into the MyErrors.err file in the current directory.
ERRORFILE=\tmp\errors
Writes all errors into the errors file in the \tmp directory.
ERRORFILE=%f.err
Writes all errors into a file with the same name as the source file, but with the *.err
extension, into the same directory as the source file. Using this format, compiling a file
named test.c in the sources directory ( \sources\test.c) generates an error list file named
test.err in the sources directory ( \sources\test.err).
ERRORFILE=\dir1\%n.err
Writes all errors into a file in the dir1 directory. Compiling a source file named test.c
generates an error list file named \dir1\test.err.
ERRORFILE=%p\errors.txt
Writes all errors into a text file in the same directory as the compiled file. Compiling a
source file named \dir1\dir2\test.c generates an error list file with the name
\dir1\dir2\errors.txt.
Unless you set the ERRORFILE environment variable, the compiler writes errors to the EDOUT
file in the current directory.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
152 Freescale Semiconductor, Inc.
Chapter 5 Environment
Tools
Compiler, Linker, Decoder, Debugger, or Burner
Synonym
HIPATH
Syntax
GENPATH={<path>}
Arguments
<path>: Paths separated by semicolons, without spaces
Default
Current directory
Description
Including a header file with double quotes makes the Compiler search first in the current
directory, then in the directories listed by GENPATH, and finally in the directories listed by
LIBRARYPATH.
NOTE
If a directory specification in this environment variable starts
with an asterisk ( * ), the compiler searches the whole directory
tree recursively depth first, i.e., all subdirectories and their
subdirectories and so on are searched. Search order of the
subdirectories is indeterminate within one level in the tree.
Example
GENPATH=\sources\include;..\..\headers;\usr\local\lib
See also
LIBRARYPATH: `include <File>' Path environment variable
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 153
Environment Variable Details
Tools
Compiler, Assembler, Linker, or Librarian
Synonym
None
Syntax
INCLUDETIME=(ON|OFF)
Arguments
ON: Include time information into object file
OFF: Do not include time information into object file
Default
ON
Description
Each object file contains a time stamp indicating the creation time and date as strings.
When a tool creates a new file, the file gets a new time stamp entry.
This behavior may be undesired if you must perform a binary file compare for Software
Quality Assurance reasons. Even if the information in two object files is the same, the
files do not match exactly as the time stamps are not identical. To avoid such problems,
set this variable to OFF. When set to OFF, the time-stamp strings in the object file for date
and time are "none" in the object file.
Retrieve the time stamp from the object files using the decoder.
Example
INCLUDETIME=OFF
See also
• COPYRIGHT: Copyright Entry in Object File
• USERNAME: User Name in Object File
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
154 Freescale Semiconductor, Inc.
Chapter 5 Environment
Tools
Compiler, Burner, Linker, Decoder
Synonym
LIBPATH
Syntax
LIBRARYPATH={<path>}
Arguments
< path>: Paths separated by semicolons, without spaces
Default
Current directory
Description
Including a header file with double quotes makes the Compiler search first in the current
directory, then in the directories given by GENPATH, and finally in the directories given by
LIBRARYPATH (see GENPATH: #include "File" Path LIBRARYPATH: `include <File>'
Path).
NOTE
If a directory specification in this environment variable starts
with an asterisk ( * ), the compiler searches the whole directory
tree recursively depth first, i.e., all subdirectories and their
subdirectories and so on are searched. Search order of the
subdirectories is indeterminate within one level in the tree.
Example
LIBRARYPATH=\sources\include;.\.\headers;\usr\local\lib
See also
GENPATH: #include "File" Path environment variable
USELIBPATH: Using LIBPATH Environment Variable
Input Files
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 155
Environment Variable Details
Tools
Compiler, Linker, Decoder, Debugger, Burner
Synonym
None
Syntax
OBJPATH=<path>
Default
Current directory
Arguments
<path>: Path without spaces
Description
The Compiler places generated object files into the directory specified by OBJPATH. If this
environment variable is empty or does not exist, the compiler places the object file in the
same directory as the source code.
If the Compiler tries to generate an object file into the directory specified by this
environment variable but fails (for example, because the file is locked), the Compiler
issues an error message.
If a tool looks for an object file, it first checks for an object file specified by this
environment variable, then in GENPATH, and finally in HIPATH (refer GENPATH: #include
"File" Path, HIPATH).
Example
OBJPATH=\sources\obj
See also
Output Files
Tools
Compiler, Linker, Decoder
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
156 Freescale Semiconductor, Inc.
Chapter 5 Environment
Synonym
None
Syntax
TEXTPATH=<path>
Arguments
<path>: Path without spaces
Default
Current directory
Description
The Compiler places generated text files into the directory specified by TEXTPATH. If this
environment variable is empty or does not exist, the compiler stores the text file into the
current directory.
Example
TEXTPATH=\sources\txt
See also
Output Files
Compiler options :
• -Li: List of Included Files to ".inc" File
• -Lm: List of Included Files in Make Format
• -Lo: Append Object File Name to List (enter [<files>])
Tools
Compiler, Assembler, Linker, Debugger, Librarian
Synonym
None
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 157
Environment Variable Details
TMP=<directory>
Arguments
<directory>: Directory to be used for temporary files
Default
None
Description
The compiler uses the ANSI function, tmpnam(), to create temporary files. This library
function stores the temporary files in the directory specified by the TMP environment
variable. If the variable is empty or does not exist, the compiler uses the current directory.
Check this variable if you get the error message "Cannot create temporary file".
NOTE
This is a system level (global) environment variable. It cannot
be specified in a default environment file ( default.env).
Example
TMP=C:\TEMP
See also
Current Directory
Tools
Compiler, Linker, or Debugger
Synonym
None
Syntax
USELIBPATH=(OFF|ON|NO|YES)
Arguments
ON, YES: The Compiler uses the environment variable LIBRARYPATH to look for system header
files <*.h>.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
158 Freescale Semiconductor, Inc.
Chapter 5 Environment
NO, OFF: The Compiler does not use the environment variable LIBRARYPATH.
Default
ON
Description
This environment variable allows a flexible usage of the LIBRARYPATH environment variable
as the LIBRARYPATH variable might be used by other software (for example, version
management PVCS).
Example
USELIBPATH=ON
See also
LIBRARYPATH: `include <File>' Path environment variable
Tools
Compiler, Assembler, Linker, Librarian
Synonym
None
Syntax
USERNAME=<user>
Arguments
<user>: Name of user
Default
None
Description
Each object file contains an entry identifying the creator the object file. Retrieve this
information from the object files by using the decoder.
Example
USERNAME=The Master
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 159
Environment Variable Details
See also
environment variables :
• COPYRIGHT: Copyright Entry in Object File
• INCLUDETIME: Creation Time in Object File
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
160 Freescale Semiconductor, Inc.
Chapter 6
Files
This chapter describes the input and output files that the Compiler uses, and file
processing. It has the following sections:
• Input Files
• Output Files
• File Processing
The compiler's frontend takes any file as input. It does not require the filename to have a
special extension. However, it is suggested that all your source filenames use the *.c
extension and that all header files use the *.h extension. The Compiler searches for so
urce files first in theCurrent Directory and then in the GENPATH directory (refer
GENPATH: #include "File" Path).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 161
Output Files
The search for include files is governed by two environment variables: GENPATH: #include
"File" Path and LIBRARYPATH: `include <File>' Path. Include files are included using
double quotes or angle brackets.
When you use double quotes to include files ( #include "test.h"), the compiler searches
first in the current directory, then in the directory specified by the -I option (refer -I:
Include File Path), then in the directories given in the GENPATH environment variable (refer
GENPATH: #include "File" Path), and finally in those listed in the LIBPATH or LIBRARYPATH:
` include <File>' Path environment variable. Set the current directory using the IDE, the
Program Manager, or the DEFAULTDIR environment variable (refer DEFAULTDIR: Default
Current Directory).
When you use angle brackets to include files ( #include <stdio.h>), the compiler searches
first in the current directory, then in the directory specified by the -I option, and then in
the directories given in LIBPATH or LIBRARYPATH. Set the current directory using the IDE, the
Program Manager, or the DEFAULTDIR environment variable.
After successful compilation, the Compiler generates an object file containing the target
code as well as some debugging information. The compiler writes this file to the
directory listed in the OBJPATH environment variable (refer OBJPATH: Object File Path). If
that variable contains more than one path, the compiler writes the object file in the first
listed directory. If this variable is not set, the compiler writes the object file in the same
directory as the source code file. Object files always get the extension *.o.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
162 Freescale Semiconductor, Inc.
Chapter 6 Files
If the Compiler detects any errors, it creates an error listing file named err.txt instead of
an object file. The compiler generates this file in the same directory as the source code
file (refer ERRORFILE: Error Filename Specification).
The open Compiler window displays the full path of all header files read. After
successful compilation the window also displays the number of code bytes generated and
the number of global objects written to the object file.
If you start the Compiler from an IDE (with '%f' given on the command line) or
CodeWright (with '%b%e' given on the command line), the Compiler does not produce the
err.txt error file. Instead, the Compiler writes the error messages in a special format in a
file called EDOUT using the default Microsoft format. You may use the CodeWrights' Find
Next Error command to display both the error positions and the error messages.
If you set ERRORFILE, the Compiler creates a message file named as specified in this
environment variable.
If you do not set ERRORFILE, the Compiler generates a default file named err.txt in the
current directory.
If you set ERRORFILE, the Compiler creates a message file named as specified in this
environment variable.
If you do not set ERRORFILE, the Compiler generates a default file named EDOUT in the
current directory.
The following figure shows how file processing occurs with the Compiler:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 163
File Processing
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
164 Freescale Semiconductor, Inc.
Chapter 7
Compiler Options
This chapter describes the arguments that modify how the compiler reads source files,
processes them, and outputs object code. It consists of the following major sections:
• Option Recommendations : Suggests some compiler settings that produce efficient
code or make it easier to debug.
• Compiler Option Details : Describes the layout and format of the compiler
command-line options covered in the remainder of the chapter.
The Compiler provides a number of options that control its operation. Options consist of
a minus sign or dash ( - ) prefix, followed by one or more letters or digits. The Compiler
treats anything lacking the prefix as a source file to compile. You can specify Compiler
options on the command line or in the COMPOPTIONS variable. Specify each Compiler option
only once per compilation.
Command line options are not case-sensitive, for example, "- Li" is the same as "-li".
NOTE
It is not possible to combine options from different groups. For
example, "- Cc - Li" cannot be abbreviated by the terms "- Cci"
or "- CcLi".
You can also use the GUI to set the Compiler options, as shown in the following figure.
NOTE
If you use the GUI to set the Compiler options, do not use the
COMPOPTIONS environment variable. The Compiler stores the
options in the project.ini file, not in the default.env file.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 165
Option Recommendations
Use the Message Settings dialog box, shown in the following figure, to move messages
( -Wmsg options).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
166 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Depending on the compiled source code files, each Compiler option has advantages or
disadvantages. We recommend the following:
• When using the HIWARE Object-file Format and the -Cc: Allocate Const Objects
into ROM compiler option, specify ROM_VAR in the Linker parameter file.
• -Wpd: Error for Implicit Parameter Declaration
• -Or: Register Optimization whenever available or possible
The default configuration enables most options in the Compiler. If the default options
cause problems in your code (for example, they make the code hard to debug), disable the
options (these options usually have the -On prefix). Candidates for such options are
peephole options.
Some options produce more code for some functions than for others (for example, -Oi:
Inlining or -Cu: Loop Unrolling). On the other hand, inlining functions, while producing
more code, also make it execute faster because there's not overhead in performing a
function call. Vary your option choices to find the best result for each function.
To get the best results for each function, compile each module with the -OdocF option
(refer -OdocF: Dynamic Option Configuration for Functions). An example of this option
is -OdocF="-Or".
For compilers with the ICG optimization engine, the following option combination
provides the best results:
-Ona -OdocF="-Onca|-One|-Or"
This section describes the option groups in detail, plus the layout and format of each
option. This section covers the following topics:
• Option Groups
• Option Scopes
• Option Detail Description
• LANGUAGE
• OPTIMIZATIONS
• CODE GENERATION
• OUTPUT
• INPUT
• MESSAGES
• VARIOUS
• STARTUP
NOTE
The option in the Various group do not appear in the HC08
Compiler Option Settings dialog box, however the
options are displayed as a part of the compiler option list
when using the -H option.
Each group corresponds to the property sheets of the graphical option settings.
NOTE
Not all command line options are accessible through the
property sheets as they have a special graphical setting (for
example, the option to set the type sizes).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
168 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
The available options are arranged into different groups. Each group has its own sheet.
The content of the list box depends on the selected sheets.
The remainder of this section describes the Compiler options in alphabetical order. The
following table describes the information available for each option.
NOTE
Not all tools options have been defined for this release. All
descriptions will be available in an upcoming release.
Table 7-3. Compiler Option-Documentation Topics
Topic Description
Group Specifies HOST, LANGUAGE, OPTIMIZATIONS, OUTPUT,
INPUT, CODE GENERATION, MESSAGES or VARIOUS.
Scope Specifies Application, Compilation Unit, Function or None
Syntax Specifies the syntax of the option in an EBNF format
Arguments Describes and lists optional and required arguments for the
option
Default Shows the default setting for the option
Defines Lists defines related to the compiler option
Pragma Lists pragmas related to the compiler option
Description Provides a detailed description of the option and how to use it
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 169
Compiler Option Details
You can use special modifiers with some options. However, some modifiers may not
make sense for all options. This section describes those modifiers.
The following table lists the supported modifiers:
Table 7-4. Compiler Option Modifiers
Modifier Description
%p Path including file separator
%N Filename in strict 8.3 format
%n Filename without extension
%E Extension in strict 8.3 format
%e Extension
%f Path + filename without extension
%" A double quote (") if the filename, the path or the extension
contains a space
%' A single quote (`) if the filename, the path or the extension
contains a space
%(ENV) Use the contents of an environment variable
%% Generates a single `%'
7.2.3.1.1 Example
For the following examples, the actual base filename for the modifiers is: C:\Freescale\my
demo\TheWholeThing.myExt.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
170 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Using the %N modifier results in a filename in 8.3 format (that is, the name with only eight
characters):
TheWhole
The %Emodifier gives the extension in 8.3 format (that is, the extension with only three
characters):
myE
When the path contains a space, we recommend using %" or %'. Thus, %"%f%" gives (using
double quotes):
"C:\Freescale\my demo\TheWholeThing"
The modifier %(envVariable) uses an environment variable. The Compiler ignores a file
separator following %(envVariable) if the environment variable is empty or non-existent. In
other words, if you set TEXTPATH to:
TEXTPATH=C:\Freescale\txt,
with:
C:\Freescale\txt\myfile.txt
with:
myfile.txt
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 171
Compiler Option Details
The following table lists the command-line options for the HCS08 compiler:
Table 7-5. Compiler Command-line Options
-!: Filenames are clipped to DOS Length
-AddIncl: Additional Include File
-Ansi: Strict ANSI
-ArgFile: Specify a file from which additional command line options will be read
-Asr: It is Assumed that HLI Code Saves Written Registers
-BfaB: Bitfield Byte Allocation
-BfaGapLimitBits: Bitfield Gap Limit
-BfaTSR: Bitfield Type Size Reduction
-C++ (-C++f, -C++e, -C++c): C++ Support
-Cc: Allocate Const Objects into ROM
-Ccx: Cosmic Compatibility Mode for Space Modifiers and Interrupt Handlers
-Ci: Bigraph and Trigraph Support
-Cn[={Vf|Tpl|Ptm...}]: Disable compactC++ features
-Cni: No Integral Promotion on Characters
-Cppc: C++ Comments in ANSI-C
-Cq: Propagate const and volatile Qualifiers for Structs
-C[s08|08]: Generate Code for Specific HC08 Families
-CswMaxLF: Maximum Load Factor for Switch Tables
-CswMinLB: Minimum Number of Labels for Switch Tables
-CswMinLF: Minimum Load Factor for Switch Tables
-CswMinSLB: Minimum Number of Labels for Switch Search Tables
-Cu: Loop Unrolling
-Cx: Switch Off Code Generation
-D: Macro Definition
-Ec: Conversion from 'const T*' to 'T*'
-Eencrypt: Encrypt Files
-Ekey: Encryption Key
-Env: Set Environment Variable
-F (-Fh, -F1, -F1o, -F2, -F2o,-F6, or -F7): Object-File Format
-Fd: Double is IEEE32
-H: Short Help
-I: Include File Path
-La: Generate Assembler Include File
-Lasm: Generate Listing File
-Lasmc: Configure Listing File
-Ldf: Log Predefined Defines to File
-Li: List of Included Files to ".inc" File
-Lic: License Information
-LicA: License Information about Every Feature in Directory
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
172 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 173
Compiler Option Details
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
174 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
INPUT
Scope
Compilation Unit
Syntax
-!
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Use this option, called cut, when compiling files copied from an MS-DOS file system.
Filenames are clipped to eight characters ( DOS length). The cut option truncates the
filename in the following include directive:
Listing: Example of the Cut Option (-!)
#include "mylongfilename.h"
to:
#include "mylongfi.h"
Group
INPUT
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 175
Compiler Option Details
Compilation Unit
Syntax
-AddIncl"<fileName>"
Arguments
<fileName>: name of file to include
Default
None
Defines
None
Pragmas
None
Description
This option includes the specified file at the beginning of the compilation unit. It has the
same effect as writing the file at the beginning of the compilation unit using double
quotes (".."):
Refer the following listing for the -AddIncl compiler option syntax to include the above
header file.
Listing: Syntax Example for Including a Header File
-AddIncl"my headerfile.h"
See also
-I: Include File Path compiler option
Group
LANGUAGE
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
176 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Function
Syntax
-Ansi
Arguments
None
Default
None
Defines
__STDC__
Pragmas
None
Description
The -Ansi option forces the Compiler to follow strict ANSI C language conversions.
When you specify -Ansi, the Compiler refuses all non-ANSI-compliant keywords (for
example, __asm, __far and __near), and generates an error.
The ANSI-C compiler also does not allow C++ style comments (those started with //).
To allow C++ comments, even with -Ansi set, set the -Cppc: C++ Comments in ANSI-C
compiler option.
The asm keyword is also not allowed when -Ansi is set. To use inline assembly, even with
-Ansi set, use __asm instead of asm.
The Compiler defines __STDC__ as 1 if this option is set, or as 0 if this option is not set.
Group
HOST
Scope
Function
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 177
Compiler Option Details
Syntax
-ArgFile<filename>
Arguments
<filename>: Specify the file containing the options to be passed in the command line.
Description
The options present in the file are appended to existing command line options.
Example
Considering that a file named option.txt is used and that it contains the "-Mt" option then
chc08.exe -ArgFileoption.txt command line will be equivalent to chc08.exe -Mt.
Group
CODE GENERATION
Scope
Function
Syntax
-Asr
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
178 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
With this option set, the compiler assumes that registers touched in HLI are saved or
restored in the HLI code as well. If this option is not set, the compiler saves and restores
the registers as needed.
Listing: Sample Source Code for the Two Following Examples
void bar(char);
char PORT;
void myfun(void) {
PORT = 4;
asm {
lda #4
sta PORT
bar(4);
4: PORT = 4;
0000 a604 LDA #4
5: __asm {
6: lda #4
7: sta PORT
8: }
9: bar(4);
With the -Asr option set (as shown in the following listing), the compiler assumes that the
A register is the same as before the __asm block. However, in our example we do NOT
save or restore the A register, so the compiler generates incorrect code.
Listing: Code Sample With the -Asr Option
4: PORT = 4;
0000 a604 LDA #4
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 179
Compiler Option Details
5: __asm {
6: lda #4
7: sta PORT
8: }
9: bar(4);
Group
CODE GENERATION
Scope
Function
Syntax
-BfaB(MS|LS)
Arguments
MS: Most significant bit in byte first (left to right)
LS: Least significant bit in byte first (right to left)
Default
HC08: -BfaBLS
Defines
__BITFIELD_MSWORD_FIRST__
__BITFIELD_LSWORD_FIRST__
__BITFIELD_MSBYTE_FIRST__
__BITFIELD_LSBYTE_FIRST__
__BITFIELD_MSBIT_FIRST__
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
180 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
__BITFIELD_LSBIT_FIRST__
Pragmas
None
Description
Normally, bit allocation in byte bitfields proceeds from the least significant bit to the
most significant bit. This produces less code overhead in the case of partially-allocated
byte bitfields.
Example
The following listing uses the default condition and uses the three least significant bits.
Listing: Changing the Allocation Order Example
struct {unsigned char b: 3; } B; // the default is using the 3 least significant bits
This allows a mask operation without any shift to access the bitfield.
To change this allocation order, use the -BfaBMS or -BfaBLS options shown in the following
listing.
Listing: Changing the Allocation Order Example
struct {
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
} myBitfield;
7 0
--------------------
|b1|b2|b3|b4|b5|####| (-BfaBMS)
--------------------
7 0
--------------------
|####|b5|b4|b3|b2|b1| (-BfaBLS)
--------------------
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 181
Compiler Option Details
Bitfield Allocation
Group
CODE GENERATION
Scope
Function
Syntax
-BfaGapLimitBits<number>
Arguments
<number>:positive number, there should be less than <number> bits in the gap (that is, at
most <number>-1 bits)
Default
1
Defines
None
Pragmas
None
Description
The bitfield allocation tries to avoid crossing a byte boundary whenever possible. To
achieve optimized accesses, the compiler may insert some padding or gap bits to reach
this. This option enables you to affect the maximum number of gap bits allowed.
Example
In the example shown in the listing below, assume that you have specified a 3-bit
maximum gap, that is, -BfaGapLimitBits3.
Listing: Bitfield Allocation
struct {
unsigned char a: 7;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
182 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
unsigned char b: 5;
unsigned char c: 4;
} B;
The compiler allocates struct B with 3 bytes. First, the compiler allocates the 7 bits of a.
Then the compiler tries to allocate the 5 bits of b, but this would cross a byte boundary.
Because the gap of 1 bit is smaller than the specified gap of 3 bits, b is allocated in the
next byte. Then the allocation starts for c. After the allocation of b there are 3 bits left.
Because the gap is 3 bits, c is allocated in the next byte. If the maximum gap size were
specified to 0, all 16 bits of B would be allocated in two bytes. Since the gap limit is set
to 3, and the gap required for allocating c in the next byte is also 3, the compiler will use
a 16-bit word as allocation unit. Both b and c will be allocated within this word.
Assuming we initialize an instance of B as below:
B s = {2, 7, 5},
- BfaGapLimitBits3 : 02 00 A7
-BfaGapLimitBits4 : 02 07 05
See also
Bitfield Allocation
Group
CODE GENERATION
Scope
Function
Syntax
-BfaTSR[ON|OFF]
Arguments
ON: Bit Field Type Size Reduction enabled
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 183
Compiler Option Details
HC08: -BfaTSRON
Defines
__BITFIELD_TYPE_SIZE_REDUCTION__
__BITFIELD_NO_TYPE_SIZE_REDUCTION__
Pragmas
None
Description
This option is available whether or not the compiler uses type-size reduction for bitfields.
Type-size reduction means that the compiler reduces the type of an int bitfield to a char
bitfield if the int bitfield fits into a character. Type-size reduction allows the compiler to
allocate memory only for one byte instead of for an integer.
Examples
The following listings demonstrate the effects of -BfaTSRoff and -BfaTSRon, respectively.
Listing: -BfaTSRoff
struct{
long b1:4;
long b2:4;
} myBitfield;
31 7 3 0
--------------------------------
|########################|b2|b1| -BfaTSRoff
--------------------------------
Listing: -BfaTSRon
7 3 0
----------
|b2 | b1 | -BfaTSRon
----------
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
184 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Example
-BfaTSRon
See also
Bitfield Type Reduction
Group
LANGUAGE
Scope
Compilation Unit
Syntax
-C++ (f|e|c)
Arguments
f : Full ANSI Draft C++ support
e : Embedded C++ support (EC++)
c : compactC++ support (cC++)
Default
None
Defines
__cplusplus
Pragmas
None
Description
With this option enabled, the Compiler behaves as a C++ Compiler. You can choose
between three different types of C++:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 185
Compiler Option Details
COMPOPTIONS=-C++f
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Cc
Arguments
None
Default
None
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
186 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
SECTIONS
MY_ROM READ_ONLY 0x1000 TO 0x2000
PLACEMENT
See also
Segmentation
Linker Manual
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 187
Compiler Option Details
Group
LANGUAGE
Scope
Compilation Unit
Syntax
-Ccx
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option allows you to use Cosmic style @near, @far and @tiny space modifiers as well
as @interrupt in your C code. You must switch the -ANSI option off before using this
option. It is not necessary to remove the Cosmic space modifiers from your application
code. You do not need to place the objects in sections addressable by the Cosmic space
modifiers.
When the Compiler parses a Cosmic modifier, the following occurs:
• The Compiler always allocates the declared objects in a special Cosmic compatibility
( _CX...) section, regardless of which section pragmas are set. The target compatibility
section used depends on the space modifier, the const qualifier, and whether the code
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
188 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
line is a function or a variable. Refer to the following table for object placement
information.
• Space modifiers on the left hand side of a pointer declaration specify the pointer type
and pointer size, depending on the target.
Refer example in the following listing for a PRM file showing section placement for the
sections in the following table.
Table 7-6. Cosmic Modifier Handling
Definition Placement to _CX section
@tiny int my_var _CX_DATA_TINY
@near int my_var _CX_DATA_NEAR
@far int my_var _CX_DATA_FAR
const @tiny int my_cvar _CX_CONST_TINY
const @near int my_cvar _CX_CONST_NEAR
const @far int my_cvar _CX_CONST_FAR
@tiny void my_fun(void) _CX_CODE_TINY
@near void my_fun(void) _CX_CODE_NEAR
@far void my_fun(void) _CX_CODE_FAR
@interrupt void my_fun(void) _CX_CODE_INTERRUPT
For further information about porting applications from Cosmic to CodeWarrior IDE
refer to technical note TN234 located at <CodeWarrior for Microcontrollers V6.x
Installation>\Help\PDF. The following table gives an overview of HC(S)08 space-
modifier mapping.
Table 7-7. Cosmic Space Modifier Mapping for HC(S)08
Definition Keyword Mapping
@tiny __near
@near __far
@far __far
Refer the following listing for an example of the -Ccx compiler option.
Listing: Cosmic Space Modifiers
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 189
Compiler Option Details
SEGMENTS
END
PLACEMENT
DEFAULT_ROM, ROM_VAR,
END
See also
Cosmic Manuals, Build Tools Utilities Reference Manual, TN234
Group
LANGUAGE
Scope
Function
Syntax
-Ci
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
190 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Arguments
None
Default
None
Defines
__TRIGRAPHS__
Pragmas
None
Description
If certain tokens are not available on your keyboard, replace them with the keywords
shown in the following table.
Table 7-8. Keyword Alternatives for Unavailable Tokens
Bigraph Keyword Token Replaced Trigraph Token Replaced Additional Token Replaced
Keyword Keyword
<% } ??= # and &&
%> } ??/ \ and_eq &=
<: [ ??' ^ bitand &
:> ] ??( [ bitor |
%: # ??) ] compl ~
%:%: ## ??! | not !
??< { or ||
??> } or_eq |=
??- ~ xor ^
xor_eq ^=
not_eq !=
NOTE
Additional keywords are not allowed as identifiers if this option
is enabled.
Example
-Ci
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 191
Compiler Option Details
The example in the following listing shows the use of trigraphs, bigraphs and the
additional keywords with the corresponding `normal' C source code.
Listing: Trigraphs, Bigraphs, and Additional Keywords
int Trigraphs(int argc, char * argv??(??)) ??<
if (argc<1 ??!??! *argv??(1??)=='??/0') return 0;
??>
%:define TEST_NEW_THIS 5
int i;
int cat(a,b);
char a<:10:>;
char b<:10:>;
i and_eq TEST_NEW_THIS;
i = i bitand 0x03;
i = i bitor 0x8;
i = compl i;
i = not i;
i or_eq 0x5;
i = i xor 0x12;
i xor_eq 99;
cat(a,b) = 5;
if (a??(i??) || b[i])<%%>
if (arraycheck(a,b,i)) <%
i = 0;
%>
%>
%>
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
192 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
if (argc<1 || *argv[1]=='\0') return 0;
#define TEST_NEW_THIS 5
int i;
int cat(a,b);
char a[10];
char b[10];
void Trigraph2(void){
if (i && ab) {
i &= TEST_NEW_THIS;
i = i & 0x03;
i = i | 0x8;
i = ~i;
i = !i;
} else if (ab || i) {
i |= 0x5;
i = i ^ 0x12;
i ^= 99;
} else if (i != 5) {
cat(a,b) = 5;
if (a[i] || b[i]){}
if (arraycheck(a,b,i)) {
i = 0;
Group
LANGUAGE
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 193
Compiler Option Details
Scope
Function
Description
Use this option to disable compactC++ fetaures.
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Cni
Arguments
None
Default
None
Defines
__CNI__
Pragmas
None
Description
The -Cni option enhances character operation code density by omitting integral
promotion. This option enables behavior that is not ANSI-C compliant.
In ANSI-C operations with data types, anything smaller than int must be promoted to int
(integral promotion). With this rule, adding two unsigned character variables causes the
Compiler to zero-extend each character operand, and add them as int operands. Integral
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
194 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
promotion is unnecessary when the result will be stored as a character. Using this option,
the Compiler avoids promotion when possible. Performing operations on a character base
instead of an integer base may decrease code size.
In most expressions, ANSI-C requires char type variables to be extended to the next
larger type int, which requires a 16-bit size, according to ANSI standard. The -Cni option
suppresses this ANSI-C behavior and thus allows the use of 'characters' and 'character-
sized constants' in expressions.
NOTE
Code generated with this option set does not conform to ANSI
standards. Code compiled with this option is not portable.
Using this option is not recommended in most cases.
The ANSI standard requires that old-style function declarations using the char parameter
be extended to int. The -Cni option disables this extension and saves additional RAM.
Example
Refer the following listing.
Listing: Definition of an Old Style Function using a char Parameter
old_style_func (a, b, c)
char a, b, c;
...
The space reserved for a, b, and c is one byte each, instead of two.
For expressions containing different types of variables, the following conversion rules
apply:
• If both variables are of type signed char, the expression is evaluated signed.
• If one of two variables is of type unsigned char, the expression is evaluated unsigned,
regardless of whether the other variable is of type signed or unsigned char.
• If one operand is of another type than signed or unsigned char, the usual ANSI-C
arithmetic conversions are applied.
• If constants are in the character range, they are treated as characters. Remember that
the char type is signed and applies to the constants -128 to 127. All constants greater
than 127 are treated as integers. To treat them as characters, cast them as characters
(as shown in the following listing).
Listing: Casting Integers to Signed char
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 195
Compiler Option Details
signed char a, b;
if (a > b * (signed char)129)
NOTE
This option is ignored when the - Ansi Compiler switch is
active.
Group
LANGUAGE
Scope
Function
Syntax
-Cppc
Arguments
None
Default
By default, the Compiler does not allow C++ comments if the -Ansi: Strict ANSI
compiler option is set.
Defines
None
Pragmas
None
Description
The -Ansi option forces the compiler to conform to the ANSI-C standard. Because a strict
ANSI-C compiler rejects any C++ comments (started with //), use this option to allow C
++ comments (as shown in the following listing).
Listing: Using -Cppc to Allow C++ Comments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
196 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-Cppc /* This allows the code containing C++ comments to be compiled with
the
-Ansi option set */
See also
-Ansi: Strict ANSI compiler option
Group
LANGUAGE
Scope
Application
Syntax
-Cq
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option propagates const and volatile qualifiers for structures. That means if all
members of a structure are constant, the structure itself is constant as well. The same
happens with the volatile qualifier. If the structure is declared as constant or volatile, all
members are constant or volatile.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 197
Compiler Option Details
The source code in the following listing declares two structs, each of which has a const
member.
Listing: Declaring Two structs
struct {
const field;
} s1, s2;
void myfun(void) {
In the above example, the field in the struct is constant, but not the struct itself. Thus the
struct copy `s1 = s2' is legal, even if the field of the struct is constant. But a write access
to the struct field causes an error message. Using the -Cq option propagates the
qualification ( const) of the fields to the whole struct or array. In the above example, the
struct copy causes an error message.
Group
CODE GENERATION
Scope
Compilation Unit
Syntax
-Cs08
Arguments
s08: HCS08 family
08: HC08 family
Default
-C08
Defines
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
198 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
__HCS08__
Pragmas
None
Description
Setting this option generates code for the HC(S)08 family. In addition, using this option
allows all new HC(S)08 operation-operand combinations in the HLI.
Example
Group
CODE GENERATION
Scope
Function
Syntax
-CswMaxLF<number>
Arguments
<number>: a number in the range of 0 to 100 denoting the maximum load factor.
Default
Backend-dependent.
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 199
Compiler Option Details
Using this option changes the default strategy of the Compiler to use tables for switch
statements.
NOTE
This option is only available if the compiler supports switch
tables.
Normally the Compiler uses a table for switches with more than about eight labels,
provided the table is between 80% (minimum load factor of 80) and 100% (maximum
load factor of 100) full. If there are not enough labels for a table or the table is not filled,
the Compiler generates a branch tree (tree of if-else-if-else). This branch tree, like an
`unrolled' binary search in a table, quickly evaluates the associated label for a switch
expression.
Using a branch tree instead of a table improves code execution speed, but may increase
code size. In addition, because the branch tree itself uses no special runtime routine for
switch expression evaluation, debugging may be more seamless.
Specifying a load factor means that tables generate in specific `fuel' status:
Listing: Specifying Table Load Factor
switch(i) {
case 0: ...
case 1: ...
case 2: ...
case 3: ...
case 4: ...
// case 5: ...
case 6: ...
case 7: ...
case 8: ...
case 9: ...
default
The above table is filled to 90% (labels for `0' to `9', except for `5'). Setting the minimum
load factor to 50% and the maximum load factor for the above case to 80%, a branch tree
generates instead a table. But setting the maximum load factor to 95% produces a table.
To guarantee that tables generated for full switch tables only, set the table minimum and
maximum load factors to 100:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
200 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-CswMinLF100 -CswMaxLF100.
See also
Compiler options:
• -CswMinLB: Minimum Number of Labels for Switch Tables
• Option -CswMinSLB: Minimum Number of Labels for Switch Search Tables
• -CswMinLF: Minimum Load Factor for Switch Tables
Group
CODE GENERATION
Scope
Function
Syntax
-CswMinLB<number>
Arguments
<number>: a positive number denoting the number of labels.
Default
Backend-dependent
Defines
None
Pragmas
None
Description
Using this option changes the default strategy of the Compiler to use tables for switch
statements.
NOTE
This option is only available if the compiler supports switch
tables.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 201
Compiler Option Details
Normally the Compiler uses a table for switches with more than about eight labels. When
there are not enough labels for a table, the Compiler generates a branch tree (tree of if-
else-if-else). This branch tree, like an `unrolled' binary search in a table, quickly
evaluates the associated label for a switch expression.
Using a branch tree instead of a table may increase the code execution speed, but
probably increases the code size also. In addition, because the branch tree itself uses no
special runtime routine for switch expression evaluation, debugging may be much easier.
To disable any tables for switch statements, set the minimum number of labels needed for
a table to a high value (for example, 9999):
-CswMinLB9999 -CswMinSLB9999.
When disabling simple tables it usually makes sense also to disable search tables with the
-CswMinSLB option.
See also
Compiler options :
• -CswMinLF: Minimum Load Factor for Switch Tables
• -CswMinSLB: Minimum Number of Labels for Switch Search Tables
• -CswMaxLF: Maximum Load Factor for Switch Tables
Group
CODE GENERATION
Scope
Function
Syntax
-CswMinLF<number>
Arguments
<number>: a number in the range of 0 - 100 denoting the minimum load factor
Default
Backend-dependent
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
202 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Defines
None
Pragmas
None
Description
Allows the Compiler to use tables for switch statements.
NOTE
This option is only available if the compiler supports switch
tables.
Normally the Compiler uses a table for switches with more than about eight labels,
provided the table is between 80% (minimum load factor of 80) and 100% (maximum
load factor of 100) full. If there are not enough labels for a table or the table is not full,
the Compiler generates a branch tree (tree of if-else-if-else). This branch tree, like an
`unrolled' binary search in a table, quickly evaluates the associated label for a switch
expression.
Using a branch tree instead of a table improves code execution speed, but may increase
code size. In addition, because the branch tree itself uses no special runtime routine for
switch expression evaluation, debugging is more seamless.
Specifying a load factor means that tables generate in specific `fuel' status:
Listing: Specifying Table Load Factor
switch(i) {
case 0: ...
case 1: ...
case 2: ...
case 3: ...
case 4: ...
// case 5: ...
case 6: ...
case 7: ...
case 8: ...
case 9: ...
default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 203
Compiler Option Details
The above table is 90% full (labels for `0' to `9', except for `5'). Setting the maximum
load factor to 100% and the minimum load factor for the above case to 90%, this still
generates a table. But setting the minimum load factor to 95% produces a branch tree.
To guarantee that tables generate for full switch tables only, set the minimum and
maximum table load factors to 100:
-CswMinLF100 -CswMaxLF100.
See also
Compiler options :
• -CswMinLB: Minimum Number of Labels for Switch Tables
• -CswMinSLB: Minimum Number of Labels for Switch Search Tables
• -CswMaxLF: Maximum Load Factor for Switch Tables
Group
CODE GENERATION
Scope
Function
Syntax
-CswMinSLB<number>
Arguments
<number>: a positive number denoting the number of labels
Default
Backend-dependent
Defines
None
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
204 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Description
Allows the Compiler to use tables for switch statements.
NOTE
This option is only available if the compiler supports search
tables.
The Compiler implements switch tables in different ways. When almost all case entries in
some range are given, the Compiler uses a table containing only branch targets. Densely
populated branch target tables improve efficiency because the Compiler accesses only the
correct entry. When large holes exist in some areas, a table form can still be used.
Encoding the case entry and its corresponding branch target into a table creates a search
table. Accessing a search table requires a complex runtime routine to check all entries
until it finds the matching one. Search tables execute slowly.
Using a search table improves code density, but the execution time increases. Every data
request from a search table requires checking every entry until the correct entry is
located. For a dense table, the compiler computes the right offset and accesses the table.
In addition, note that all backends that implement search tables use a complex runtime
routine. This complicates debugging.
To disable search tables for switch statements, set the minimum number of labels needed
for a table to a high value (for example, 9999): -CswMinSLB9999.
See also
Compiler options :
• -CswMinLB: Minimum Number of Labels for Switch Tables
• -CswMinLF: Minimum Load Factor for Switch Tables
• -CswMaxLF: Maximum Load Factor for Switch Tables
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Cu[=i<number>]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 205
Compiler Option Details
Arguments
<number>: number of iterations for unrolling, between 0 and 1024
Default
None
Defines
None
Pragmas
#pragma LOOP_UNROLL: Force Loop Unrolling
• Initialization and test of the loop counter must be done with a constant.
• Only <, >, <=, >= are permitted in a condition.
• Only ++ or -- are allowed for the loop variable increment or decrement.
• The loop counter must be integral.
• No change of the loop counter is allowed within the loop.
• The loop counter must not be used on the left side of an assignment.
• No address operator (&) is allowed on the loop counter within the loop.
• Only small loops are unrolled:
• Loops with few statements within the loop.
• Loops with fewer than 16 increments or decrements of the loop counter. The
bound may be changed with the optional argument = i<number>. The -Cu=i20
option unrolls loops with a maximum of 20 iterations.
Examples
Listing: for Loop
-Cu int i, j;
j = 0;
j += i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
206 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
With the -Cu compiler option given, the Compiler issues an information message
'Unrolling loop' and transforms this loop as shown in the following listing.
Listing: for Loop
j += 1;
j += 2;
i = 3;
The Compiler also transforms some special loops, i.e., loops with a constant condition or
loops with only one pass:
Listing: Example for Loop with a Constant Condition
The Compiler issues an information message 'Constant condition found, removing loop'
and transforms the loop into a simple assignment, because the loop body is never
executed:
i=1;
Because the loop body is executed only once, the Compiler issues a warning 'Unrolling
loop' and transforms the for loop into:
j += 1;
i = 2;
Group
CODE GENERATION
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 207
Compiler Option Details
Scope
Compilation Unit
Syntax
-Cx
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
The -Cx Compiler option disables the code generation process of the Compiler. The
Compiler generates no object code, although the Compiler performs a syntactical check
of the source code. This allows you to check your source code for errors without
generating object code.
Group
LANGUAGE
Scope
Compilation Unit
Syntax
-D<identifier>[=<value>]
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
208 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-DDEBUG=0
This is the same as writing:
#define DEBUG 0
To include strings with blanks in your macro definition, either use an escape sequence or
use double quotes.
-dPath="Path\40with\40spaces"
NOTE
Blanks are not allowed after the -D option; the first blank
terminates this option. Also, macro parameters are not
supported.
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 209
Compiler Option Details
LANGUAGE
Scope
Function
Syntax
-Ec
Arguments
None
Default
None
Description
Enabling this non-ANSI compliant extension allows the compiler to treat a pointer to a
constant type like a pointer to the non-constant equivalent of the type. Earlier Compilers
did not check a store to a constant object through a pointer. This option is useful when
compiling older source code.
Listing: Converting `const T*' to `T*'
void f() {
int *i;
struct A {
int i;
};
void g() {
void h() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
210 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Defines
None
Pragmas
None
Listing: Example
-Ec
void myfun(const int *p){
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Eencrypt[=<filename>]
Arguments
<filename>: The name of the file to be generated
It may contain special modifiers (refer Using Special Modifiers).
Default
The default filename is %f.e%e. A file named ` myfun.c' creates an encrypted file named `
myfun.ec'.
Description
This option encrypts all files passed together with this option, using the given key with
the -Ekey option (refer -Ekey: Encryption Key).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 211
Compiler Option Details
NOTE
This option is only available or operative with a license for the
following feature: HIxxxx30, where xxxx is the feature number of
the compiler for a specific target.
Defines
None
Pragmas
None
Example
This encrypts the ` myfun.c' file using the 1234567 key to the ` myfun.ec' file and the ` myfun.h'
file to the ` myfun.eh' file.
The encrypted myfun.ec and myfun.eh files may be passed to a client. The client can compile
the encrypted files without the key by compiling the following file:
myfun.ec
See also
-Ekey: Encryption Key
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Ekey<keyNumber>
Arguments
<keyNumber>
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
212 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
The default encryption key is `0'. Using this default is not recommended.
Description
Use this option to encrypt files with the given key number ( -Eencrypt option).
NOTE
This option is only available or operative with a license for the
following feature: HIxxxx30, where xxxx is the feature number of
the compiler for a specific target.
Defines
None
Pragmas
None
Example
Group
HOST
Scope
Compilation Unit
Syntax
Arguments
<Environment Variable>: Environment variable to be set
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 213
Compiler Option Details
-EnvOBJPATH=\sources\obj
OBJPATH=\sources\obj
-Env"OBJPATH=\program files"
See also
Environment
Group
OUTPUT
Scope
Application
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
214 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Syntax
-F(1|1o|2|2o|6|7|h)
Arguments
h: HIWARE object-file format
1: ELF/DWARF 1.1 object-file format
1o: compatible ELF/DWARF 1.1 object-file format
2: ELF/DWARF 2.0 object-file format
2o: compatible ELF/DWARF 2.0 object-file format
6: strict HIWARE V2.6 object-file format
7: strict HIWARE V2.7 object-file format
NOTE
Not all object-file formats may be available for a target.
Default
-Fh
Defines
__HIWARE_OBJECT_FILE_FORMAT__
__ELF_OBJECT_FILE_FORMAT__
Pragmas
None
Description
The Compiler writes the code and debugging info into an object file after compilation.
The Compiler uses a HIWARE-proprietary object-file format when the -Fh, -F6 or -F7
options are set.
The HIWARE Object-file Format ( -Fh) has the following limitations:
• The type char is limited to a size of 1 byte.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 215
Compiler Option Details
Group
CODE GENERATION
Scope
Application
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
216 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-Fd
Arguments
None
Default
None
Defines
Refer -T: Flexible Type Management
Pragmas
See -T
Description
Allows you to change the float or double format. By default, float is IEEE32 and doubles
are IEEE64.
When you set this option, all doubles are in IEEE32 instead of IEEE64.
Floating point formats may be also changed with the -T option.
Group
VARIOUS
Scope
None
Syntax
-H
Arguments
None
Default
None
Defines
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 217
Compiler Option Details
None
Pragmas
None
Description
The -H option causes the Compiler to display a short help list of available options within
the Compiler window. Options are grouped into HOST, LANGUAGE,
OPTIMIZATIONS, OUTPUT, INPUT, CODE GENERATION, MESSAGES, and
VARIOUS.
Do not specify any other option or source file when the invoking -H option.
Example
The following listing shows the short list options.
Listing: Short Help Options
-H may produce the following list:
INPUT:
VARIOUS:
Group
INPUT
Scope
Compilation Unit
Syntax
-I<path>
Arguments
<path>: path, terminated by a space or end-of-line
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
218 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Default
None
Defines
None
Pragmas
None
Description
Allows you to set include paths in addition to the LIBPATH, LIBRARYPATH, and GENPATH
environment variables (refer LIBRARYPATH: `include <File>' Path and GENPATH:
#include "File" Path). Paths specified with this option have precedence over includes in
the current directory, and over paths specified in GENPATH, LIBPATH, and LIBRARYPATH.
Example
This directs the Compiler to search for header files first in the current directory ( . ), then
relative from the current directory in '..\h', and then in '\src\include'. If the file is not
found, the search continues with GENPATH, LIBPATH and LIBRARYPATH for header files in double
quotes ( #include"headerfile.h"), and with LIBPATH and LIBRARYPATH for header files in angular
brackets ( #include <stdio.h>).
See also
Input Files
-AddIncl: Additional Include File
LIBRARYPATH: `include <File>' Path
GENPATH: #include "File" Path
Group
OUTPUT
Scope
Function
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 219
Compiler Option Details
Syntax
-La[=<filename>]
Arguments
<filename>: The name of the file to be generated
It may contain special modifiers (refer Using Special Modifiers)
Default
No file created
Defines
None
Pragmas
None
Description
The -La option causes the Compiler to generate an assembler include file when the
CREATE_ASM_LISTING pragma occurs. This option specifies the name of the created file. If no
name is specified, the compiler takes a default of %f.inc. To put the file into the directory
specified by the TEXTPATH: Text File Path environment variable, use the option -la=
%n.inc. The %f option already contains the path of the source file. When you use %f, the
compiler puts the generated file in the same directory as the source file.
The content of all modifiers refers to the main input file and not to the actual header file.
The main input file is the one specified on the command line.
Example
-La=asm.inc
See also
#pragma CREATE_ASM_LISTING: Create an Assembler Include File Listing
TEXTPATH: Text File Path
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
220 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
OUTPUT
Scope
Function
Syntax
-Lasm[=<filename>]
Arguments
<filename>: The name of the file to be generated.
It may contain special modifiers (refer Using Special Modifiers).
Default
No file created.
Defines
None
Pragmas
None
Description
The -Lasm option causes the Compiler to generate an assembler listing file directly. The
Compiler also prints all assembler-generated instructions to this file. The option specifies
the name of the file. If you do not specify a name, the Compiler takes a default of %n.lst.
If the resulting filename contains no path information the Compiler uses the TEXTPATH
environment variable (refer TEXTPATH: Text File Path).
The syntax does not always conform with the inline assembler or the assembler syntax.
Therefore, use this option only to review the generated code. It cannot currently be used
to generate a file for assembly.
Example
-Lasm=asm.lst
See also
-Lasmc: Configure Listing File
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 221
Compiler Option Details
Group
OUTPUT
Scope
Function
Syntax
-Lasmc[={a|c|i|s|h|p|e|v|y}]
Arguments
a: Do not write the address in front of every instruction
c: Do not write the hex bytes of the instructions
i: Do not write the decoded instructions
s: Do not write the source code
h: Do not write the function header
p: Do not write the source prolog
e: Do not write the source epilog
v: Do not write the compiler version
y: Do not write cycle information
Default
All printed together with the source
Defines
None
Pragmas
None
Description
The -Lasmc option configures the output format of the listing file generated with the -
Lasm: Generate Listing File option. The addresses, the hex bytes, and the instructions are
selectively switched off.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
222 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
The format of the listing file uses the layout shown in the following listing. The letters in
brackets ([]) indicate which suboption to use to switch the instruction off.
Listing: -Lasm Configuration Options
[p] 1:
[h]
[h]
[s] 3: }
[e] 4:
[e] 5: // comments
[e] 6:
Example
-Lasmc=ac
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Ldf[=<file>]
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 223
Compiler Option Details
#define __STDC__ 0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
224 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
#define __VERSION__ 5004
#define __SMALL__
#define __PTR_SIZE_2__
#define __BITFIELD_LSBIT_FIRST__
#define __BITFIELD_MSBYTE_FIRST__
...
See also
-D: Macro Definition
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Li
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 225
Compiler Option Details
The -Li option causes the Compiler to generate a text file which contains a list of the
#include files specified in the source. This text file shares the same name as the source file
but with the extension * .inc. The Compiler stores the file in the path specified by the
TEXTPATH: Text File Path environment variable. The generated file may be used in
make files.
Example
The following listing uses the -Li compiler option to display a file's contents when that
file contains an included directive.
Listing: Display Contents of a File Containing Include Directives
/* C:\myFiles\b.c */
#include <string.h>
C:\myFiles\b.c :\
C:\Freescale\lib\targetc\include\string.h \
C:\Freescale\lib\targetc\include\libdefs.h \
C:\Freescale\lib\targetc\include\hidef.h \
C:\Freescale\lib\targetc\include\stddef.h \
C:\Freescale\lib\targetc\include\stdtypes.h
See also
-Lm: List of Included Files in Make Format compiler option
Group
VARIOUS
Scope
None
Syntax
-Lic
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
226 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
None
Default
None
Defines
None
Pragmas
None
Description
The -Lic option prints the current license information. This information also appears in
the About window.
Example
-Lic
See also
Compiler options :
-LicA: License Information about Every Feature in Directory
-LicBorrow: Borrow License Feature
-LicWait: Wait until Floating License is Available from Floating Li- cense Server
Group
VARIOUS
Scope
None
Syntax
-LicA
Arguments
None
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 227
Compiler Option Details
None
Defines
None
Pragmas
None
Description
The -LicA option prints the license information about every tool or *.dll in the same
directory with the executable file. This takes some time as the option analyzes every file
in the directory.
Example
-LicA
See also
Compiler options :
-Lic: License Information
-LicBorrow: Borrow License Feature
-LicWait: Wait until Floating License is Available from Floating Li- cense Server
Group
HOST
Scope
None
Syntax
-LicBorrow<feature>[;<version>]:<Date>
Arguments
<feature>: the feature name to be borrowed (for example, HI100100).
<version>: optional version of the feature to be borrowed (for example, 3.000).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
228 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
<date>:
date with optional time specifying when the feature must be returned (for
example, 15-Mar-2005:18:35).
Default
None
Defines
None
Pragmas
None
Description
This option allows you to borrow a license feature until a given date or time. Borrowing
allows you to use a floating license even if disconnected from the floating license server.
Specify the feature name and the date you will return the feature. If the feature you want
to borrow belongs to the tool with which you use this option, then you do not need to
specify the feature version. However, to borrow any other feature, specify the feature
version as well.
Check the status of currently borrowed features in the tool About window.
NOTE
You can only borrow features if you have a floating license
enabled for borrowing. Refer FLEXlm documentation for
details on borrowing.
Example
-LicBorrowHI100100;3.000:12-Mar-2006:18:25
See also
Compiler options:
-LicA: License Information about Every Feature in Directory
-Lic: License Information
-LicWait: Wait until Floating License is Available from Floating Li- cense Server
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 229
Compiler Option Details
Group
HOST
Scope
None
Syntax
-LicWait
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
By default, if a license is not available from the floating license server, then the
application returns immediately. With -LicWait set, the application waits (blocking) until a
license is available from the floating license server.
Example
-LicWait
See also
Compiler options:
-Lic: License Information
-LicA: License Information about Every Feature in Directory
-LicBorrow: Borrow License Feature
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
230 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Ll[=<filename>]
Arguments
<filename>: file to be used for the output
Default
The default output filename is logfile.txt
Defines
None
Pragmas
None
Description
Using the -Ll option, the Compiler appends statistical information about the compilation
session to the specified file. The information includes Compiler options, code size (in
bytes), stack usage (in bytes) and compilation time (in seconds) for each procedure of the
compiled file. The Compiler appends the information to the specified filename (or the file
make.txt, if no argument given). Set the TEXTPATH environment variable (refer TEXTPATH:
Text File Path) to store the file into the path specified by the environment variable.
Otherwise the Compiler stores the file in the current directory.
Example
The following listing uses the -L1 compiler options to add statistical information to the
end of an output listing file.
Listing: Statistical Information Appended to Assembler Listing
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 231
Compiler Option Details
-Ll=mylog.txt
/* myfun.c */
int Func1(int b) {
int a = b+3;
return a+2;
void Func2(void) {
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Lm[=<filename>]
Arguments
<filename>: file to be used for the output
Default
The default filename is Make.txt
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
232 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Using the -Lm option, the Compiler generates a text file containing a list of the #include
files specified in the source. Use the -Lm option when creating make files. The output
from several source files may be copied and grouped into one make file. The generated
list is in the make format. The filename does not include the path. After each entry, an
empty line is added. The Compiler appends the information to the specified filename (or
the file make.txt, if no argument is given). Set the TEXTPATH environment variable (refer
TEXTPATH: Text File Path) to store the file into the path specified by the environment
variable. Otherwise the Compiler stores the file in the current directory.
Example
The example in the following listing shows that the Compiler uses the -Lm option to
generate a make file containing include directives.
Listing: Make File Construction
COMPOTIONS=-Lm=mymake.txt
Compiling the following sources 'myfun.c' and 'second.c':
/* myfun.c */
#include <stddef.h>
#include "myheader.h"
...
/* second.c */
#include "inc.h"
#include "header.h"
...
See also
-Li: List of Included Files to ".inc" File
-Lo: Append Object File Name to List (enter [<files>])
Make Utility
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 233
Compiler Option Details
OUTPUT
Scope
Compilation Unit
Syntax
-LmCfg[={i|l|m|o|u}]
Arguments
i: Write path of included files
l: Use line continuation
m: Write path of main file
o: Write path of object file
u: Update information
x: Unix style paths
Default
None
Defines
None
Pragmas
None
Description
Use this option when configuring the -Lm option (refer -Lm: List of Included Files in
Make Format). -LmCfg operates only when also using the -Lm option. The -Lm option
produces the `dependency' information for a make file. Each dependency information
grouping is structured as shown:
Example
Compile a file named b.c which includes stdio.h. The -Lm option produces the following:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
234 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
The suboption, ` l', uses line continuation for each single entry in the dependency list.
This improves readability as shown in the following listing.
Listing: Using Line Continuations for Clarity
b.o: \
b.c \
stdio.h \
stddef.h \
stdarg.h \
string.h
Use the suboption ` m' to write the full path of the compiled file. This is necessary when
there are files with the same name in different directories:
The suboption ` o' writes the full name of the target object file:
The suboption ` i' writes the full path of all included files in the dependency list:
The suboption ` u' updates the information in the output file. If the file does not exist, the
Compiler creates the file. If the file exists and the current information is not yet in the
file, the Compiler appends the information to the file. If the information is already
present, the Compiler updates the information. This allows you to specify this suboption
for each compilation ensuring that the make dependency file is always up to date.
Example
COMPOPTIONS=-LmCfg=u
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 235
Compiler Option Details
See also
-Li: List of Included Files to ".inc" File
-Lo: Append Object File Name to List (enter [<files>])
-Lm: List of Included Files in Make Format
Make Utility
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Lo[=<filename>]
Arguments
<filename>: file to be used for the output
Default
The default filename is objlist.txt
Defines
None
Pragmas
None
Description
Using the -Lo option, the Compiler appends the object filename to the list in the specified
file. The Compiler appends the information to the specified filename (or the file make.txt,
if no argument given). Set the TEXTPATH environment variable (refer TEXTPATH: Text
File Path) to store the file into the path specified by the environment variable. Otherwise,
the Compiler stores the file in the current directory.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
236 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
OUTPUT
Scope
Compilation Unit
Syntax
-Lp[=<filename>]
Arguments
<filename>: The name of the file to be generated.
It may contain special modifiers (refer Using Special Modifiers).
Default
No file created
Defines
None
Pragmas
None
Description
Using the -Lp option, the Compiler generates a text file containing the preprocessor's
output. If no filename is specified, the text file shares the same name as the source file
but with the extension, * .PRE ( %n.pre). The Compiler uses the TEXTPATH environment
variable to store the preprocessor file.
The resultant file is a form of the source file, with all preprocessor commands (such as
#include, #define, and #ifdef) resolved. Only source code is listed with line numbers.
See also
-LpX: Stop after Preprocessor
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 237
Compiler Option Details
Group
OUTPUT
Scope
Compilation Unit
Syntax
-LpCfg[={c|e|f|l|m|n|q|s}]
Arguments
s: Reconstruct spaces
q: Handle single quote ['] as normal token
n: No string concatenation
m: Do not emit file names
l: Emit #line directives in preprocessor output
f: Filenames with path
e: Emit empty lines
c: Do not emit line comments
NOTE
It is necessary to use q option when invoking the preprocessor
on linker parameter files ( .prm), because such files may contain
linear address specifiers, for example 0x014000'F.
Default
If -LpCfg is specified, all suboptions (arguments) are enabled
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
238 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
None
Description
The -LpCfg option specifies source file and -line information formatting in the
preprocessor output. Switching -LpCfg off formats the output as in former compiler
versions. Refer the following table for a list of argument effects.
Table 7-9. Effects of Source and Line Information Format Control Arguments
Argument On Off
c typedef unsigned int /* 22 */ typedef unsignedint
size_t ;typedef signed int size_t ;/* 35 */ typedef
ptrdiff_t ; signedint ptrdiff_t ;
e int j;int i; int j;int i;
f /**** FILE '<CWInstallDir>\MCU /**** FILE 'hidef.h' */
\lib\hc08c\include\hidef.h' */
l #line 1 "hidef.h" /**** FILE 'hidef.h' */
n /* 9 */ foo ( "abc" "def" ) ; /* 9 */ foo ( "abcdef" ) ;
m /**** FILE 'hidef.h' */
s /* 22 */ typedefunsigned int /* 22 */ typedef unsignedint
size_t;/* 35 */ typedef size_t ;/* 35 */ typedef
signedint ptrdiff_t;/* 44 */ signedint ptrdiff_t ;/* 44 */
typedefunsigned char wchar_t; typedef unsignedchar wchar_t ;
all #line 1 "<CWInstallDir>\MCU /**** FILE 'hidef.h' *//* 20
\lib\hc08c\include\hidef.h" */
NOTE
CWInstallDir is the directory in which the CodeWarrior software
is installed.
Example
-Lpcfg
-Lpcfg=lfs
See also
-Lp: Preprocessor Output
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 239
Compiler Option Details
OUTPUT
Scope
Compilation Unit
Syntax
-LpX
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Without this option, the compiler always translates the preprocessor output as C code. To
do only preprocessing, use this option together with the -Lp option. No object file is
generated.
Example
-LpX
See also
-Lp: Preprocessor Output
Group
CODE GENERATION
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
240 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Application
Syntax
-M(b|s|t)
Arguments
b: banked memory model
s: small memory model
t: tiny memory model
Default
-Ms
Defines
__BANKED__
__SMALL__
__TINY__
Pragmas
#pragma CODE_SEG: Code Segment Definition
Description
The Compiler defaults to the small memory model. The small memory model assumes
that all pointers and functions have 16-bit addresses, and requires code and data to be
located in the 64-kilobyte address space. Specifying the small memory model when -MMU
is enabled causes the Compiler to consider any __far function accessible only through the
code banking mechanism (i.e., using a CALL instruction). The tiny memory model assumes
that data pointers have 8-bit addresses unless explicitly specified with the keyword __far.
The banked memory model is available only when -MMU is enabled. Memory banking
allows you to place program code into at most 256 pages of 16 kilobytes each, but does
not affect data allocation. When using banked mode, the compiler considers all functions
paged functions unless otherwise specified. Refer Memory Models.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 241
Compiler Option Details
Group
CODE GENERATION
Scope
Compilation Unit
Syntax
-MMU
Arguments
None
Default
None
Defines
__MMU__
Pragmas
None
Description
Setting this option informs the compiler that CALL and RTC instructions are available,
enabling code banking, and that the current architecture has extended data access
capabilities, enabling support for __linear data types. This option can be used only when -
Cs08 is enabled.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
242 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
MESSAGES
Scope
Function
Syntax
-N
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Using this option makes the Compiler display an Alert if an error occurs during
compilation. This is useful when running a make file (refer Make Utility) because the
Compiler waits for you to acknowledge the message, thus suspending make file
processing.
This feature is useful for halting and aborting a build using the Make Utility.
Example
-N
If an error occurs during compilation, a dialog similar to the following figure appears.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 243
Compiler Option Details
Group
MESSAGES
Scope
Function
Syntax
-NoBeep
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Use this option to implement a `beep' notification at the end of processing if an error
occurs. To implement a silent error, use this option to switch the beep off.
Example
-NoBeep
7.2.3.1.54 -NoClrVol: Do not use CLR for volatile variables in the direct
page
Group
CODE GENERATION
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
244 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Syntax
-NoClrVol
Arguments
None
Description
Inhibits the use of CLR for volatile variables in the direct page. The CLR instruction on
HC08 has a read cycle. This may lead to unwanted lateral effects (e.g. if the variable is
mapped over a hardware register).
Group
OUTPUT
Scope
None
Syntax
-NoDebugInfo
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
The compiler generates debug information by default. Use this option to prevent
generation of debug information.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 245
Compiler Option Details
NOTE
To generate an application without debug information in ELF,
the linker provides an option to strip the debug information. By
calling the linker twice, you can generate two versions of the
application: one with and one without debug information. Use
this compiler option only if object files or libraries are to be
distributed without debug info.
NOTE
This option does not affect the generated code. Only the debug
information is excluded.
See also
Compiler options:
-F (-Fh, -F1, -F1o, -F2, -F2o,-F6, or -F7): Object-File Format
-NoPath: Strip Path Info
Group
STARTUP. This option cannot be specified interactively.
Scope
None
Syntax
-NoEnv
Arguments
None
Default
None
Defines
None
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
246 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Description
You can only specify this option at the command line while starting the application. It
cannot be specified in any other way, including via the default.env file, the command line,
or processes.
When you use this option, the application has no environment ( default.env, project.ini, or
tips file) data.
Example
<compiler>.exe -NoEnv
Group
OUTPUT
Scope
Compilation Unit
Syntax
-NoPath
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 247
Compiler Option Details
Using this option, you can avoid any path information in object files. This is useful if you
want to move object files to another file location, or hide your path structure.
See also
-NoDebugInfo: Do not Generate Debug Information
Group
OPTIMIZATIONS
Scope
Function
Syntax
-O(s|t)
Arguments
s: Optimize for code size (default)
t: Optimize for execution speed
Default
-Os
Defines
__OPTIMIZE_FOR_SIZE__
__OPTIMIZE_FOR_TIME__
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
248 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
At times the Compiler must choose between generating fast, large code, or slow, small
code.
The Compiler generally optimizes on code size. It often decides between a runtime
routine or expanded code. The programmer can decide whether to choose the slower and
shorter or the faster and longer code sequence by setting a command line switch.
The -Os option directs the Compiler to optimize the code for smaller code size. The
Compiler trades faster/larger code for slower/smaller code.
The -Ot option directs the Compiler to optimize the code for faster execution time. The
Compiler trades slower/smaller code for faster/larger code.
NOTE
This option only affects some special code sequences. Set this
option together with other optimization options (such as register
optimization) to get best results.
Example
-Os
Group
OPTIMIZATIONS
Scope
Function
Description
Use this option to disable all optimizations.
Group
OPTIMIZATIONS
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 249
Compiler Option Details
Function
Syntax
-Obfv
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Use this option to optimize bitfields and volatile bitfields. The compiler changes the
access order or combines many accesses into one, even if the bitfields are declared as
volatile.
Example
The following listing contains bitfields to be optimized with the -Obfv compiler option.
Listing: Bitfields Example
volatile struct {
unsigned int b0:1;
} bf;
void myfun(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
250 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
BSET bf,#7
BSET bf,#1
BSET bf,#2
BSET bf,#4
Group
OUTPUT
Scope
Compilation Unit
Syntax
-ObjN=<file>
Arguments
<file>: Object filename
Default
-ObjN=%(OBJPATH)\%n.o
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 251
Compiler Option Details
The object file uses the same name as the processed source file, but with the extension
"*.o". This option allows flexible object filename definition. It may contain special
modifiers (refer Using Special Modifiers). When <file> in the option contains a path
(absolute or relative), the Compiler ignores the OBJPATH environment variable.
Example
-ObjN=a.out
This example names the resulting object file a.out. Setting the OBJPATH environment
variable to \src\obj results in an object file called \src\obj\a.out.
fibo.c -ObjN=%n.obj
myfile.c -ObjN=..\objects\_%n.obj
The Compiler names the object file relative to the current directory, which results in an
object file called ..\objects\_myfile.obj. The Compiler ignores the OBJPATH environment
variable because the <file> contains a path.
See also
OBJPATH: Object File Path environment variable
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Oc
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
252 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
None
Default
None
Defines
None
Pragmas
None
Description
This option is disabled and present only for compatibility reasons for the HC(S)08.
Performs common subexpression elimination (CSE). The Compiler generates the code
for common subexpressions and assignments only once and reuses the result. Depending
on available registers, a common subexpression may produce more code due to multiple
spills.
NOTE
When the CSE is switched on, variable changes by aliases may
generate incorrect optimizations.
Example
-Oc
In the following listing using the CSE option causes incorrect optimizations. This option
is disabled for the HC(S)08.
Listing: Example of Using CSE and Producing Incorrect Results
void main(void) {
int x;
int *p;
p = &x;
Error is called */
if(x != 6) Error();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 253
Compiler Option Details
NOTE
This error does not occur if you declare x as volatile.
Group
OPTIMIZATIONS
Scope
Function
Syntax
-OdocF="<option>"
Arguments
<option>: Set of options, separated by `|'> to be evaluated for each single function.
Default
None
Defines
None
Pragmas
None
Description
Normally, you must set a specific set of Compiler switches for each compilation unit (file
to be compiled). For some files, a specific set of options may decrease the code size, but
for other files, the same set of Compiler options may produce more code depending on
the sources.
Some optimizations may reduce the code size for some functions, but may increase the
code size for other functions in the same compilation unit. Normally it is impossible to
vary options over different functions, or to find the best combination of options.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
254 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
This option allows the Compiler to choose from a set of options to reach the smallest
code size for every function. Without this feature, you must set fixed Compiler switches
over the whole compilation unit. With this feature, the Compiler finds the best option
combination from a user-defined set for every function.
Standard merging rules apply for this option:
-Or -OdocF="-Ocu|-Cu"
-OrDOCF="-Ouc|-Cu"
The Compiler attempts to find the best combination of the specified options and evaluates
all possible combinations of all specified sets, for example, for the option shown in the
followingthe following listing.
Listing: Example of Dynamic Option Configuration
-W2 -OdocF="-Or|-Cni -Cu|-Oc"
The Compiler evaluates code sizes for the following option combinations:
1. -W2
2. -W2 -Or
5. -W2 -Oc
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 255
Compiler Option Details
The Compiler evaluates all combinations. Thus, specifying more sets takes more
evaluation time (for example, for five sets 32 evaluations).
NOTE
Do not specify options with scope Application or Compilation
Unit (as memory model, float or double format, or object-file
format) or options for the whole compilation unit (like inlining
or macro definition) in this option. The generated functions
may be incompatible for linking and executing.
Limitations :
• The maximum set of options set is limited to five, for example,
-OdocF="-Or -Ou|-Cni|-Cu|-Oic2|-W2 -Ob"
-Odocf="-Or|-Cni"
Group
OPTIMIZATIONS
Scope
Function
Syntax
-O[nf|f]
Arguments
nf: Disable
f: Enable
Default
-Of default or with -Os, -Onf with -Ot
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
256 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Defines
None
Pragmas
None
Description
This option performs the reverse of inlining. It detects common code parts in the
generated code. The Compiler moves the common code to a different place and replaces
all occurrences with a JSR to the moved code. At the end of the common code, the
Compiler inserts an RTS instruction. The Compiler increases all SP uses by an address size.
This optimization takes care of stack allocation, control flow, and functions having
arguments on the stack.
NOTE
Inline assembler code is never treated as common code.
Example
Consider this function:
void f(int);
void g(void);
void h(void);
void main(void) {
h();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 257
Compiler Option Details
g();
f(1); f(2);
The compiler first detects that "f(1); f(2); f(3);" occurs twice and places this code
separately. Then the Compiler replaces the two code patterns by a call to the moved code.
The non-C pseudo code (C does not support local functions) in the following code
presents a similar scenario:
void main(void) {
void tmp0(void) {
tmp0();
h();
tmp0();
g();
f(1); f(2);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
258 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
In a next step, the compiler detects that the code "f(1); f(2);" occurs twice. The Compiler
generates a second local function:
void main(void) {
void tmp1(void) {
f(1); f(2);
void tmp0(void) {
tmp1(); f(3);
tmp0();
h();
tmp0();
g();
tmp1();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 259
Compiler Option Details
main () calls tmp1 once directly and once indirectly using tmp0. These two call chains use a
different amount of stack. Because of this situation, it is not always possible to generate
correct debug information. For the local function tmp1, the compiler cannot state both
possible SP values, and therefore only states one of them. While debugging the other
state, the debugger declares local variables and the call chain invalid.
Tip
Switch off this optimization to debug your application. The
common code complicates the control flow. Also, the debugger
cannot distinguish between two distinct usages of the same
code. Setting a breakpoint in common code stops the
application and every use of it. It also stops the local variables
and the call frame if not displayed correctly, as explained
above.
Tip
Switch off this optimization to get faster code. For code
density, there are only a few cases that produce slower code.
This situation only occurs when other optimizations (such as
branch tail merging or peepholing) do not find a pattern.
Group
OPTIMIZATIONS
Scope
Compilation unit
Syntax
-Oi[=(c<code Size>|OFF)]
Arguments
<code Size>: Limit for inlining in code size
OFF: switching off inlining
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
260 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Default
None. If no <code Size> is specified, the compiler uses a default code size of 40 bytes.
Defines
None
Pragmas
#pragma INLINE
Description
This option enables inline expansion. If there is a #pragma INLINE before a function
definition, the Compiler replaces all calls of this function by the code of this function, if
possible.
Using the option -Oi=c0 switches off inlining. Functions marked with the #pragma INLINE
are still inlined. To disable inlining, use the -Oi=OFF option.
Example
-Oi
#pragma INLINE
/* ... */
The [ =c<n>] option extension inlines all functions with a size smaller than <n>. For
example, compiling with the option -oi=c100 enables inline expansion for all functions
with a size smaller than 100 bytes.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 261
Compiler Option Details
Restrictions
The following functions are not inlined:
• Functions with default arguments
• Functions with labels inside
• Functions with an open parameter list (" void f(int i,...);")
• Functions with inline assembly statements
• Functions using local static objects
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Oilib[=<arguments>]
Arguments
<arguments> are one or several of the following suboptions:
b: inline calls to strlen()
d: inline calls to fabs() or fabsf()
e: inline calls to memset()
f: inline calls to memcpy()
g: replace shifts left of 1 by array lookup
Default
None
Defines
None
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
262 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Description
This option enables the compiler to optimize specific known library functions to reduce
execution time. The Compiler frequently uses small functions such as strcpy(), strcmp(),
and so forth. The following functions are optimized:
• strcpy() (only available for ICG-based backends)
• strlen() (for example, strlen("abc"))
• abs() or fabs() (for example, `f = fabs(f);')
• memset()
(void)memset(&buf, 0, 50);
In this case, _memcpy_8bitCount, present in the ANSI library (string.c), replaces the
call to memcpy().
_PowOfTwo_8[val] replaces (char)1 << val if _PowOfTwo_8 is known at compile time. Similarly,
for 16-bit and for 32-bit shifts, the arrays _PowOfTwo_16 and _PowOfTwo_32 are used. These
constant arrays contain the values 1, 2, 4, 8.... They are declared in hidef.h. The compiler
performs this optimization only when optimizing for time.
Using-Oilib without arguments optimizes calls to all supported library functions.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 263
Compiler Option Details
The example code below compiles the function f with the -Oilib=a option (only available
for ICG-based backends)
void f(void) {
void g(void) {
s2 = s;
while(*s2++ = *ct++);
See also
-Oi: Inlining
Message C5920
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Ol<number>
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
264 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
*s = 0;
} while (*++s);
The following listing shows pseudo disassembly with the -Ol0 option:
Listing: With the -Ol0 Option (No Optimization, Pseudo Code)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 265
Compiler Option Details
loop:
LD s, Reg0
ST #0, [Reg0]
INC Reg0
ST Reg0, s
CMP [Reg0],#0
BNE loop
The following listing shows pseudo disassembly without the -Ol option (i.e., optimized).
Loads and stores from or to variable s disappear.
Listing: Without Option (Optimized, Pseudo Assembler)
loop:
ST #0, s
INC s
CMP s,#0
BNE loop
Example
-Ol1
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Ona
Arguments
None
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
266 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
None
Defines
None
Pragmas
None
Description
After optimization, the Compiler redefines variables that may be written by a pointer
indirection or an array access. This option prevents the Compiler from redefining these
variables, which allows you to reuse already-loaded variables or equivalent constants.
Use this option only when you are sure no real writes of aliases to a variable memory
location will occur.
Example
Do not compile with -Ona.
void main(void) {
int a = 0, *p = &a;
// Error() is called!
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 267
Compiler Option Details
OPTIMIZATIONS
Scope
Function
Syntax
Arguments
Use one of the following arguments for <option Char>:
-OnB
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
268 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Branch Optimizations
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Onbf
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option prevents the Compiler from combining sequences of bitfield assignments
containing constants. This simplifies debugging and makes the code more readable.
Example
Listing: Example Bitfield Definition
struct {
b0:1;
b1:1;
b2:1;
} bf;
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 269
Compiler Option Details
bf.b0 = 0;
bf.b1 = 0;
bf.b2 = 0;
// are cleared
Example
-Onbf
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Onbt
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
270 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option switches the ICG level branch tail merging off. This simplifies debugging
and produces more readable code.
The example in the following listing disassembles to the following pseudocode.
Listing: Example Function
void main(void) {
if(x > 0) {
y = 4;
} else {
y = 9;
Without -Onbt, the above example disassembles as shown in the following listing.
Listing: Case (1) Without -Onbt: (Pseudo Intermediate Code)
CMP x, 0
BLE else_label
LOAD reg, #4
BRA branch_tail
go_on: ...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 271
Compiler Option Details
With the -Obnt compiler option, Listing: Example Function listing disassembles as in the
following listing.
Listing: Case (2) with -Onbt: (Pseudo Intermediate Code)
CMP x, 0
BLE else_label
LOAD reg, #4
STORE y, reg
BRA go_on
STORE y, reg
go_on: ...
Example
-Onbt
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Onca
Arguments
None
Default
None
Defines
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
272 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Pragmas
None
Description
This option prevents the Compiler from folding constants over statement boundaries. All
arithmetical operations are coded. This option must be set when using the library
functions setjmp() and longjmp(), or the Compiler makes wrong assumptions (refer the
following listing).
Listing: Example with If Condition Always True
void main(void) {
jmp_buf env;
int k = 0;
if (setjmp(env) == 0) {
k = 1;
longjmp(env, 0);
Err(1);
Err(0);
Example
-Onca
Group
OPTIMIZATIONS
Scope
Function
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 273
Compiler Option Details
-Oncn
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option prevents the Compiler from folding constants when the resulting constant is
new. The option affects only those processors where constants are difficult to load (for
example, RISC processors). On other processors this option makes no change.
Listing: Example (Pseudo Code)
void main(void) {
int a = 1, b = 2, c, d;
c = a + b;
d = a * b;
a MOVE 1
b MOVE 2
c MOVE 3
d MOVE 2
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
274 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
a MOVE 1
b MOVE 2
c ADD a,b
d MOVE 2
The constant 3 is a new constant that does not appear in the source. The constant 2 is
already present, so it is still propagated.
Example
-Oncn
Group
OPTIMIZATIONS
Scope
Compilation unit
Syntax
-OnCopyDown
Arguments
None
Default
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 275
Compiler Option Details
Defines
None
Pragmas
None
Description
Startup code usually clears all global variables to zero (zero out) and copies any non-zero
initialization values to the variables (copy down). Because of this, it is not necessary to
copy zero values unless the usual startup code is modified. If a modified startup code
contains a copy down but not a zero out, use this option to prevent the compiler from
removing the initialization.
NOTE
The case of a copy down without a zero out is unusual. Because
the copy down needs much more space than the zero out, code
usually contains copy down and zero out, zero out alone, or
neither.
In the HIWARE format, the object-file format permits the Compiler to remove single
assignments in a structure or array initialization. In the ELF format, the Compiler
optimizes only when the whole array or structure is initialized with zero.
NOTE
This option controls the optimizations done in the compiler.
However, the linker might further optimize the copy down or
the zero out.
Example
int i=0;
int arr[10]={1,0,0,0,0,0,0,0,0,0};
Using this option, the compiler does not generate a copy down for i.
The initialization with zero optimization shown for the arr array only works in the
HIWARE format. The ELF format requires initializing the whole array to zero.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
276 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
OPTIMIZATIONS
Scope
Compilation Unit
Syntax
-OnCstVar
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option allows you to switch OFF the replacement of CONST variable by the constant
value.
Example
int i;
void myfun(void) {
i = MyConst;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 277
Compiler Option Details
Without the -OnStVar option, the compiler replaces each occurrence of MyConst with its
constant value 5; that is, i = MyConst becomes i = 5;. The Compiler optimizes the Memory
or ROM needed for the MyConst constant variable as well. Setting the -OnCstVar option
avoids this optimization. Use this option only if you want unoptimized code.
Group
OPTIMIZATIONS
Scope
Function
Syntax
-One
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
This option prevents the Compiler from reusing common subexpressions, such as array
indexes and array base addresses. The code size may increase. The low-level CSE does
not have the alias problems of the frontend CSE and is therefore switched on by default.
The two CSE optimizations do not cover the same cases. The low-level CSE has a finer
granularity but does not handle all cases of the frontend CSE.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
278 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Use this option only to generate more readable code for debugging.
Listing: Example (Abstract Code)
void main(int i) {
int a[10];
a[i] = a[i-1];
Listing: Case (1) Without Option (Optimized) listing shows a case that does not use -One
and Listing: Case (2) -One (Not Optimized, Readable) shows a case that uses -One.
Listing: Case (1) Without Option (Optimized)
tmp1 LD i
tmp2 LSL tmp1,#1
tmp4 ADR a
tmp6 LD (tmp5)
2(tmp5) ST tmp6
tmp1 LD i
tmp2 LSL tmp1,#1
tmp4 ADR a
tmp9 LD (tmp5)
(tmp8) ST tmp9
Example
-One
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 279
Compiler Option Details
Group
OPTIMIZATIONS
Scope
Function
Syntax
Arguments
Use one of the following arguments for <option Char>:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
280 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Defines
None
Pragmas
None
Description
If -OnP is specified, the Compiler disables the whole peephole optimizer. To disable only a
single peephole optimization, use the optional syntax -OnP=<char>. For example:
Suboption -OnP=m (Disable peephole JSR to JMP optimization)
The compiler replaces a JSR- RTS sequence with a single JMP instruction. This saves single-
byte code and 2-byte stack spaces. To avoid this optimization, use the -onp=m option.
With -onp=m:
...
JSR Subroutine
RTS
Without -onp=m:
...
JMP Subroutine
Example
-OnP=m
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 281
Compiler Option Details
Group
OPTIMIZATIONS
Scope
Compilation Unit
Syntax
-OnPMNC
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Before assigning a pointer to a member in C++, you must ensure that the pointer to the
member is not NULL in order to generate correct and safe code. In embedded systems
development, the difficulty becomes generating the denser code while avoiding overhead
whenever possible (this NULL check code is a good example). This option enables you to
switch off the code generation for the NULL check.
Example
-OnPMNC
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
282 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Ont[={%|&|*|+|-|/|0|1|7|8|9|?|^|a|b|c|d|e| f|h|i|l|m|n|o|p|q|r|s|t|u|v|w|||~}]
Arguments
%: Disable mod optimization
&: Disable bit and optimization
*: Disable mul optimization
+: Disable plus optimization
-: Disable minus optimization
/: Disable div optimization
0: Disable and optimization
1: Disable or optimization
7: Disable extend optimization
8: Disable switch optimization
9: Disable assign optimization
?: Disable test optimization
a: Disable statement optimization
b: Disable constant folding optimization
c: Disable compare optimization
d: Disable binary operation optimization
e: Disable constant swap optimization
f: Disable condition optimization
g: Disable compare size optimization
h: Disable unary minus optimization
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 283
Compiler Option Details
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
284 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
This option disables the tree optimizer. Use this option for debugging and to force the
Compiler to produce `straightforward' code. Note that the optimizations below are just
examples for the classes of optimizations.
Using this option with the arguments below disables the optimizations.
-Ont=~ disables optimization of `~~i' into `i'
-Ont=| disables optimization of ` i|0xffff' into ` 0xffff'
-Ont=w disables optimization of ` if (1) i = 0;' into `i = 0;'
-Ont=v disables optimization of ` do ... while(0)' into `...'
-Ont=u disables optimization of ‘while (cond) break;' into ‘cond;', provided there are no
labels within the 'while' statement list.
-Ont=t disables optimization of ` for(;;) ...' into ` while(1) ...'
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 285
Compiler Option Details
fibo.c -Ont
Group
OPTIMIZATIONS
Scope
Function
Syntax
-OnX
Arguments
None
Default
None
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 287
Compiler Option Details
None
Description
Using this option prevents the Compiler from converting stack pointer-relative accesses
into X-relative accesses. The frame optimizer tries to convert all SP-relative accesses
(local variables, spills) into shorter and faster X-relative accesses. In addition, the
Compiler traces the value of H:X and removes useless TSX and AIX instructions. Using -OnX
to switch the frame optimizer off facilitates debugging.
Example
-OnX
Group
OPTIMIZATIONS
Scope
Function
Syntax
-Or
Arguments
None
Default
None
Defines
__OPTIMIZE_REG__
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
288 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Description
Allocate local variables ( char or int) in registers. The number of local variables allocated
in registers depends on the number of available registers. Use this option when using
variables as loop counters or switch selectors or when the processor requires register
operands for multiple operations (for example, RISC processors). Compiling with this
option may increase your code size (spill and merge code).
NOTE
This optimization may increase code complexity when using
High-Level Languages, making debugging more difficult.
NOTE
For some backends this option has no effect and code does not
change.
Listing: Allocate Local Variables into Registers Example
-Or
int main(void) {
int a,b;
return a + b;
tmp1 LD a
tmp2 LD b
RET tmp3
RET tmp1
Group
OPTIMIZATIONS
Scope
Function
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 289
Compiler Option Details
Syntax
-O(us|u|nu)
Arguments
us: yes, but never if HLI present in function (default)
u: always (even if HLI is present in function)
nu: never
Default
-Ous: Optimization enabled for functions containing no inline assembler code
Defines
None
Pragmas
None
Description
Optimizes dead assignments. The Compiler removes assignments to unused local
variables.
There are three possible settings for this option: -Ou is given, -Onu is given, or -Ous is
given:
-Ou:
Always optimize dead assignments (even if HLI is present in current function). The
Compiler does not consider inline assembler accesses.
NOTE
This option is unsafe when inline assembler code contains
accesses to local variables.
-Onu:
No optimization occurs. This generates the best possible debug information, and
produces larger and slower code.
-Ous: Optimize dead assignments if HLI is not present in the current function.
NOTE
The compiler is not aware of longjmp() or setjmp() calls. These
and similar functions may generate a control flow which the
Compiler does not recognize. Therefore, either do not use local
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
290 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
void main(int x) {
f(x);
Group
LANGUAGE
Scope
Compilation Unit
Syntax
-Pe
Arguments
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 291
Compiler Option Details
Default
None
Defines
None
Pragmas
None
Description
The Compiler handles escape sequences in macros in an include directive, similar to the
way the Compiler handles escape sequences in a printf() instruction:
#include STRING
produces an error:
and:
printf(STRING);
C:
myfile
Using the -Pe option, the Compiler ignores escape sequences in strings that contain a
DOS drive letter (' a' - ' z', ' A' - ' Z') followed by a colon ' :' and a backslash ' \'.
Enable the -Pe option to make the Compiler handle strings in include directives
differently from other strings. Escape sequences in include directive strings are not
evaluated.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
292 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
#include "C:\names.h"
results in exactly the same include filename as in the source file (" C:\names.h"). If the
filename appears in a macro, the Compiler does not distinguish between filename usage
and normal string usage with escape sequence. This occurs because the macro STRING has
to be the same for the include and the printf() call, as shown below:
void main(void) {
Use this option to use macros for include files. This prevents escape sequence scanning in
strings that start with a DOS drive letter ('a - 'z', 'A' - 'Z') followed by a colon ' :' and a
backslash ' \'. With the option set, the above example includes the ' C:\n.h' file and calls
printf() with "C:\n.h").
Example
-Pe
Group
INPUT
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 293
Compiler Option Details
Compilation Unit
Syntax
-Pio
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Includes every header file only once. Whenever the compiler reaches an #include
directive, the compiler checks the named file against the files already included. If the file
has already been read, the compiler ignores the #include directive. It is common practice
to protect header files from multiple inclusion by conditional compilation, as shown
below:
#ifndef _MY_FILE_H_
#define _MY_FILE_H_
#endif /* _MY_FILE_H_ */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
294 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
When #ifndef and #define directives are issued, the Compiler reads header file content
only once even when the header file is included several times. This solves many
problems as C-language protocol does not allow you to define structures (such as enums
or typedefs) more than once.
Using this option to protect all header files can safely accelerate compilation.
Do not use this option when a header file must be included twice, for example, the file
contains macros which are set differently at different inclusion times. In those instances,
use #pragma ONCE: Include Once to accelerate the inclusion of safe header files which
do not contain macros of that nature.
Example
-Pio
See also
#pragma ONCE: Include Once
Group
STARTUP
This option cannot be specified interactively.
Scope
None
Syntax
-Prod=<file>
Arguments
<file>: name of a project or project directory
Default
None
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 295
Compiler Option Details
None
Description
This option can only be specified at the command line while starting the application. It
cannot be specified in any other circumstances.
Use this option to make the application open the file as a configuration file. When <file>
names a directory instead of a file, the application appends the default name project.ini.
When loading fails, a message box appears.
Example
compiler.exe -prod=project.ini
Group
CODE GENERATION
Scope
Application
Syntax
-Qvtp(none|far|near)
Arguments
None
Default
-Qvptnone
Defines
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
296 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Pragmas
None
Description
Using a virtual function in C++ requires an additional pointer to virtual function tables.
The Compiler cannot access the pointer and generates the pointer in every class object
when virtual function tables are associated.
NOTE
Specifying qualifiers not supported by the Backend or CPU has
no effect (refer Backend).
Example
-QvtpFar
This sets the qualifier for virtual table pointers to __far, which enables placement of the
virtual tables into a __FAR_SEG segment (if the Backend or CPU supports __FAR_SEG
segments).
Group
OPTIMIZATIONS
Scope
Application
Syntax
-Rp(t|e)
Arguments
t: Pass large return value by pointer, always with temporary
e: Pass large return value by pointer and temporary elimination
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 297
Compiler Option Details
-Rpe
Defines
None
Pragmas
None
Description
The Compiler supports this option even though returning a `large' return value may not
be as efficient as using an additional pointer. The Compiler introduces an additional
parameter for the return value if the return value cannot be passed in registers.
Consider the code in the following listing.
Listing: Example Code
S s;
void main(void) {
s = F();
In the above case, with -Rpt, the code will appear as in the following listing.
Listing: Pass Large Return Value by Pointer
void main(void) {
S tmp;
F(&tmp);
The above approach is always correct but not efficient. Instead, pass the destination
address directly to the callee. This makes it unnecessary to declare a temporary and a
struct copy in the caller (i.e., -Rpe), as shown in the following listing.
Listing: Pass Large Return Value by Pointer and Temporary Elimination
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
298 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
F(&s);
The above example may produce incorrect results for rare cases (for example, if the F()
function returns something overlapping s). Because the Compiler does not detect such
rare cases, two options are provided: the -Rpt (always correct, but inefficient), or -Rpe
(efficient) options.
Group
LANGUAGE.
Scope
Application
Syntax
-T<Type Format>
Arguments
<Type Format>: See below
Default
Depends on target, see Compiler Backend
Defines
To deal with different type sizes, the Compiler predefines one of the following define
groups (refer the following listing).
Listing: Define Groups
__CHAR_IS_SIGNED__
__CHAR_IS_UNSIGNED__
__CHAR_IS_8BIT__
__CHAR_IS_16BIT__
__CHAR_IS_32BIT__
__CHAR_IS_64BIT__
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 299
Compiler Option Details
__SHORT_IS_8BIT__
__SHORT_IS_16BIT__
__SHORT_IS_32BIT__
__SHORT_IS_64BIT__
__INT_IS_8BIT__
__INT_IS_16BIT__
__INT_IS_32BIT__
__INT_IS_64BIT__
__ENUM_IS_8BIT__
__ENUM_IS_16BIT__
__ENUM_IS_32BIT__
__ENUM_IS_64BIT__
__ENUM_IS_SIGNED__
__ENUM_IS_UNSIGNED__
__PLAIN_BITFIELD_IS_SIGNED__
__PLAIN_BITFIELD_IS_UNSIGNED__
__LONG_IS_8BIT__
__LONG_IS_16BIT__
__LONG_IS_32BIT__
__LONG_IS_64BIT__
__LONG_LONG_IS_8BIT__
__LONG_LONG_IS_16BIT__
__LONG_LONG_IS_32BIT__
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
300 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
__LONG_LONG_IS_64BIT__
__FLOAT_IS_IEEE32__
__FLOAT_IS_IEEE64__
__FLOAT_IS_DSP__
__DOUBLE_IS_IEEE32__
__DOUBLE_IS_IEEE64__
__DOUBLE_IS_DSP__
__LONG_DOUBLE_IS_IEEE32__
__LONG_DOUBLE_IS_IEEE64__
__LONG_DOUBLE_IS_DSP__
__LONG_LONG_DOUBLE_IS_IEEE32__
__LONG_LONG_DOUBLE_IS_IEEE64__
__LONG_LONG_DOUBLE_DSP__
__VTAB_DELTA_IS_8BIT__
__VTAB_DELTA_IS_16BIT__
__VTAB_DELTA_IS_32BIT__
__VTAB_DELTA_IS_64BIT__
__PTRMBR_OFFSET_IS_8BIT__
__PTRMBR_OFFSET_IS_16BIT__
__PTRMBR_OFFSET_IS_32BIT__
__PTRMBR_OFFSET_IS_64BIT__
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 301
Compiler Option Details
This option allows configurable type settings. The syntax of the option is: -
T{<type><format>}
NOTE
Flexible type management does not support 8-bit int
definitions. When generating code, use minimal startup code
instead of ANSI startup code.
For <type>, specify one of the keys listed in the following table.
Table 7-10. Data Type Keys
Type Key
char 'c'
short 's'
int 'i'
long 'L'
long long 'LL'
float 'f'
double 'd'
long double 'Ld'
long long double 'LLd'
enum 'e'
sign plain bitfield 'b'
virtual table delta size 'vtd'
pointer to member offset size 'pmo'
NOTE
Keys are not case-sensitive, for example, both ' f' and ' F' may
be used for the type " float".
Change the sign of type char or of the enumeration type with a prefix placed before the
key for the char key. Refer the following table.
Table 7-11. Keys for Signed and Unsigned Prefixes
Sign Prefix Key
signed 's'
unsigned 'u'
Change the sign of the plain bitfield type with the options shown in the following table.
Plain bitfields are bitfields defined or declared without an explicit signed or unsigned
qualifier, for example, int field:3. Using this option, you can specify whether to handle
the int in the previous example as signed int or as unsigned int.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
302 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
NOTE
This option may not be available on all targets. Also the default
setting may vary. For more information, refer to the topic Sign
of Plain Bitfields.
Table 7-12. Keys for Signed and Unsigned Bitfield Prefixes
Sign Prefix Key
plain signed bitfield 'bs'
plain unsigned bitfield 'bu'
Not all formats may be available for a target. See Backend for supported formats.
NOTE
At least one type for each basic size (1, 2, 4 bytes) must be
available. You must set a size for all types, at least equal to one.
See Backend for default settings.
NOTE
Enumeration types have the type ` signed int' by default for
ANSI-C compliance.
Use the -Tpmo option to change the pointer to a member offset value type. The default
setting is 16 bits. The Compiler uses the pointer to the member offset as a C++ pointer to
members only.
-Tsc sets ´ char´ to ´ signed char´
Listing: Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 303
Compiler Option Details
-Tsc1s2i2L4LL4f2d4Ld4LLd4e2 denotes:
signed char with 8 bits (sc1)
double, long double and long long double with IEEE64 (d4Ld4LL4)
Listing: Restrictions
For integrity and ANSI compliance, the following rules must be true:
sizeof(char) <= sizeof(short)
NOTE
Do not set char to 16 bits and int to 8 bits.
Change type sizes with caution. Type sizes must be consistent over the whole application.
The libraries delivered with the Compiler are compiled with the standard type settings.
Use caution when changing type sizes for under or overflows (for example, assigning a
large value to a small object), as shown in the following example:
Example
Setting the size of char to 16 bits:
-Tc2
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
304 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-Tsc2
Setting char to 8 bits and unsigned, int to 32 bits and long long to 32 bits:
-Tuc1i4LL4
-Tf2d4
The -Tvtd option allows you to change the delta value type inside virtual function tables.
The default setting is 16 bits.
You can also set this option using the dialog box in the Graphical User Interface.
See also
Sign of Plain Bitfields
Group
VARIOUS
Scope
None
Syntax
-V
Arguments
None
Default
None
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 305
Compiler Option Details
None
Description
Prints the internal subversion numbers of the Compiler component parts and the location
of current directory.
NOTE
This option can determine the current directory of the
Compiler.
Example
-V produces the following list:
Directory: \software\sources\c
Group
HOST
Scope
Compilation Unit
Syntax
-View<kind>
Arguments
<kind> is one of:
Window: Application window has default window size
Min: Application window is minimized
Max: Application window is maximized
Hidden: Application window is not visible (only if arguments)
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
306 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WErrFile(On|Off)
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 307
Compiler Option Details
None
Default
-WErrFileOn
Defines
None
Pragmas
None
Description
Using this option, the Compiler uses a return code to report errors back to the tools.
When errors occur, 16-bit window environments use err.log files, containing a list of
error numbers, to report the errors. If no errors occur, the 16-bit window environments
delete the err.log file. Using UNIX or WIN32, the return code makes the err.log file
unnecessary when only UNIX or WIN32 applications are involved.
NOTE
If you use a 16-bit maker with this tool, you must create the
error file to signal any errors.
Example
-WErrFileOn
This creates or deletes the err.log file when the application finishes.
-WErrFileOff
Group
MESSAGES
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
308 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Scope
Compilation Unit
Syntax
-Wmsg8x3
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Some editors (early versions of WinEdit) expect the filename in Microsoft message
format (8.3 format). That means the filename can have up to eight characters and no more
than a three-character extension. Longer filenames are possible when you use Win95 or
WinNT. This option truncates the filename to the 8.3 format.
Example
See also
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 309
Compiler Option Details
Group
MESSAGES
Scope
Function
Syntax
-WmsgCE<
RGB>
Arguments
<RGB>: 24-bit RGB (red/green/blue) value
Default
Defines
None
Pragmas
None
Description
This option changes the error message color. The specified value must be an RGB (Red/
Green/Blue) value and must be specified in decimal.
Example
-WmsgCE255 changes the error messages to blue
Group
MESSAGES
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
310 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Scope
Function
Syntax
-WmsgCF<
RGB>
Arguments
<RGB>: 24-bit RGB (red/green/blue) value
Default
Defines
None
Pragmas
None
Description
This option changes the color of a fatal message. The specified value must be an RGB
(Red/Green/Blue) value and must be specified in decimal.
Example
-WmsgCF255 changes the fatal messages to blue
Group
MESSAGES
Scope
Function
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 311
Compiler Option Details
-WmsgCI<
RGB>
Arguments
<RGB>: 24-bit RGB (red/green/blue) value
Default
Defines
None
Pragmas
None
Description
This option changes the color of an information message. The specified value must be an
RGB (Red/Green/Blue) value and must be specified in decimal.
Example
-WmsgCI255 changes the information messages to blue
Group
MESSAGES
Scope
Function
Syntax
-WmsgCU<
RGB>
Arguments
<RGB>: 24-bit RGB (red/green/blue) value
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
312 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Default
Defines
None
Pragmas
None
Description
This option changes the color of a user message. The specified value must be an RGB (Red/
Green/Blue) value and must be specified in decimal.
Example
-WmsgCU255 changes the user messages to blue
Group
MESSAGES
Scope
Function
Syntax
-WmsgCW<
RGB>
Arguments
<RGB>: 24-bit RGB (red/green/blue) value
Default
Defines
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 313
Compiler Option Details
None
Pragmas
None
Description
This option changes the color of a warning message. The specified value must be an RGB
(Red/Green/Blue) value and must be specified in decimal.
Example
-WmsgCW0 changes the warning messages to black
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WmsgFb[v|m]
Arguments
v: Verbose format
m: Microsoft format
Default
-WmsgFbm
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
314 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Use this option to start the Compiler with additional arguments (for example, files and
Compiler options). If you start the Compiler with arguments (for example, from the Make
Tool or with the `%f' argument from the CodeWright IDE), the Compiler compiles the
files in a batch mode. No Compiler window is visible and the Compiler terminates after
job completion.
When compiling in batch mode, the Compiler writes messages to a file instead of to the
screen. This file contains only the compiler messages (refer examples below).
In batch mode, the Compiler writes messages (errors, warnings, information messages)
using a Microsoft message format.
The v argument changes the default format from the Microsoft format (only line
information) to a more verbose error format with line, column, and source information.
NOTE
Using the verbose message format may slow down the
compilation.
Example
void myfun(void) {
int i, j;
for(i=0;i<1;i++);
The Compiler may produce the following file if it is running in batch mode (for example,
started from the Make tool):
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 315
Compiler Option Details
-WmsgFbv
int i, j;
for(i=0;i<1;i++);
void myfun(void) {
int i, j;
See also
ERRORFILE: Error Filename Specification environment variable
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
316 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WmsgFi[v|m]
Arguments
v: Verbose format
m: Microsoft format
Default
-WmsgFiv
Defines
None
Pragmas
None
Description
This option sets the Compiler message format to interactive mode (that is, with a visible
window) if the Compiler starts without additional arguments (for example, files and
Compiler options).
The Compiler uses the verbose error file format to write the Compiler messages (errors,
warnings, information messages).
The m argument changes the format from the default verbose format (with source, line and
column information) to the Microsoft format (only line information).
NOTE
Using the Microsoft format may increase compilation speed.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 317
Compiler Option Details
void myfun(void) {
int i, j;
for(i=0;i<1;i++);
The Compiler may produce the following error output in the Compiler window if it is
running in interactive mode:
Top: X:\C.C
int i, j;
for(i=0;i<1;i++);
-WmsgFim
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
318 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Top: X:\C.C
See also
ERRORFILE: Error Filename Specification
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
Group
MESSAGES
Scope
Function
Syntax
-WmsgFob<string>
Arguments
<string>: format string (see below).
Default
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 319
Compiler Option Details
This option modifies the default message format in batch mode. The following table lists
supported formats (assuming that the source file is X:\Freescale\mysourcefile.cpph):
Table 7-14. Message Format Specifiers
Format Description Example
%s Source Extract
%p Path X:\Freescale\
%f Path and name X:\Freescale\mysourcefile
%n filename mysourcefile
%e Extension .cpph
%N File (8 chars) mysource
%E Extension (3 chars) .cpp
%l Line 3
%c Column 47
%o Pos 1234
%K Uppercase kind ERROR
%k Lowercase kind error
%d Number C1815
%m Message text
%% Percent %
\n New line
%" A " if the filename, if the path or the
extension contains a space
%' A ' if the filename, the path or the
extension contains a space
Example
See also
ERRORFILE: Error Filename Specification
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
-WmsgFonp: Message Format for No Position Information
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
320 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
MESSAGES
Scope
Function
Syntax
-WmsgFoi<string>
Arguments
<string>: format string (See below.)
Default
-WmsgFoi"\\n>> in \"%f%e\", line %l, col >>%c, pos %o\n%s\n%K %d: %m\n"
Defines
None
Pragmas
None
Description
This option modifies the default message format in interactive mode. The following table
lists supported formats (assuming that the source file is X:\Freescale\mysourcefile.cpph):
Table 7-15. Message Format Specifiers
Format Description Example
%s Source Extract
%p Path X:\sources\
%f Path and name X:\sources\mysourcefile
%n filename mysourcefile
%e Extension .cpph
%N File (8 chars) mysource
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 321
Compiler Option Details
Example
-WmsgFoi"%f%e(%l): %k %d: %m\n"
See also
ERRORFILE: Error Filename Specification
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
-WmsgFonp: Message Format for No Position Information
-WmsgFob: Message Format for Batch Mode
Group
MESSAGES
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
322 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Function
Syntax
-WmsgFonf<string>
Arguments
<string>: format string (See below.)
Default
Defines
None
Pragmas
None
Description
Sometimes there is no file information available for a message (for example, when a
message is unrelated to a specific file). Then <string> defines the message format string to
use. The following table lists the supported formats.
Table 7-16. Message Format Specifiers
Format Description Example
%K Uppercase kind ERROR
%k Lowercase kind error
%d Number C1815
%m Message text
%% Percent %
\n New line
%" A " if the filename, if the path or the
extension contains a space
%' A ' if the filename, the path or the
extension contains a space
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 323
Compiler Option Details
See also
ERRORFILE: Error Filename Specification
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
-WmsgFonp: Message Format for No Position Information
-WmsgFoi: Message Format for Interactive Mode
Group
MESSAGES
Scope
Function
Syntax
-WmsgFonp<string>
Arguments
<string>: format string (See below.)
Default
Defines
None
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
324 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Description
Sometimes there is no position information available for a message (for example, when a
message is unrelated to a certain position). Then <string> defines the message format
string to use. The following table lists the supported formats.
Table 7-17. Message Format Specifiers
Format Description Example
%K Uppercase type ERROR
%k Lowercase type error
%d Number C1815
%m Message text
%% Percent %
\n New line
%" A " if the filename, if the path or the
extension contains a space
%' A ' if the filename, the path, or the
extension contains a space
Example
Seealso
ERRORFILE: Error Filename Specification
-WmsgFb (-WmsgFbv, -WmsgFbm): Set Message File Format for Batch Mode
-WmsgFi (-WmsgFiv, -WmsgFim): Set Message Format for Interactive Mode
-WmsgFonp: Message Format for No Position Information
-WmsgFoi: Message Format for Interactive Mode
Group
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 325
Compiler Option Details
MESSAGES
Scope
Compilation Unit
Syntax
-WmsgNe<number>
Arguments
<number>: Maximum number of error messages
Default
50
Defines
None
Pragmas
None
Description
This option sets the maximum number of error messages that display while the Compiler
is processing.
NOTE
Subsequent error messages which depend upon a previous error
message may not process correctly.
Example
-WmsgNe2
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
326 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WmsgNi<number>
Arguments
<number>: Maximum number of information messages
Default
50
Defines
None
Pragmas
None
Description
This option limits the number of information messages that the Compiler logs.
Example
-WmsgNi10
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 327
Compiler Option Details
Group
MESSAGES
Scope
None
Syntax
-WmsgNu[={a|b|c|d|e}]
Arguments
a: Disable messages about include files
b: Disable messages about reading files
c: Disable messages about generated files
d: Disable messages about processing statistics
e: Disable informal messages
t: Disable type of messages
Default
None
Defines
None
Pragmas
None
Description
The application produces messages that are not in the following normal message
categories: WARNING, INFORMATION, ERROR, or FATAL. This option disables
user messages and allows only those messages in the normal message categories
(WARNING, INFORMATION, ERROR, or FATAL). This reduces the number of
messages, and simplifies the error parsing of other tools.
a: Disables the application from generating information about all included files.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
328 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
b: Disables messages about reading files (for example, the files used as input).
c: Disables messages informing about generated files.
d: Disables information about statistics (for example, code size, RAM or ROM usage and
so on).
e: Disables informal messages (for example, memory model, floating point format, etc.).
NOTE
Depending on the application, the Compiler may not recognize
all suboptions. For compatibility, the Compiler ignores
unrecognized suboptions.
Example
-WmsgNu=c
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WmsgNw<number>
Arguments
<number>: Maximum number of warning messages
Default
50
Defines
None
Pragmas
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 329
Compiler Option Details
None
Description
This option sets the number of warning messages.
Example
-WmsgNw15
Group
MESSAGES
Scope
Function
Syntax
-WmsgSd<number>
Arguments
<number>: Message number to be disabled, for example, 1801
Default
None
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
330 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
This option prevents messages from appearing in the error output. This option cannot be
used in #pragma OPTION: Additional Options. Use this option only with #pragma
MESSAGE: Message Setting.
Example
-WmsgSd1801
Group
MESSAGES
Scope
Function
Syntax
-WmsgSe<number>
Arguments
<number>: Message number to be an error, for example, 1853
Default
None
Defines
None
Pragmas
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 331
Compiler Option Details
This option changes a message to an error message. This option cannot be used in
#pragma OPTION: Additional Options. Use this option only with #pragma MESSAGE:
Message Setting.
Example
COMPOTIONS=-WmsgSe1853
See also
-WmsgSd: Setting a Message to Disable
-WmsgSi: Setting a Message to Information
-WmsgSw: Setting a Message to Warning
Group
MESSAGES
Scope
Function
Syntax
-WmsgSi<number>
Arguments
<number>: Message number to be an information, for example, 1853
Default
None
Defines
None
Pragmas
None
Description
This option sets a message to an information message. This option cannot be used with
#pragma OPTION: Additional Options. Use this option only with #pragma MESSAGE:
Message Setting.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
332 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Example
-WmsgSi1853
See also
-WmsgSd: Setting a Message to Disable
-WmsgSe: Setting a Message to Error
-WmsgSw: Setting a Message to Warning
Group
MESSAGES
Scope
Function
Syntax
-WmsgSw<number>
Arguments
<number>: Error number to be a warning, for example, 2901
Default
None
Defines
None
Pragmas
None
Description
This option sets a message to a warning message. This option cannot be used with
#pragma OPTION: Additional Options. Use this option only with #pragma MESSAGE:
Message Setting.
Example
-WmsgSw2901
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 333
Compiler Option Details
See also
-WmsgSd: Setting a Message to Disable
-WmsgSe: Setting a Message to Error
-WmsgSi: Setting a Message to Information i
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WOutFile(On|Off)
Arguments
None
Default
Error listing file is created
Defines
None
Pragmas
None
Description
This option controls whether the Compiler creates an error listing file. The error listing
file contains a list of all messages and errors that occur during processing. The name of
the listing file is controlled by the ERRORFILE: Error Filename Specification
environment variable.
NOTE
You can also obtain this feedback without the error listing file
by using pipes to the calling application.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
334 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
Example
-WOutFileOn
-WOutFileOff
Group
MESSAGES
Scope
Function
Syntax
-Wpd
Arguments
None
Default
None
Defines
None
Pragmas
None
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 335
Compiler Option Details
Description
This option prompts the Compiler to issue an ERROR message instead of a WARNING
message when the Compiler encounters an implicit declaration. This occurs if the
Compiler does not have a prototype for the called function.
This option helps prevent parameter-passing errors, which can only be detected at
runtime. It requires prototyping each called function before use. Correct ANSI behavior
assumes that parameters are correct for the stated call.
This option is the same as using -WmsgSe1801.
Example
-Wpd
main() {
char a, b;
myfunc(a, b, c)
char a, b, c;
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
336 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
See also
Message C1801
-WmsgSe: Setting a Message to Error
Group
MESSAGES
Scope
Compilation Unit
Syntax
-WStdout(On|Off)
Arguments
None
Default
Output is written to stdout
Defines
None
Pragmas
None
Description
This option enables the usual standard streams with Windows applications. Text written
into the streams does not appear anywhere unless explicitly requested by the calling
application. This option determines whether error file text written to the error file is also
written into the stdout file.
Example
-WStdoutOn
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 337
Compiler Option Details
-WErrFileOff
Group
MESSAGES
Scope
Function
Syntax
-W1
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Inhibits INFORMATION message reporting. Only WARNING and ERROR messages
are generated.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
338 Freescale Semiconductor, Inc.
Chapter 7 Compiler Options
-W1
See also
-WmsgNi: Maximum Number of Information Messages (enter <number>)
Group
MESSAGES
Scope
Function
Syntax
-W2
Arguments
None
Default
None
Defines
None
Pragmas
None
Description
Suppresses all messages of type INFORMATION and WARNING. Only ERROR
messages are generated.
Example
-W2
See also
-WmsgNi: Maximum Number of Information Messages (enter <number>)
-WmsgNw: Maximum Number of Warning Messages (enter <number>)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 339
Compiler Option Details
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
340 Freescale Semiconductor, Inc.
Chapter 8
Compiler Predefined Macros
The C-language ANSI standard requires the Compiler to predefine some macros. The
Compiler provides the predefined macros listed in the following table.
Table 8-1. Macros Defined by the Compiler
Macro Description
__LINE__ Line number in the current source file
__FILE__ Name of the source file where it appears
__DATE__ The date of compilation as a string
__TIME__ The time of compilation as a string
__STDC__ Set to 1 if the -Ansi: Strict ANSI compiler option is given.
Otherwise, accept additional keywords (not ANSI standard).
The following tables lists all Compiler defines with their associated names and options.
NOTE
If these macros have no value, the Compiler treats them as if
they had been defined as shown: #define __HIWARE__
It is also possible to log all predefined Compiler defines to a file using the -Ldf: Log
Predefined Defines to File compiler option.
This chapter covers the following topics:
• Compiler Vendor Defines
• Product Defines
• Data Allocation Defines
• Defines for Compiler Option Settings
• Option Checking in C Code
• ANSI-C Standard Types size_t, wchar_t, and ptrdiff_t Defines
• Object-File Format Defines
• Bitfield Defines
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 341
Compiler Vendor Defines
The following table show s the defines identifying the Compiler vendor. Compilers in the
USA may also be sold by ARCHIMEDES.
Table 8-2. Compiler Vendor Identification Defines
Name Defined
__HIWARE__ always
__MWERKS__ always, set to 1
The following table shows the defines identifying the Compiler. The Compiler is a HI-
CROSS+ Compiler (V5.0.x).
Table 8-3. Compiler Identification Defines
Name Defined
__PRODUCT_HICROSS_PLUS__ Defined for V5.0 Compilers
__DEMO_MODE__ Defined if the Compiler is running in demo mode
__VERSION__ Defined and contains the version number, e.g., it is set to
5013 for a Compiler V5.0.13, or set to 3140 for a Compiler
V3.1.40
The Compiler provides two macros that define data organization in memory: Little
Endian (least significant byte first in memory) or Big Endian (most significant byte first
in memory).
The Compiler provides the data a llocation macros listed in the following table.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
342 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
The following example illustrates the difference between little and big endian.
Listing: Little vs. Big Endian
unsigned long L = 0x87654321;
unsigned short s = *(unsigned short*)&L; // BE: 0x8765,LE: 0x4321
The following t able lists defines for miscellaneous compiler option settings.
Table 8-5. Defines for Miscellaneous Compiler Option Settings
Name Defined
__STDC__ -Ansi
__TRIGRAPHS__ -Ci
__CNI__ -Cni
__OPTIMIZE_FOR_TIME__ -Ot
__OPTIMIZE_FOR_SIZE__ -Os
You can also check the source to determine if an option is active. The EBNF syntax is:
OptionActive = __OPTION_ACTIVE__ ("string")
#endif
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 343
ANSI-C Standard Types size_t, wchar_t, and ptrdiff_t Defines
int i;
if (__OPTION_ACTIVE__("-or")) {
i=2;
You can check all valid preprocessor options (e.g., options given at the command line,
via the default.env or project.ini files, but not options added with the #pragma OPTION:
Additional Options). You perform the same check in C code using -Odocf and #pragma
OPTION.
As a parameter, only the option itself is tested and not a specific argument of an option.
See the following listing for a valid and an invalid use of __OPTION_ACTIVE__.
Listing: Using __OPTION_ACTIVE__
#if __OPTION_ACTIVE__("-D") /* true if any -d option is given */
#if __OPTION_ACTIVE__("-DABS") /* specific argument - not allowed */
If for some reason the Compiler cannot check the specified option (i.e., options that no
longer exist), the Compiler issues the message "C1439: illegal pragma __OPTION_ACTIVE__".
ANSI provides some standard defines in stddef.h to deal with the implementation of
defined object sizes.
The following listing shows part of the contents of stdtypes.h (included from stddef.h).
Listing: Type Definitions of ANSI-C Standard Types
/* size_t: defines the maximum object size type */
#if defined(__SIZE_T_IS_UCHAR__)
#elif defined(__SIZE_T_IS_USHORT__)
#elif defined(__SIZE_T_IS_UINT__)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
344 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
#elif defined(__SIZE_T_IS_ULONG__)
#else
#endif
#if defined(__PTRDIFF_T_IS_CHAR__)
#elif defined(__PTRDIFF_T_IS_SHORT__)
#elif defined(__PTRDIFF_T_IS_INT__)
#elif defined(__PTRDIFF_T_IS_LONG__)
#else
#endif
#if defined(__WCHAR_T_IS_UCHAR__)
#elif defined(__WCHAR_T_IS_USHORT__)
#elif defined(__WCHAR_T_IS_UINT__)
#elif defined(__WCHAR_T_IS_ULONG__)
#else
#endif
The following table lists define s that deal with other possible implementations:
Table 8-6. Defines for Other Implementations
Macro Description
__SIZE_T_IS_UCHAR__ Defined if the Compiler expects size_t in stddef.h to be
unsigned char.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 345
ANSI-C Standard Types size_t, wchar_t, and ptrdiff_t Defines
The following tables show the default settings of the ANSI-C Compiler standard types
size_t and ptrdiff_t.
The following table lists the size_t macro settings for the HC08 target.
Table 8-7. size_t Macro Settings
size_t Macro Defined
__SIZE_T_IS_UCHAR__ -Mt
__SIZE_T_IS_USHORT__ Never
__SIZE_T_IS_UINT__ -Ms, -Mb
__SIZE_T_IS_ULONG__ Never
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
346 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
The following table lists the ptrdiff_t macro settings for the HC08 target.
Table 8-8. ptrdiff_t Macro Settings
ptrdiff_t Macro Defined
__PTRDIFF_T_IS_CHAR__ -Mt
__PTRDIFF_T_IS_SHORT__ Never
__PTRDIFF_T_IS_INT__ -Ms
__PTRDIFF_T_IS_LONG__ Never
22 /-7 == -3; 22 % -7 == 1
#else
22 / 7 == 3; 22 % 7 == +1
22 /-7 == -3; 22 % -7 == +1
#endif
The following table lists the modulus macro for the HC08 target.
Table 8-9. Modulus Macro Settings
Name Defined
__MODULO_IS_POSITIV__ Never
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 347
Object-File Format Defines
The Compiler defines some macros to identify the object-file format. These macros
appear primarily in object file-spec ific startup code. The following table lists these
defines.
Table 8-10. Object-File Format Defines
Name Defined
__HIWARE_OBJECT_FILE_FORMAT__ -Fh
__ELF_OBJECT_FILE_FORMAT__ -F1, -F2
The Compiler provides six predefined bitfield allocation macros (as shown in the
following listing):
Listing: Predefined Bitfield Allocation Macros
__BITFIELD_MSBIT_FIRST__ /* defined if bitfield allocation
starts with MSBit */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
348 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
__BITFIELD_MSBYTE_FIRST__ /* allocation of bytes starts with
MSByte */
LSByte */
Using the defines listed above, you can write compatible code over different Compiler
vendors even if the bitfield allocation differs. Note that the allocation order of bitfields is
important (as shown in the following listing).
Listing: Using Predefined Bitfield Allocation Macros
struct {
/* Memory layout of I/O port:
MSB LSB
size: 1 1 1 4 1
*/
#ifdef __BITFIELD_MSBIT_FIRST__
#elif defined(__BITFIELD_LSBIT_FIRST__)
#else
#endif
} MyIOport;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 349
Bitfield Defines
If the basic bitfield allocation unit in the Compiler is a byte, the bitfield memory
allocation is always from the most significant BYTE to the least significant BYTE (big
endian). For example, __BITFIELD_MSBYTE_FIRST__ is defined as shown in the following
listing.
Listing: __BITFIELD_MSBYTE_FIRST__
struct {
unsigned char a:8;
} MyIOport2;
/* LSBIT_FIRST */ /* MSBIT_FIRST */
NOTE
There is no standard way to allocate bitfields. Allocation may
vary from compiler to compiler even for the same target. Using
bitfields for I/O register access is non-portable and inefficient
due to the masking involved in unpacking individual fields. We
recommend that you use regular bit-and (&) and bit-or (|)
operations for I/O port access.
The Compiler provides two predefined macros for enabled/disabled type-size reduction
(as shown in the following listing). With type-size red uction enabled, the Compiler is
free to reduce the type of a bitfield. For example, if the size of a bitfield is 3, the
Compiler uses the char type.
Listing: Bitfield Type-Reduction Macros
__BITFIELD_TYPE_SIZE_REDUCTION__ /* defined if type-size
reduction is enabled */
reduction is disabled */
It is possible to write compatible code over different Compiler vendors and get optimized
bitfields (as shown in the following listing).
Listing: Effects of Bitfield Type-Size Reduction
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
350 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
struct{
long b1:4;
long b2:4;
} myBitfield;
31 7 3 0
--------------------------------
|########################|b2|b1|
-BfaTSRoff
--------------------------------
7 3 0
---------
|b2 |b1 |
-BfaTSRon
---------
For some architectures, the sign of a plain bitfield does not follow standard rules.
Normally for the bitfield in the following listing, myBits is signed, because plain int is also
signed.
Listing: Signed Bitfield
struct _bits {
int myBits:3;
} bits;
To implement this bitfield as an unsigned bitfield, use the code in the following listing.
Listing: Unsigned Bitfield
struct _bits {
unsigned int myBits:3;
} bits;
However, some architectures must overwrite this behavior for Embedded Application
Binary Interface ( EABI) compliance. Under those circumstances, the Compiler uses the -
T: Flexible Type Management option, if supported. The option affects the following
defines (as shown in the following listing):
Listing: Defines Affected by -T Option Use
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 351
Bitfield Defines
__PLAIN_BITFIELD_IS_SIGNED__ /* defined if plain bitfield is signed */
The following table identifies the implementation in the Backend for the HC08 target.
Table 8-11. Macros for HC08
Name Defined
__BITFIELD_MSBIT_FIRST__ -BfaBMS
__BITFIELD_LSBIT_FIRST__ -BfaBLS
__BITFIELD_MSBYTE_FIRST__ always
__BITFIELD_LSBYTE_FIRST__ never
__BITFIELD_MSWORD_FIRST__ always
__BITFIELD_LSWORD_FIRST__ never
__BITFIELD_TYPE_SIZE_REDUCTION__ -BfaTSRon
__BITFIELD_NO_TYPE_SIZE_REDUCTION__ -BfaTSRoff
__PLAIN_BITFIELD_IS_SIGNED__ Always
__PLAIN_BITFIELD_IS_UNSIGNED__ Never
Flexible Type Management sets the defines to identify the type sizes. the following the
following lists these defines.
Table 8-12. Type Information Defines
Name Defined
__CHAR_IS_SIGNED__ See the -T option or Backend
__CHAR_IS_UNSIGNED__ See the -T option or Backend
__CHAR_IS_8BIT__ See the -T option or Backend
__CHAR_IS_16BIT__ See the -T option or Backend
__CHAR_IS_32BIT__ See the -T option or Backend
__CHAR_IS_64BIT__ See the -T option or Backend
__SHORT_IS_8BIT__ See the -T option or Backend
__SHORT_IS_16BIT__ See the -T option or Backend
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
352 Freescale Semiconductor, Inc.
Chapter 8 Compiler Predefined Macros
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 353
Bitfield Defines
The following table identifies specific implementations in the Backend for the HC08
target.
Table 8-13. HC08-Specific Defines
Name Defined
__HCS08__ Always
__HCS08__ -Cs08
__NO_RECURSION__ Never
__BANKED__ -Mb
__SMALL__ -Ms
__TINY__ -Mt
__MMU__ -MMU
__PTR_SIZE_1__ -Mt
__PTR_SIZE_2__ -Ms
__PTR_SIZE_3__ Never
__PTR_SIZE_4__ Never
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
354 Freescale Semiconductor, Inc.
Chapter 9
Compiler Pragmas
A pragma, as shown in the following listing, defines information that passes from the
Compiler Frontend to the Compiler Backend, without affecting the parser. In the
Compiler, the effect of a pragma on code generation starts at the point of its definition
and ends with the end of the next function. Exceptions to this rule are the pragmas ONCE
and NO_STRING_CONSTR (see #pragma ONCE: Include Once and #pragma
NO_STRING_CONSTR: No String Concatenation during Preprocessing), which are
valid for only one file.
Listing: Syntax of a Pragma
#pragma pragma_name [optional_arguments]
The optional_arguments value depends on the pragma that you use. Some pragmas do not
take arguments.
NOTE
A pragma directive accepts a single pragma with optional
arguments. Do not place more than one pragma name in a
pragma directive. The following example uses incorrect syntax:
#pragma ONCE NO_STRING_CONSTR
The following section describes all pragmas that affect the frontend. All other pragmas
affect only the code generation process and are described in the back-end section. The
topics included are as follows:
• Pragma Details
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 355
Pragma Details
This section describes each Compiler-available pragma. The pragmas are listed in
alphabetical order and are divided into separate tables. The following table lists and
defines the topics that appear in the description of each pragma.
Table 9-1. Pragma Documentation Topics
Topic Description
Scope Defines scope of pragma in which it is valid (refer to the table
"Definition of Items that can Appear in a Pragma's Scope
Topic").
Syntax Specifies pragma syntax in an EBNF format.
Synonym Lists a synonym for the pragma or none, if no synonym exists.
Arguments Describes and lists optional and required arguments for the
pragma.
Default Shows the default setting for the pragma or none.
Description Provides a detailed description of the pragma and its use.
Example Gives an example of usage and effects of the pragma.
See also Names related sections.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
356 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Scope
Next pragma CODE_SEG
Syntax
Synonym
CODE_SECTION
Arguments
<Modif>: Some of the following strings may be used:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 357
Pragma Details
Description
This pragma specifies the allocated function segment. The segment modifiers also specify
the function's calling convention. The CODE_SEG pragma sets the current code segment. This
segment places all new function definitions. Also, all function declarations, when they
occur, get the current code segment.
The CODE_SEG pragma affects function declarations as well as definitions. Ensure that all
function declarations and their definitions are in the same segment.
The synonym CODE_SECTION means exactly the same as CODE_SEG. See the following
listing for some CODE_SEG examples.
Listing: CODE_SEG examples
/* in a header file */
#pragma CODE_SEG __FAR_SEG MY_CODE1
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
358 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
extern void h(void);
NOTE
Not all compiler backends support a FAR calling convention.
NOTE
The calling convention can also be specified with a supported
keyword. The default calling convention is chosen with the
memory model.
The following listing shows some errors when using pragmas.
Listing: Improper Pragma Usage
#pragma DATA_SEG DATA1
#pragma CODE_SEG DATA1
void g(void);
void g(void) {}
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 359
Pragma Details
HC(S)08 Backend
Segmentation
Linker Manual
#pragma CONST_SEG: Constant Data Segment Definition
#pragma DATA_SEG: Data Segment Definition
#pragma STRING_SEG: String Segment Definition
-Cc: Allocate Const Objects into ROM compiler option
Scope
Next pragma CONST_SEG
Syntax
Synonym
CONST_SECTION
Arguments
Modif
NOTE
Do not use a compatibility alias in new code. Aliases exist for
backwards compatibility purposes only.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
360 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
The segment modifiers are backend-dependent. Refer to HC(S)08 Backend to find the
supported modifiers and their meanings. The __SHORT_SEG modifier specifies a segment
accessed with 8-bit addresses.
<Name>: The name of the segment. This name must be used in the link parameter file on the
left side of the assignment in the PLACEMENT part. Refer to the linker manual for details.
Default
DEFAULT
Description
This pragma allocates constant variables into the current data segment. The Compiler
then allocates the segment to specific addresses in the link parameter file. The pragma
CONST_SEG sets the current const segment. This segment places all constant variable
declarations. Set the segment to default with:
#pragma DATA_SEG defines the current data segment in the HIWARE object-file format,
unless the -Cc option is specified, and until the first #pragma CONST_SEG occurs in the source
(see #pragma DATA_SEG: Data Segment Definition and -Cc: Allocate Const Objects
into ROM). The-Cc option always allocates constants in constant segments in the ELF
object-file format, and after the first #pragma CONST_SEG.
The CONST_SEG pragma also affects constant variable declarations and definitions. Ensure
that all constant variable declarations and definitions are in the same const segment.
Some compiler optimizations assume that objects having the same segment are placed
together. Backends supporting linear data access, for example, may set the page register
only once for two accesses to two different variables in the same segment. This is also the
case for the DEFAULT segment. When using a paged access to variables, place one segment
on one page in the link parameter file.
When #pragma INTO_ROM is active, the current const segment is not used (see #pragma
INTO_ROM: Put Next Variable Definition into ROM).
The synonym CONST_SECTION means exactly the same as CONST_SEG.
Examples
The following listing shows examples of the CONST_SEG pragma.
Listing: Examples of the CONST_SEG Pragma
/* Use the pragmas in a header file */
#pragma CONST_SEG __SHORT_SEG SHORT_CONST_MEMORY
extern const int i_short;
#pragma CONST_SEG CUSTOM_CONST_MEMORY
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 361
Pragma Details
extern const int j_custom;
#pragma CONST_SEG DEFAULT
The following listing shows code that uses the CONST_SEG pragma improperly.
Listing: Improper use of the CONST_SEG Pragma
#pragma DATA_SEG CONST1
#pragma CONST_SEG CONST1 /* error: segment name has different types!*/
#pragma CONST_SEG C2
#pragma CONST_SEG __SHORT_SEG C2 // error: segment name has modifiers!
#pragma CONST_SEG CONST1
extern int i;
See also
HC(S)08 Backend
Segmentation
Linker Manual
#pragma CODE_SEG: Code Segment Definition
#pragma DATA_SEG: Data Segment Definition
#pragma STRING_SEG: String Segment Definition
-Cc: Allocate Const Objects into ROM compiler option
#pragma INTO_ROM: Put Next Variable Definition into ROM
Scope
Next pragma CREATE_ASM_LISTING
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
362 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Syntax
Synonym
None
Arguments
ON: Creates an assembler include file for all subsequent defines or objects
OFF: Does not create an assembler include file for all subsequent defines or objects
Default
OFF
Description
This pragma controls whether subsequent defines or objects are printed into the
assembler include file.
A new file generates only when the -La compiler option is specified together with a
header file containing #pragma CREATE_ASM_LISTING ON.
Example
#pragma CREATE_ASM_LISTING ON
See also
-La: Generate Assembler Include File
Generating Assembler Include Files (-La Compiler Option)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 363
Pragma Details
Scope
Next pragma DATA_SEG
Syntax
Synonym
DATA_SECTION
Arguments
<Modif>: Some of the following strings may be used:
__SHORT_SEG (compatibility alias: SHORT)
__DIRECT_SEG (compatibility alias: DIRECT)
__NEAR_SEG (compatibility alias: NEAR)
__CODE_SEG (compatibility alias: CODE)
__FAR_SEG (compatibility alias: FAR)
NOTE
Do not use a compatibility alias in new code. It only exists for
backwards compatibility.
The segment modifiers are backend-dependent. Refer to HC(S)08 Backend to find the
supported modifiers and their meanings. The __SHORT_SEG modifier specifies a segment
accessed with 8-bit addresses.
<Name>: The name of the segment. This name must be used in the link parameter file on the
left side of the assignment in the PLACEMENT part. Please refer to the linker manual for
details.
Default
DEFAULT
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
364 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
This pragma allocates variables into the current data segment. This segment is then
moved to specific addresses in the link parameter file.
The DATA_SEG pragma sets the current data segment. This segment is used to place all
variable declarations. Set the default segment with:
Constants are also allocated in the current data segment in the HIWARE object-file
format when the option -cc is not specified and no #pragma CONST_SEG occurred in the
source. When using the -Cc: Allocate Const Objects into ROM compiler option and the
ELF object-file format, constants are not allocated in the data segment.
The DATA_SEG pragma also affects data declarations, as well as definitions. Ensure that all
variable declarations and definitions are in the same segment.
Some compiler optimizations assume that objects having the same segment are together.
Backends supporting banked data, for example, may set the page register only once if two
accesses to two different variables in the same segment are done. This is also the case for
the DEFAULT segment. When using a paged access to constant variables, put one segment on
one page in the link parameter file.
When #pragma INTO_ROM: Put Next Variable Definition into ROM is active, the current data
segment is not used.
The DATA_SECTION synonym means exactly the same as DATA_SEG.
Example
The following listing is an example using the DATA_SEG pragma.
Listing: Using the DATA_SEG Pragma
/* in a header file */
#pragma DATA_SEG __SHORT_SEG SHORT_MEMORY
int i_short;
int j_custom;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 365
Pragma Details
#pragma DATA_SEG DEFAULT
void main(void) {
j = 5;
The following listing shows code that uses the DATA_SEG pragma improperly.
Listing: Improper Use of the DATA_SEG Pragma
#pragma DATA_SEG DATA1
#pragma CONST_SEG DATA1 /* error: segment name has different types! */
extern int i;
See also
HC(S)08 Backend
Segmentation
Linker section of the Build Tool Utilities manual
#pragma CODE_SEG: Code Segment Definition
#pragma CONST_SEG: Constant Data Segment Definition
#pragma STRING_SEG: String Segment Definition
-Cc: Allocate Const Objects into ROM compiler option
#pragma INTO_ROM: Put Next Variable Definition into ROM
Scope
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
366 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Function Definition
Syntax
#pragma INLINE
Synonym
None
Arguments
None
Default
None
Description
This pragma directs the Compiler to inline the next function in the source.
The pragma produces the same results as using the -Oi compiler option.
Example
The following code demonstrates using an INLINE pragma to inline a function.
int i;
#pragma INLINE
i = 12;
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 367
Pragma Details
See also
#pragma NO_INLINE: Do not Inline Next Function Definition
-Oi: Inlining compiler option
Scope
Data Definition
Syntax
#pragma INTO_ROM
Synonym
None
Arguments
None
Default
None
Description
This pragma forces the next (non-constant) variable definition to be const (together with
the -Cc compiler option).
The pragma is active only for the next single variable definition. A following segment
pragma (CONST_SEG, DATA_SEG, CODE_SEG) disables the pragma.
NOTE
This pragma is only useful for the HIWARE object-file format
(and not for ELF/DWARF).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
368 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
NOTE
This pragma forces the Compiler to recognize a non-constant
(means normal `variable') object as const. If the variable already
is declared as `const' in the source, this pragma is not needed.
This pragma was introduced to cheat the constant handling of
the compiler, and shall not be used any longer. It is supported
for legacy reasons only. Do not use in new code
Example
The following listing is an example using the INTO_ROM pragma.
Listing: Using the INTO_ROM Pragma
#pragma INTO_ROM
char *const B[] = {"hello", "world"};
#pragma INTO_ROM
#pragma INTO_ROM
See also
-Cc: Allocate Const Objects into ROM compiler option
Scope
Function
Syntax
Synonym
None
Arguments
NAME: Identifier specific to the purpose of this LINK_INFO.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 369
Pragma Details
#else
#endif
Scope
Function
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
370 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
#pragma LOOP_UNROLL
Synonym
None
Arguments
None
Default
None
Description
This pragma performs loop unrolling for the next function. This is the same as setting the
-Cu option for a subsequent single function.
Example
In the following example, the pragma unrolls a for loop.
Listing: Using the LOOP_UNROLL Pragma to Unroll a For Loop
#pragma LOOP_UNROLL
void F(void) {
...
See also
#pragma NO_LOOP_UNROLL: Disable Loop Unrolling
-Cu: Loop Unrolling
Scope
Line
Syntax
#pragma mark {any text}
Synonym
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 371
Pragma Details
None
Arguments
None
Default
None
Description
This pragma adds an entry into the CodeWarrior IDE function list. It also helps to
introduce faster code lookups by providing a menu entry which jumps directly to a code
position. #pragma mark inserts a separator line.
NOTE
The CodeWarrior IDE actually handles this pragma; the
compiler ignores it. The CodeWarrior IDE scans opened source
files for this pragma. It is not necessary to recompile a file
when this pragma is changed. The IDE updates its menus
instantly.
Example
In the following listing, the pragma accesses declarations and definitions.
Listing: Using the MARK Pragma
#pragma mark local function declarations
static void inc_counter(void);
#pragma mark -
counter++;
ref++;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
372 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Scope
Compilation Unit or until the next MESSAGE pragma
Syntax
Synonym
None
Arguments
<CNUM>: Number of message to be set in the C1234 format
Default
None
Description
This pragma selectively sets messages to information, warning, disable, or error.
NOTE
This pragma does not affect messages produced during
preprocessing, because pragma parsing is done during normal
source parsing but not during preprocessing.
NOTE
This pragma (as other pragmas) must be specified outside of the
function scope. It is not possible to change a message inside a
function or for a part of a function.
Example
In the following listing, parentheses ( ) were left out.
Listing: Using the MESSAGE Pragma
/* treat C1412: Not a function call, */
/* address of a function, as error */
void f(void);
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 373
Pragma Details
f; /* () is missing, but still legal in C */
See also
-WmsgSd: Setting a Message to Disable
-WmsgSe: Setting a Message to Error
-WmsgSi: Setting a Message to Information
-WmsgSw: Setting a Message to Warning
Scope
Function
Syntax
#pragma NO_ENTRY
Synonym
None
Arguments
None
Default
None
Description
This pragma suppresses the generation of the entry code and is useful for inline assembler
functions.
The code generated in a function with #pragma NO_ENTRY instructs the compiler to rely on
the user's stack handling code. It is assumed that the user ensures safe stack use.
NOTE
Not all backends support this pragma. Some still generate entry
code even when this pragma is specified.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
374 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Example
The following listing uses the NO_ENTRY pragma (along with others) to avoid any Compiler
code generation. All code is written in inline assembler.
Listing: Blocking Compiler-Generated Function Management Instructions
#pragma NO_ENTRY
#pragma NO_EXIT
#pragma NO_FRAME
#pragma NO_RETURN
void Func0(void) {
...
See also
#pragma NO_EXIT: No Exit Code
#pragma NO_FRAME: No Frame Code
#pragma NO_RETURN: No Return Instruction
Scope
Function
Syntax
#pragma NO_EXIT
Synonym
None
Arguments
None
Default
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 375
Pragma Details
None
Description
This pragma suppresses generation of the exit code and is useful for inline assembler
functions.
The code generated in a function with #pragma NO_EXIT instructs the compiler to rely on
the user's stack handling code. It is assumed that the user ensures safe stack use.
NOTE
Not all backends support this pragma. Some still generate exit
code even when this pragma is specified.
Example
The following listing uses the NO_EXIT pragma (along with others) to avoid any Compiler
code generation. All code is written in inline assembler.
Listing: Blocking Compiler-Generated Function Management Instructions
#pragma NO_ENTRY
#pragma NO_EXIT
#pragma NO_FRAME
#pragma NO_RETURN
void Func0(void) {
...
See also
#pragma NO_ENTRY: No Entry Code
#pragma NO_FRAME: No Frame Code
#pragma NO_RETURN: No Return Instruction
Scope
Function
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
376 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
Syntax
#pragma NO_FRAME
Synonym
None
Arguments
None
Default
None
Description
This pragma suppresses the generation of frame code and is useful for inline assembler
functions.
The code generated in a function with #pragma NO_FRAME instructs the compiler to rely on
the user's stack handling code. It is assumed that the user ensures safe stack use.
NOTE
Not all backends support this pragma. Some still generate frame
code even when this pragma is specified.
Example
The following listing uses the NO_FRAME pragma (along with others) to avoid any Compiler
code generation. All code is written in inline assembler.
Listing: Blocking Compiler-Generated Function Management Instructions
#pragma NO_ENTRY
#pragma NO_EXIT
#pragma NO_FRAME
#pragma NO_RETURN
void Func0(void) {
...
See also
#pragma NO_ENTRY: No Entry Code
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 377
Pragma Details
Scope
Function
Syntax
#pragma NO_INLINE
Synonym
None
Arguments
None
Default
None
Description
This pragma prevents the Compiler from inlining the next function in the source. Use this
pragma to avoid inlining a function normally inlined by the -Oi option.
Example
Listing: Using the NO_INLINE Pragma to Prevent Function Inlining
// (With option -Oi)
int i;
#pragma NO_INLINE
i = 12;
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
378 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
See also
#pragma INLINE: Inline Next Function Definition
-Oi: Inlining compiler option
Scope
Function
Syntax
#pragma NO_LOOP_UNROLL
Synonym
None
Arguments
None
Default
None
Description
Using this pragma prevents loop unrolling for the next function definition (as shown in
the following listing), even when the -Cu command line option is given.
Example
Listing: Using the NO_LOOP_UNROLL Pragma to Temporarily Halt Loop
Unrolling
#pragma NO_LOOP_UNROLL
void F(void) {
...
See also
#pragma LOOP_UNROLL: Force Loop Unrolling
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 379
Pragma Details
Scope
Function
Syntax
#pragma NO_RETURN
Synonym
None
Arguments
None
Default
None
Description
This pragma suppresses the generation of the return instruction (return from subroutine or
return from interrupt). Use this pragma when you care about the return instruction itself
or when you want the code to fall through to the first instruction of the next function.
This pragma does not suppress the generation of the exit code (e.g., deallocation of local
variables or compiler-generated local variables). The pragma suppresses the generation of
the return instruction.
NOTE
To use this feature to fall through to the next function, you must
switch off smart linking in the Linker, because the next function
may be not referenced from somewhere else. In addition, ensure
that both functions are in a linear segment. To be on the safe
side, allocate both functions into a segment that only has a
linear memory area.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
380 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
The following listing places some functions into a special named segment. An operating
system calls each function two seconds after calling the previous function. Using this
pragma, functions do not return, but fall directly through to the next function, saving code
size and execution time.
Listing: Blocking Compiler-Generated Function Return Instructions
#pragma CODE_SEG CallEvery2Secs
#pragma NO_RETURN
void Func0(void) {
...
} /* fall through!!!! */
#pragma NO_RETURN
void Func1(void) {
...
} /* fall through */
...
void FuncLast(void) {
...
See also
#pragma NO_ENTRY: No Entry Code
#pragma NO_EXIT: No Exit Code
#pragma NO_FRAME: No Frame Code
Scope
Compilation Unit
Syntax
#pragma NO_STRING_CONSTR
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 381
Pragma Details
Synonym
None
Arguments
None
Default
None
Description
This pragma switches off the special handling of # as a string constructor, and is valid for
the remainder of the file in which it appears. This is useful when a macro contains inline
assembler statements using this character (e.g., for IMMEDIATE values).
Example
The following pseudo assembly-code macro shows the use of the pragma. Without the
pragma, the Compiler handles # as a string constructor, which is undesired behavior.
Listing: Using a NO_STRING_CONSTR Pragma to Alter the Meaning of #
#pragma NO_STRING_CONSTR
#define HALT(x) __asm { \
LOAD Reg,#3 \
HALT x, #255\
See also
Using Immediate-Addressing Mode in HLI Assembler Macros
Scope
File
Syntax
#pragma ONCE
Synonym
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
382 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
None
Arguments
None
Default
None
Description
When this pragma appears in a header file, the Compiler opens and reads the file only
once. This increases compilation speed.
Example
#pragma ONCE
See also
-Pio: Include Files Only Once compiler option
Scope
Compilation Unit or until next pragma OPTION
Syntax
#pragma OPTION (ADD [<Handle>]{<Option>}|DEL ({Handle}|ALL))
Synonym
None
Arguments
<Handle>: This identifier allows selective deletion of added options.
<Option>: A valid option string enclosed in double quote (") characters
Default
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 383
Pragma Details
This pragma allows the addition of options inside the source code during file compilation.
NOTE
The options given on the command line or in a configuration
file cannot be changed in any way.
Use the ADD command to add additional options to the current options. A handle may be
given optionally.
Use the DEL command to remove all options with a specific handle or use the ALL keyword
to remove all options.
NOTE
Only options added using #pragma OPTION ADD can be deleted
using #pragma OPTION DEL.
All keywords and the handle are case-sensitive.
Restrictions:
• The -D: Macro Definition (preprocessor definition) compiler option is not allowed.
Use a " #define" preprocessor directive instead.
• The -OdocF: Dynamic Option Configuration for Functions compiler option is not
allowed. Specify this option on the command line or in a configuration file instead.
• The Message Setting compiler options have no effect:
• -WmsgSd: Setting a Message to Disable
• -WmsgSe: Setting a Message to Error
• -WmsgSi: Setting a Message to Information
• -WmsgSw: Setting a Message to Warning
Use #pragma MESSAGE: Message Setting instead.
• Only options concerning tasks during code generation are used. Options controlling
the preprocessor, for example, have no effect.
• No macros are defined for specific options.
• Only options having function scope may be used.
• The given options must not specify a conflict to any other given option.
• The pragma is not allowed inside declarations or definitions.
Example
The following example illustrates compiling a single function with the additional -Or
option.
Listing: Using the OPTION Pragma
#pragma OPTION ADD function_main_handle "-Or"
int sum(int max) { /* compiled with -or */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
384 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
int i, sum=0;
sum += i;
return sum;
void f(void) {
#ifdef __CNI__
/* ERROR, macros are not defined for options */
#endif
Scope
Next pragma STRING_SEG
Syntax
#pragma STRING_SEG (<Modif><Name>|DEFAULT)
Synonym
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 385
Pragma Details
STRING_SECTION
Arguments
<Modif>: Some of the following strings may be used:
__DIRECT_SEG (compatibility alias: DIRECT)
__NEAR_SEG (compatibility alias: NEAR)
__CODE_SEG (compatibility alias: CODE)
__FAR_SEG (compatibility alias: FAR)
__LINEAR_SEG
NOTE
Do not use a compatibility alias in new code. Compatibility
aliases exist for backwards compatibility only. Some
compatibility alias names conflict with defines found in certain
header files. Avoid using compatibility alias names.
The __SHORT_SEG modifier specifies a segment that is accessed using 8-bit addresses. The
definitions of these segment modifiers are backend-dependent. Refer to HC(S)08
Backend to find the supported modifiers and their definitions.
<Name>: The name of the segment. This name must be used in the link parameter file on the
left side of the assignment in the PLACEMENT part. Refer to the linker manual for details.
Default
DEFAULT
Description
This pragma allocates strings into a linker segment called STRINGS. String segments may
have modifiers. The modifiers instruct the Compiler to access the strings in a special way
when necessary.
The linker treats segments defined with the pragma STRING_SEG like constant segments
defined with #pragma CONST_SEG and allocates the segments in ROM areas.
The pragma STRING_SEG sets the current string segment and places all new strings into the
current segment.
NOTE
The linker may support an overlapping allocation of strings
(e.g., the allocation of " CDE" inside of the string " ABCDE", so that
both strings together need only six bytes). When putting strings
into user-defined segments, the linker may no longer do this
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
386 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
void f(char*);
void main(void) {
f("String2");
See also
HC(S)08 Backend
Segmentation
Linker section of the Build Tool Utilities manual
#pragma CODE_SEG: Code Segment Definition
#pragma CONST_SEG: Constant Data Segment Definition
#pragma DATA_SEG: Data Segment Definition
Scope
Function Definition
Syntax
#pragma TEST_CODE CompOp <Size> {<HashCode>}
CompOp: ==|!=|<|>|<=|>=
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 387
Pragma Details
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
388 Freescale Semiconductor, Inc.
Chapter 9 Compiler Pragmas
You can also use the TEST_CODE pragma to detect when a different code is generated, as
shown in the following listing.
Listing: Using a Test_Code Pragma with a Hashcode
/* If the following pragma fails, check the code. */
/* If the code is OK, add the hashcode to the */
void main(void) {
f(2*i);
See also
Message C3601
Scope
Function Definition
Syntax
#pragma TRAP_PROC
Arguments
See HC(S)08 Backend.
Default
None
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 389
Pragma Details
This pragma marks a function as an interrupt function. Because interrupt functions may
need some special entry and exit code, you must use this pragma to mark interrupt
functions.
Do not use this pragma for declarations (e.g., in header files), as the pragma is valid for
the next definition.
See HC(S)08 Backend for details.
Example
The following listing marks the MyInterrupt() function as an interrupt function.
Listing: Using the TRAP_PROC Pragma to Mark an Interrupt Function
#pragma TRAP_PROC
void MyInterrupt(void) {
...
See also
interrupt Keyword
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
390 Freescale Semiconductor, Inc.
Chapter 10
ANSI-C Frontend
The Compiler Frontend reads the source files, does all the syntactic and semantic
checking, and produces intermediate representation of the program which then is passed
on to the backend to generate code. This section discusses features, restrictions, and
further properties of the ANSI-C Compiler frontend.
This chapter covers the following topics:
• Implementation Features
• ANSI-C Standard
• Floating-Point Formats
• Volatile Objects and Absolute Variables
• Bitfields
• Segmentation
• Optimizations
• Using Qualifiers for Pointers
• Defining C Macros Containing HLI Assembler Code
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 391
Implementation Features
• __near Keyword
• __va_sizeof__ Keyword
• interrupt Keyword
• __asm Keyword
• Intrinsic Functions
• Implementation-Defined Behavior
• Translation Limitations
10.1.1 Keywords
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
392 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
volatile
while
The Compiler supports the full set of preprocessor directives as required by the ANSI
standard, as shown in the following listing.
Listing: ANSI-C Preprocessor Directives
#if
#ifdef
#ifndef
#else
#elif
#endif
#define
#undef
#include
#pragma
#error
#line
The Compiler also supports the preprocessor operators defined, #, and ##. The special non-
ANSI directive #warning, which is the same as #error, issues a warning message.
The Compiler contains a language extension for ANSI-C. Use keywords to qualify
pointers to distinguish them or to mark interrupt routines.
The Compiler supports the following non-ANSI compliant keywords (see HC(S)08
Backend for semantics).
The topics covered here are as follows:
• Pointer Qualifiers
• Special Keywords
• Binary Constants (0b)
• Hexadecimal Constants ($)
• The #warning Directive
• Global Variable Address Modifier (@address)
• Variable Allocation using @ "SegmentName"
• Absolute Functions
• Absolute Variables and Linking
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 393
Implementation Features
Use pointer qualifiers to distinguish different pointer types (for example, for paging).
Some pointer qualifiers are also used to specify the calling convention to be used (for
example, if banking is available). Use __linear to access data in extended memory.
Listing: Pointer Qualifiers
__far (alias
far)
__near (alias
near)
__linear
To allow portable programming between different CPUs (or if the target CPU does not
support an additional keyword), include the defines listed below in the `hidef.h' header
file.
Listing: Define far and near in the hidef.h File
#define far /* no far keyword supported */
#define near /* no near keyword supported */
ANSI-C was not designed with embedded controllers in mind. The keywords listed in the
following listing do not conform to ANSI standards, but provide a way to achieve good
results from code used for embedded applications.
Listing: Special (Non-ANSI) Keywords
__alignof__
__va_sizeof__
__interrupt (alias
interrupt)
__asm (aliases
_asm and
asm)
NOTE
See the Non-ANSI Keywords section in the HC(S)08 Backend
for more details.You can use the __interrupt keyword to mark
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
394 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
Use binary notation for constants instead of hexadecimal constants or normal constants.
Note that binary constants are not allowed if the -Ansi: Strict ANSI compiler option is
switched on. Binary constants start with the 0b prefix, followed by a sequence of zeroes
or ones.
Listing: Using Binary Constants
#define myBinaryConst 0b01011
int i;
void main(void) {
i = myBinaryConst;
You can use Hexadecimal constants inside High Level Inline (HLI) Assembly. For
example, instead of 0x1234 you can use $1234.
NOTE
This is valid only for inline assembly.
#endif
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 395
Implementation Features
Use the global variable address modifier to assign global variables to specific addresses
and to access memory-mapped I/O ports. These variables, called absolute variables, have
the following syntax:
Declaration = <TypeSpec> <Declarator>[@<Address>|@"<Section>"]
[= <Initializer>];
This sets the PLACEMENT section in the linker parameter file. An older method of
accomplishing this is shown in the following listing.
Listing: Another Method of Assigning Global Variables to Specific Addresses
<segment_name> INTO READ_ONLY <Address> ;
Use the LINEAR attribute to specify linear addresses in extended memory. Since extended
memory is Flash memory, use const as the global variable.
Listing: Using LINEAR to Specify an Address
const char const_data @ LINEAR 0x01A6AB /*0x06A6AB*/ = 0x30;
Listing: Using the Global Variable Address Modifier shows a correct and incorrect
example of using the global variable address modifier and Listing: Corresponding Link
Parameter File Settings (PRM file) shows a possible PRM file that corresponds with
Listing: Using the Global Variable Address Modifier.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
396 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
void f() {
SECTIONS
END
PLACEMENT
END
int i@"tiny";
int j@"not_tiny";
int k@"tiny_b";
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 397
Implementation Features
With some pragmas in a common header file and with another macro definition, you can
allocate variables depending on the macro.
Declaration = <TypeSpec>
<Declarator>[@"<Section>"][=<Initializer>];
Variables declared and defined with the @"section" syntax behave exactly like variables
declared after their respective pragmas.
• is the type specifier, for example, int or char
<TypeSpec>
• <Declarator> is the identifier of your global object, for example, i, glob
• <Section> is the section name. Define the section name in the link parameter file as
well. For example, "MyDataSection".
• <Initializer> is the value to which the global variable is initialized.
Specify the section name using a section pragma before the declaration occurs as shown
in the following listings.
Listing: Examples of Section Pragmas
#pragma DATA_SEC __SHORT_SEG MY_SHORT_DATA_SEC
#pragma DATA_SEC MY_DATA_SEC
// MY_DATA_SECT
END
PLACEMENT
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
398 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
END
Tthe following listing demonstrates calling an absolute function (for example, a special
function in ROM) using normal ANSI-C.
Listing: Absolute Function
#define erase ((void(*)(void))(0xfc06))
void main(void) {
Special attention is needed if absolute variables are involved in the linker's link process.
Unless the absolute object is referenced by the application, the absolute object always
links in ELF/DWARF format, not HIWARE format. To force linking, switch off smart
linking in the Linker, or use the ENTRIES command in the linker parameter file.
NOTE
Interrupt vector entries are always linked.
The following example shows linker handling of different absolute variables.
Listing: Linker Handling of Absolute Variables
char i; /* zero out */
char j = 1; /* zero out, copy-down */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 399
Implementation Features
/* vector number two is downloaded with &MyISRfct */
Zero out means that the default startup code initializes the variables during startup. Copy
down means that the variable is initialized during the default startup. To download means
that the memory is initialized while downloading the application.
The keyword far is a synonym for __far, which is not allowed when the -Ansi: Strict
ANSI compiler option is present.
NOTE
Some Backends may not support this keyword. For more
information, refer to the topic Non-ANSI Keywords in
HC(S)08 Backend.
A __far pointer allows access to the whole memory range supported by the processor, not
just to the default data page. Use it to access memory-mapped I/O registers not located on
the data page. You can also use it to allocate constant strings in a ROM not on the data
page.
The __far keyword defines the calling convention for a function. Some backends support
special calling conventions which also set a page register when a function is called. This
enables you to use more code than the address space can usually accommodate. The
special allocation of such functions is not done automatically.
The topics covered here are as follows:
• Using __far Keyword for Pointers
• __far and Arrays
• __far and typedef Names
• __far and Global Variables
• __far and C++ Classes
• __far and C++ References
• Using __far Keyword for Functions
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
400 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
The keyword __far is a type qualifier like const and is valid only in the context of pointer
types and functions.The __far keyword (for pointers) always affects the last * to its left in
a type definition. The declaration of a __far pointer to a __far pointer to a character is:
char *__far * p;
NOTE
To declare a __far pointer, place the __ far keyword after the
asterisk: char *__far p;
The __far keyword does not appear in the context of the * type constructor in the
declaration of an array parameter, as shown:
void my_func (char a[37]);
Use one of two possible methods when declaring such an argument to a __far pointer:
void my_func (char a[37] __far);
or alternately
void my_func (char *__far a);
In the context of the [ ] type constructor in a direct parameter declaration, the __far
keyword always affects the first dimension of the array to its left. In the following
declaration, parameter a has type "__far pointer to array of 5 __far pointers to char":
void my_func (char *__far a[][5] __far);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 401
Implementation Features
If the array type has been defi ned as a typedef name, as in:
The parameter is a __far pointer to the first element of the array. This is equal to:
because a has type " __far pointer to ARRAY" instead of " __far pointer to int".
You can also use the __far keyword for global variables:
int __far i; // OK for global variables
This forces the Compiler to address the variable as if it has been declared in a __FAR_SEG
segment. Note that for the above variable declarations or definitions, the variables are in
the DEFAULT_DATA segment if no other data segment is active. Be careful when mixing __far
declarations or definitions within a non- __FAR_SEG data segment. Assuming that __FAR_SEG
segments use extended addressing mode and normal segments use direct addressing
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
402 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
mode, the following two examples ( the listings Acceptable, Consistent Declarations and
Mixing Extended Addressing and Direct Addressing Modes) clarify the resulting
behavior:
Listing: Acceptable, Consistent Declarations
#pragma DATA_SEG MyDirectSeg // use direct addressing mode
int i; // direct, segment MyDirectSeg
NOTE
The __far keyword global variables only affect the variable
addressing mode and NOT the allocation.
If a member function gets the modifier __far, the this pointer is a __far pointer in the
context of a call to that function. This is useful, for instance, if the owner class of the
function is not allocated on the default data page. See the following listing.
Listing: __far Member Functions
class A {
public:
void f(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 403
Implementation Features
/* normal version of member function A::f() */
};
void main(void)
With inheritance, it no longer suffices to use __far with member functions only. Instead,
the whole class should be qualified with the __far modifier. Thus, the compiler is
instructed to handle ' this' as a far pointer in all the contexts related to the declaration and
definition of that class, for example vptr initialization, assignment operator generation
etc. See the following listing.
Listing: _ _far modifier - Inheritance
class B __ far
{ ... }
class A __far : B
{ ... }
#pragma push
A a_far;
#pragma pop
NOTE
In case of inheritance, one should qualify both the derived and
the base class. If the modifier has been used for the derived
class only, the compiler will report the following warning:
You can apply the __far modifier to references. Use this option when the reference is to
an object outside of the default data page. See the following listing.
Listing: __far Modifier Applied to References
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
404 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
int j; // object j allocated outside the default data page
// (must be specified in the link parameter file)
void f(void) {
int &__far i = j;
};
This specifies a special calling convention for the __far keyword. Specify the __far
keyword before the function identifier:
If the function returns a pointer, you must write the __far keyword before the first asterisk
(" *").
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 405
Implementation Features
NOTE
See the Non-ANSI Keywords section in HC(S)08 Backend .
The near keyword is a synonym for __near. The near keyword is
only allowed when the -Ansi: Strict ANSI compiler option is
present.
You can use the __near keyword instead of the __far keyword. Use the __near keyword
when you must specify an explicit __near access and __far is the non-qualified pointer or
when you must explicitly specify the __near calling convention.
The __near keyword uses two semantic variations. Either it specifies a small function or
data pointer size or it specifies the __near calling convention.
Table 10-2. Interpretation of the __near Keyword
Declaration Allowed Type Description
int __near f(); OK __near function returning an int
int __near __far f(); error
__near f(); OK __near function returning an int
int __near * __far f(); OK __near function returning a __far
pointer to int
int __far *i; error
int * __near i; OK __far pointer to int
int * __far* __near i; OK __near pointer to __far pointer to int
int *__far (* __near f)(void) OK __near pointer to function returning a
__far pointer to int
void * __near (* f)(void) OK Pointer to function returning a __near
pointer to void
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
406 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
10.1.5.1 Compatibility
__far pointers and normal po inters are compatible. If necessary, the normal pointer is
extended to a __far pointer (subtraction of two pointers or assignment to a __far pointer).
In other cases, the frontend clips the __far pointer to a normal pointer (that is, the page
part is discarded).
Some processors align objects according to their type. The unary operator, __alignof__,
determines the alignment of a specific type. By providing any type, this operator returns
its alignment. This operator behaves in the same way as sizeof(type_name) operator. See
the target backend section to check which alignment corresponds to which fundamental
data type (if any is required) or to which aggregate type (structure, array).
This macro may be useful for the va_arg macro in stdarg.h, for example, to differentiate
the alignment of a structure containing four objects of four bytes from that of a structure
containing two objects of eight bytes. In both cases, the size of the structure is 16 bytes,
but the alignment may differ, as shown in the following listing:
Listing: va_arg Macro
#define va_arg(ap,type) \
(((__alignof__(type)>=8) ? \
: 0), \
((ap) += __va_rounded_size(type)),\
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 407
Implementation Features
(((type *) (ap))[-1]))
According to the ANSI-C specification, you must promote character arguments in open
parameter lists to int. The use of char in the va_arg macro to access this parameter may not
work as per the ANSI-C specification, as shown in the following listing.
Listing: Inappropriate use of char with the va_arg Macro
int f(int n, ...) {
int res;
va_end(l);
return res;
void main(void) {
char c=2;
int res=f(1,c);
With the __va_sizeof__ operator, the f function in the va_arg macro returns 2.
A safe implementation of the f function is to use va_arg(l, int) instead of va_arg(l, char).
The __va_sizeof__ unary operator, which is used exactly as the sizeof keyword, returns the
size of its argument after promotion as in an open parameter list, as shown in the
following listing.
Listing: __va_sizeof__ Examples
__va_sizeof__(char) == sizeof (int)
__va_sizeof__(float) == sizeof (double)
struct A { char a; };
NOTE
In ANSI-C, it is impossible to distinguish a 1-byte structure
without alignment or padding from a character variable in a
va_arg macro. They need a different space on the open
parameter calls stack for some processors.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
408 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
The __interrupt keyword is a synonym for interrupt, which is allowed when using the -
Ansi: Strict ANSI compiler option. See Non-ANSI Keywords in HC(S)08 Backend. One
of two ways can be used to specify a function as an interrupt routine:
• Use #pragma TRAP_PROC: Mark Function as Interrupt Function and adapt the
Linker parameter file.
• Use the non-standard interrupt keyword.
Use the non-standard interrupt keyword like any other type qualifier (as shown in the
following listing). The keyword specifies a function as an interrupt routine. It is followed
by a number specifying the entry in the interrupt vector that contains the address of the
interrupt routine.
If the non-standard interrupt keyword is not followed by any number, the interrupt
keyword functions the same as the TRAP_PROC pragma, specifying the function as an
interrupt routine. However, you must associate the number of the interrupt vector with
the name of the interrupt function by using the Linker's VECTOR directive in the Linker
parameter file.
Listing: Examples of the Interrupt Keyword
interrupt void f(); // OK
// same as #pragma TRAP_PROC,
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 409
Implementation Features
#asm
nop
nop
#endasm
To avoid using HLI for this purpose, the Compiler offers a set of intrinsic functions and
inlines the function code. The associated intrinsic functions read the processor flags listed
in the following listing.
Table 10-3. Read Processor Flags
Flag Flag Abbreviation Intrinsic Function Name
Carry C __isflag_carry()
Half carry H __isflag_half_carry()
Overflow V __isflag_overflow()
Interrupt pin high I __isflag_int()
Interrupt enable M __isflag_int_enabled()
Example:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
410 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
This translates to a conditional branch to label, that is, the process branches if the carry
flag is set (for the HC08, the resulting code is BCS label).
In some instances, the ANSI standard leaves the behavior of some Compilers undefined.
Different Compilers may implement certain features in different ways, even if they all
comply with the ANSI-C standard. The following topics discuss those points and the
behavior implemented by the Compiler:
• Right Shifts
• Initialization of Aggregates with Non-Constants
• Sign of char
• Division and Modulus
The initialization of aggrega tes with non-constants is not allowed in the ANSI-C
specification. The Compiler allows it if the -Ansi: Strict ANSI compiler option is not set
(see the following listing).
Listing: Initialization using a Non-Constant
void main() {
struct A {
struct A *n;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 411
Implementation Features
The ANSI-C standard does not specify whether the data type char is signed or unsigned.
Refer to HC(S)08 Backend for data about default settings.
Signed arithmetic operations using the / and % operators return undefined results unless
both operands are positive.
NOTE
The hardware implementation of the target's division
instructions determines how a Compiler implements / and % for
negative operands.
This section describes the internal Compiler limitations. Some stack limitations depend
on the operating system used. For example, in some operating systems, limits depend on
whether the compiler is a 32-bit compiler running on a 32-bit platform (for example,
Windows XP), or a 16-bit Compiler running on a 16-bit platform (for example, Windows
for Workgroups).
The ANSI-C column in the following below shows the recommended limitations of
ANSI-C (5.2.4.1 in ISO/IEC 9899:1990 (E)) standard. These limitations are only
guidelines and do not determine compliance. The Implementation column shows the
actual implementation value and the possible message number. A dash in the
Implementation column means that there is no information available for this topic.
Table 10-4. Translation Limitations (ANSI)
Limitation Implementation ANSI-C
Nesting levels of compound statements, 256 (C1808) 15
iteration control structures, and selection
control structures
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
412 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 413
Implementation Features
The table below shows other limitations which are not mentioned in an ANSI standard:
Table 10-5. Translation Limitations (Non-ANSI)
Limitation Description
Type Declarations Derived types must not contain more than 100 components.
Labels There may be at most 16 other labels within one procedure.
Macro Expansion Recursive macros expansion is limited to 70 (16-bit OS) or
2048 (32-bit OS) recursive expansions (C4412).
Include Files The total number of include files is limited to 8196 for a single
compilation unit.
Numbers Maximum of 655,360,000 different numbers for a single
compilation unit (C2700, C3302).
Goto M68000 products only: Maximum of 512 Gotos for a single
function (C15300).
Parsing Recursion Maximum of 1024 parsing recursions (C2803).
Lexical Tokens Limited by memory only (C3200).
Internal IDs Maximum of 16,777,216 internal IDs for a single compilation
unit (C3304). Internal IDs are used for additional local or
global variables created by the Compiler (for example, by
using CSE).
Code Size Code size is limited to 32KB for each single function.
Filenames Maximum length for filenames (including path) is 128
characters for 16-bit applications or 256 characters for Win32
applications. UNIX versions support filenames without the
path of 64 characters in length and 256 characters with the
path. Paths may be 96 characters on 16-bit PC versions, 192
characters on UNIX versions or 256 characters on 32-bit PC
versions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
414 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
This section provides a short overview about the implementation of the ANSI-C
conversion rules (see also ANSI Standard 6.x). The topics covered here are as follows:
• Integral Promotions
• Signed and Unsigned Integers
• Arithmetic Conversions
• Order of Operand Evaluation
• Rules for Standard Type Sizes
You may use a char, a shortint, or an int bitfield, or their signed or unsigned varieties, or
an enum type, in an expression wherever an int or unsignedint is used. If an int represents
all values of the original type, the value is converted to an int; otherwise, it is converted
to an unsignedint. Integral promotions preserve the value including its sign.
Promoting a signed integer type to another signed integer type of greater size requires
signextension. In two's-complement representation, the bit pattern is unchanged, except for
filling the high-order bits with copies of the sign bit.
When converting a signed integer type to an unsigned inter type, if the destination has
equal or greater size, the first signed extension of the signed integer type is performed. If
the destination has a smaller size, the result is the remainder on division by a number, one
greater than the largest unsigned number, that is represented in the type with the smaller
size.
• If either operand has type long double, the other operand is converted to long double.
• If either operand has type double, the other operand is converted to double.
• If either operand has type float, the other operand is converted to float.
• The integral promotions are performed on both operands.
The following rules are applied:
• If either operand has type unsigned long int, the other operand is converted to unsigned
long int.
• If one operand has type longint and the other has type unsignedint, then:
• if a longint can represent all values of an unsignedint, the operand of type
unsignedint is converted to longint;
• if a long int cannot represent all the values of an unsignedint, both operands are
converted to unsignedlongint.
• If either operand has type longint, the other operand is converted to longint.
• If either operand has type unsignedint, the other operand is converted to unsignedint.
• Both operands have type int.
The following listing lists the prio rity order of operators and their associativity.
Listing: Operator Precedence
Operators Associativity
() [] -> . left to right
+ - left to right
== != left to right
^ left to right
| left to right
|| left to right
? : right to left
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
416 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
, left to right
if (a & (3==2)
if (a&0)
Tip
Use brackets if you are unsure about associativity.
In ANSI-C, enu merations have the type of int. In this implementation they must be
smaller than or equal to int. The following listing lists the size rules for integer types.
Listing: Size Relationships among Integer Types
sizeof(char) <= sizeof(short)
sizeof(short) <= sizeof(int)
The Compiler supports two IEEE floating-point formats: IEEE32 and IEEE64. The
processor may also support a DSP format. The following listing shows these three
formats.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 417
Floating-Point Formats
Floats are implemented as IEEE32 and doubles as IEEE64. This may vary for a specific
Backend, or possibly neither format is supported. Refer to HC(S)08 Backend for details,
default settings, and supported formats.
The topics covered here are as follows:
• Floating-Point Representation of 500.0 for IEEE
• Representation of 500.0 in IEEE32 Format
• Representation of 500.0 in IEEE64 Format
• Representation of 500.0 in DSP Format
where: s, sign is 0 or 1,
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
418 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
sign (500.0) = 1,
NOTE
The number 0 (zero) cannot be represented this way. For 0,
IEEE defines a special bit pattern consisting of 0 bits only.
Next, convert the mantissa into its binary representation.
= 1.111101000... (binary)
Because this number is converted to be larger or equal to 1 and smaller than 2, there is
always a 1 in front of the decimal point. For the remaining steps, this constant (1) is left
out in order to save space.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 419
Floating-Point Formats
For the IEEE formats, the sign is encoded as a separate bit (sign magnitude
representation)
The exponent in IEEE32 has a fixed offset of 127 to ensure positive values:
= 0100 0011 1111 1010 0000 0000 0000 0000 (IEEE32 as bin)
= 43 fa 00 00 (IEEE32 as hex)
= 1100 0011 1111 1010 0000 0000 0000 0000 (IEEE32 as bin)
= C3 fa 00 00 (IEEE32 as hex)
The exponent in IEEE64 has a fixed offset of 1023 to ensure positive values:
(bin)
The IEEE64 format is similar to IEEE32 except that more bits are available to represent
the exponent and the mantissa. The following listing shows the IEEE64 representation of
decimal 500.
Listing: Representation of Decimal 500.0 in IEEE64
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
420 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
= 0 (sign) 10000000111 (exponent)
1111010000000000000000000000000000000000000000000000 (mantissa)
(IEEE64 as bin)
= 0100 0000 0111 1111 0100 0000 0000 0000 0000 0000 0000
= 40 7f 40 00 00 00 00 00 (IEEE64 as hex)
(IEEE64 as bin)
= 1100 0000 0111 1111 0100 0000 0000 0000 0000 0000 0000
= c0 7f 40 00 00 00 00 00 (IEEE64 as hex)
NOTE
The IEEE formats recognize several special bit patterns for
special values. The number 0 (zero) is encoded by the bit
pattern consisting of zero bits only. Other special values such as
Not a Number, infinity, -0 (minus zero) and denormalized
numbers exist. Refer to the IEEE standard documentation for
details.
Convert 500.0 from the decimal representation to a representation with base 2. In contrast
to IEEE, DSP normalizes the mantissa between 0 and 1 and not between 1 and 2. This
makes it possible to also represent 0, which must have a special pattern in IEEE. In
addition, the exponent is different from IEEE.
value = (-1)^s * m*2^e
where:
• s, sign, is 1 or -1,
• 1 > m >= 0, and
• exp is a integral number.
For 500 this gives:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 421
Floating-Point Formats
• sign (500.0) = 1
• mant (500.0, DSP) = 0.9765625
• exp (500.0, DSP) = 9
Next convert the mantissa into its binary representation (as shown in the following
listing).
Listing: Representation of 500 in DSP format
mant (500.0, DSP) = 0.9765625 (dec)
= 0*2^(0) + 1*2^(-1) + 1*2^(-2) + 1*2^(-3) + 1*2^(-4)
= 0.1111101000... (bin)
Because this number is always greater than or equal to 0 and less than 1, there is always a
0 in front of the decimal point. For the remaining steps this constant is omitted to save
space. There is always a 1 after the decimal point, except for 0 and intermediate results.
This bit is encoded so the DSP loses one additional bit of precision compared with IEEE.
Negative exponents are encoded by the base 2 representation of the positive value.
The sign is encoded into the mantissa by taking the two's complement for negative
numbers and placing a bit set to 1 in the front. For DSP and positive numbers, a bit
cleared to 0 is added at the front.
Finally the mantissa and the exponent must be joined according to the following listing.
Listing: Representation of Decimal 500.0 in DSP
= 7D 00 (mantissa) 00 09 (exponent) (DSP as hex)
= 7D 00 00 09 (DSP as hex)
= 0111 1101 0000 0000 0000 0000 0000 1001 (DSP as binary)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
422 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
= 1000 0011 0000 0000 0000 0000 0000 1001 (DSP as binary)
NOTE
The order of the byte representation of a floating-point value
depends on the byte ordering of the backend. Consider the first
byte in the previous diagrams as the most significant byte.
The Compiler does not do register and constant tracing on volatile or absolute global
objects. Accesses to volatile or a bsolute global objects are not eliminated. See the
following listing for one reason to use a volatile declaration.
Listing: Using a Volatile Declaration to Avoid an Adverse Side Effect
volatile int x;
void main(void) {
x = 0;
...
10.5 Bitfields
There is no standard way to allocate bitfields. Bitfield allocation varies from compiler to
compiler, even for the same target. Using bitfields for access to I/O registers is non-
portable and inefficient for the masking involved in unpacking individual fields. It is
recommended that you use regular bit-and (&) or bit-or (|) operations for I/O port access.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 423
Bitfields
The maximum width of bitfields depends on the backend in that plain int bitfields are
signed (see HC(S)08 Backend for details). As stated in Kernighan and Ritchie's The C
Programming Language, 2 nd ed., the use of bitfields is equivalent to using bit masks to
which the operators &, |, ~, |=, or &= are applied. In fact, the Compiler translates bitfield
operations to bit mask operations.
The topic covered here:
• Signed Bitfields
A common mistake is to use signed bitfields, but testing them as if they were unsigned.
Signed bitfields have a value -1 or 0. Consider the following example.
Listing: Testing a Signed Bitfield as Unsigned
typedef struct _B {
signed int b0: 1;} B;
B b;
if (b.b0 == 1) ...
The Compiler issues a warning and replaces the 1 with -1 because the condition (b.b0 ==
1) does not make sense, that is, it is always false. The test (b.b0 == -1) performs as
expected. This substitution is not ANSI compatible and will not be performed when the -
Ansi: Strict ANSI compiler option is active.
Use an unsigned bitfield to test.Unsigned bitfields have the values 0 or 1, as shown in the
following listing.
Listing: Using Unsigned Bitfields
typedef struct _B {
unsigned b0: 1;
} B;
B b;
if (b.b0 == 1) ...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
424 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
10.6 Segmentation
The Linker supports the concept of segments in that you may partition the memory space
into several segments. The Compiler allows attributing a certain segment name to certain
global variables or functions which the Linker then allocates into that segment. An entry
in the Linker parameter file determines where that segment actually lies.
Listing: Syntax of the Segment Specification Pragma
SegDef= "#pragma" SegmentType ({SegmentMod} SegmentName |
DEFAULT)
SegmentType= CODE_SEG|CODE_SECTION|
DATA_SEG|DATA_SECTION|
CONST_SEG|CONST_SECTION|
STRING_SEG|STRING_SECTION
SegmentMod= __DIRECT_SEG|__NEAR_SEG|__CODE_SEG
|__FAR_SEG|__BIT_SEG|__Y_BASED_SEG
|__Z_BASED_SEG|__DPAGE_SEG|__PPAGE_SEG
|__EPAGE_SEG|__RPAGE_SEG|__GPAGE_SEG"
|__PIC_SEG|__LINEAR_SEG|CompatSegmentMod
CompatSegmentMod=DIRECT|NEAR|CODE|FAR|BIT|Y_BASED|Z_BASED|
DPAGE|PPAGE|EPAGE|RPAGE|GPAGE|PIC
The two basic types of segments, code and data segments, require two pragmas for
segment specification:
• #pragma CODE_SEG <segment_name>
• #pragma DATA_SEG <segment_name>
In addition there are pragmas for constant data and for strings:
• #pragma CONST_SEG <segment_name>
• #pragma STRING_SEG <segment_name>
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 425
Segmentation
All four pragmas remain valid until the next pragma of the same kind is encountered.
In the HIWARE object file format, the Linker puts constants into DATA_SEG unless you
specify a CONST_SEG. In the ELF Object file format, the Linker always puts constants into a
constant segment.
The Linker puts strings into the STRINGS segment until you specify a STRING_SEG pragma.
After this pragma, the Linker allocates all strings into this constant segment. The linker
then treats this segment like any other constant segment.
If you do not specify a segment, the Compiler assumes two default segments named
DEFAULT_ROM (the default code segment) and DEFAULT_RAM (the default data segment). Use the
segment name DEFAULT to explicitly make these default segments the current segments:
You may also declare segments as __SHORT_SEG by inserting the keyword __SHORT_SEG just
before the segment name. This makes the Compiler use short absolute addresses (8 bits or
16 bits, depending on the Backend) to access global objects or to call functions. It is the
programmer's responsibility to allocate __SHORT_SEG segments in the proper memory area.
NOTE
You may not declare the DEFAULT code and data segments as
__SHORT_SEG.
The backend specifies the meaning of the other segment modifiers, such as __NEAR_SEG and
__FAR_SEG. The backend ignores unsupported modifiers. Refer to HC(S)08 Backend for
information about modifier support.
The segment pragmas also affect static local variables. Static local variables are local
variables with the static flag set. They are in fact normal global variables but with scope
limited to the function in which they are defined:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
426 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
return i++;
NOTE
Using the ELF/DWARF object file format (-F1 or -F2 compiler
option), the Linker places all constants into the .rodata section
by default unless you specify a #pragma CONST_SEG.
NOTE
Aliases that satisfy the ELF naming convention are available
for all segment names. Use CODE_SECTION instead of CODE_SEG. Use
DATA_SECTION instead of DATA_SEG. Use CONST_SECTION instead of
CONST_SEG. Use STRING_SECTION instead of STRING_SEG. These aliases
behave exactly as do the XXX_SEG name versions.
Listing: Example of Segmentation Without the -Cc Compiler Option
/* Placed into Segment: */
static int a; /* DEFAULT_RAM(-1) */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 427
Optimizations
10.7 Optimizations
The Compiler applies a variety of code-improving techniques under the term optimization.
This section provides a short overview about the most important optimizations.
The topics covered here are as follows:
• Peephole Optimizer
• Strength Reduction
• Shift Optimizations
• Branch Optimizations
• Dead-Code Elimination
• Constant-Variable Optimization
• Tree Rewriting
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
428 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
Strength reduction optimizes by replacing expensive operations with cheaper ones, where
the cost factor is either execution time or code size. Examples include replacing
multiplication and division by constant powers of two with left or right shifts.
NOTE
The Compiler can only replace a division by two with a shift
operation when the target division is implemented such that
-1/2 == -1, or the dividend is unsigned. Negative values
produce different results. The Compiler can use a shift when the
C source code already contains a shift, or the value to be shifted
is unsigned.
When shifting a byte variable by a constant number of bits, the Compiler attempts to
implement such shifts in the most efficient way.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 429
Optimizations
This o ptimization minimizes the span of branch instructions. The Compiler generates a
short branch rather than a long branch whenever possible. Also when possible, the
Compiler resolves branches to branches into two branches to the same target. When
possible the Compiler removes redundant branches (for example, a branch to the
instruction immediately following it).
The Compiler removes dead assignments while generating code. In some programs it
may find additional cases of unused expressions.
When any expressio n uses a constant non-volatile variable, the Compiler replaces it by
the constant value the variable holds. This requires less code than taking the object itself.
If no expression takes the address of the constant non-volatile object, the Compiler
removes the object itself (notice ci in the following listing). This uses less memory space.
Listing: Example Demonstrating Constant Variable Optimization
void f(void) {
const int ci = 100; // ci removed (no address taken)
const int ci2 = 200; // ci2 not removed (address taken below)
int i;
int *p;
i = ci2; // no replacement
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
430 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
The Compiler does not remove global constant non-volatile variables. They are replaced
in expressions by the constant value they hold.
The Compiler optimizes constant non-volatile arrays (notice array[] in the following
listing).
Listing: Example Demonstrating Constant, Non-Volatile Array Optimization
void g(void) {
const int array[] = {1,2,3,4};
int i;
The structure of the intermediate code between Frontend and Backend allows the
Compiler to perform some optimizations on a higher level. Examples are shown in the
following sections:
• Switch Statements
• Absolute Values
• Combined Assignments
Any C Compiler requires efficient translation of switch statements. The Compiler applies
different strategies, that is, branch trees, jump tables, and a mixed strategy, depending on
the case label values and their numbers. The following table describes how the Compiler
implements these strategies.
Table 10-6. Switch Implementations
Method Description
Branch Sequence For small switches with scattered case label values, the
Compiler generates an if ... elsif ... elsif ... else ... sequence if
the Compiler switch -Os is active.
Branch Tree For small switches with scattered case label values, the
Compiler generates a branch tree. This is equivalent to
unrolling a binary search loop of a sorted jump table and
Table continues on the next page...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 431
Optimizations
float x, y;
x = (y < 0.0) ? -y : y;
This results in lengthy and inefficient code. The Compiler recognizes cases like this and
treats them specially in order to generate the most efficient code. Only the most
significant bit must be cleared.
The Compiler can also recogniz e the equivalence between the three following
statements:
x = x + 1;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
432 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
x += 1;
x++;
and between:
x =
x / y;
x /= y;
Therefore, the Compiler generates equally efficient code for either case.
This section provides some examples for the use of const or volatile, commonly used
qualifiers in Embedded Programming.
Consider the following example:
int i;
The above definitions are: a normal variable i and a constant variable ci. The Compiler
places each into ROM. Note that for C++, you must initialize the constant ci.
int *ip;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 433
Using Qualifiers for Pointers
Here, icp is a const pointer to an int, where cicp is a const pointer to a const int.
The qualifier for such pointers always appears on the right side of the *.
You can express this rule in the same way for the volatile qualifier. Consider the
following example of an array of five constant pointers to volatile integers:
The array arr contains five constant pointers pointing to volatile integers. Because the
array itself is constant, it is put into ROM. Whether the array is constant or not does not
change where the pointers point. Consider the next example:
Initializing buf makes it a non-constant array. This array contains two pointers which
point to constant characters. Because the array is non-constant, neither the Compiler nor
the Linker can place buf into ROM.
Consider a constant array of five ordinary function pointers:
void (*fp)(void);
This shows a function pointer fp returning void and having void as parameter. Define the
pointer with:
void (*fparr[5])(void);
You can also use a typedef to separate the function pointer type and the array:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
434 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
Func fp;
Func fparr[5];
Or a const function pointer returning a pointer to a volatile double having two constant
integers as parameter:
This is an array of three constant function pointers, having void as parameter and
returning void. The Compiler allocates fp in ROM because the fp array is constant.
Consider an example using function pointers:
int (* (** func0(int (*f) (void))) (int (*) (void))) (int (*)
(void)) {
return 0;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 435
Using Qualifiers for Pointers
This function, called func(), has one function pointer argument called f. The return value
is a complex function pointer. Here, we do not explain where to put a const, so that the
destination of the returned pointer cannot be modified. Alternately, write the same
function more simply using typedefs (refer the following listing).
Listing: Using typedefs
typedef int (*funcType1) (void);
typedef int (* funcType2) (funcType1);
funcType3* func0(funcType1 f) {
return 0;
In this case the places of the const become obvious. Just behind the * in funcType3:
constfuncType3* func1(funcType1 f) {
return 0;
return 0;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
436 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
You can define some ANSI C macros that contain HLI assembler statements when
working with the HLI assembler. Because the HLI assembler is heavily Backend-
dependent, the following example uses a pseudo Assembler Language.
Listing: Coding Example
CLR Reg0 ; Clear Register zero
CLR Reg1 ; Clear Register one
The HLI instructions above are only a possible solution. For real applications, replace the
pseudo HLI instructions above with the HLI instructions for your target.
• Defining Macro
• Using Macro Parameters
• Using Immediate-Addressing Mode in HLI Assembler Macros
• Generating Unique Labels in HLI Assembler Macros
• Generating Assembler Include Files (-La Compiler Option)
The source code invokes the ClearR0 macro in the following manner:
ClearR0;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 437
Defining C Macros Containing HLI Assembler Code
{ __asm CLR R0 ; } ;
An HLI assembler macro can contain one or several HLI assembler instructions. As the
ANSI-C preprocessor expands a macro on a single line, you cannot define an HLI
assembler block in a macro. You can, however, define a list of HLI assembler
instructions (refer the following listing).
Listing: Defining Two Macros on the Same Line of Source Code
/* The following macro clears R0 and R1. */
#define ClearR0and1 {__asm CLR R0; __asm CLR R1; }
ClearR0and1;
You can define an HLI assembler macro on several lines using the line separator \.
NOTE
This may enhance the readability of your source file. However,
the ANSI-C preprocessor still expands the macro on a single
line.
Listing: Defining a Macro on More than One Line of Source Code
/* The following macro clears R0 and R1. */
#define ClearR0andR1 {__asm CLR R0; \
ClearR0andR1;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
438 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
An HLI assembler macro may have some parameters which are referenced in the macro
code. The following listing defines the Clear1 macro using the var parameter.
Listing: Clear1 Macro Definition
/* This macro initializes the specified variable to 0.*/
#define Clear1(var) {__asm CLR var;}
Clear1(var1);
An ambiguity exists when using the immediate addressing mode within a macro.
For the ANSI-C preprocessor, the symbol # inside a macro specifically indicates a string
constructor. Using #pragma NO_STRING_CONSTR: No String Concatenation during
Preprocessing instructs the Compiler that in all subsequent macros, the instructions
remain unchanged whenever the symbol # is specified. This macro is valid for the rest of
the file in which it is specified.
Listing: Definition of the Clear2 Macro
/* This macro initializes the specified variable to 0.*/
#pragma NO_STRING_CONSTR
Clear2(var1);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 439
Defining C Macros Containing HLI Assembler Code
Invoking the same m acro twice in the same function causes the ANSI C preprocessor to
generate the same label twice (once in each macro expansion). Use the special string
concatenation operator of the ANSI-C preprocessor ( ##) to generate unique labels. Refer
the following listing.
Listing: Using the ANSI C Preprocessor String Concatenation Operator
/* The following macro copies the string pointed to by 'src'
into the string pointed to by 'dest'.
#pragma NO_STRING_CONSTR
During expansion of the first macro, the preprocessor generates an lp1 label. During
expansion of the second macro the preprocessor creates an lp2 label.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
440 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
In many projects it often makes sense to use both a C compiler and an assembler. Both
have different advantages. The compiler uses portable and readable code while the
assembler provides full control for time-critical applications, or for directly accessing the
hardware.
However, the compiler cannot read include files of the assembler, and the assembler
cannot read the header files of the compiler.
The Compiler produces an assembler include file that allows both tools to use one single
source to share constants, variables, labels, and even structure fields.
The compiler writes an output file in assembler format which contains all information
needed by a C header file.
The current implementation supports the following mappings:
• Macros
C defines translate to assembler EQU directives.
• enum values
C enum values translate to EQU directives.
• C types
Generates the size of any type and the offset of structure fields for all typedefs. For
bitfield structure fields, generates the bit offset and the bit size
• Functions
Generates an XREF entry for each function.
• Variables
Generates C variables with an XREF. In addition, defines all fields with an EQU directive
for structures or unions.
• Comments
Includes C style comments ( /* ... */) as assembler comments ( ;....).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 441
Defining C Macros Containing HLI Assembler Code
• Enumerations
• Types
• Functions
• Variables
• Comments
• Guidelines
10.9.5.1 General
You must specially prepare a header file to generate the assembler include file. A pragma
anywhere in the header file can enable assembler output:
#pragma CREATE_ASM_LISTING ON
The Compiler generates only those macro definitions and declarations subsequent to this
pragma. The compiler stops generating elements when #pragma
CREATE_ASM_LISTING: Create an Assembler Include File Listing occurs with an
OFF parameter.
Not all entries generate legal assembler constructs. The compiler does not check for legal
assembler syntax when translating macros. Put macros containing elements not supported
by the assembler in a section controlled by #pragma CREATE_ASM_LISTING OFF.
The compiler only creates an output file when the -La option is specified and the
compiled sources contain #pragma CREATE_ASM_LISTING ON (refer the following listing).
Listing: Header File: a.h
#pragma CREATE_ASM_LISTING ON
typedef struct {
short i;
short j;
} Struct;
Struct Var;
void f(void);
When the compiler reads this header file with the -La=a.inc a.h option, it generates the
following.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
442 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
Struct_j EQU $2
XREF Var
XREF f
You can now use the assembler INCLUDE directive to include this file into any assembler
file. The content of the C variable, Var_i, can also be accessed from the assembler without
any uncertain assumptions about the alignment used by the compiler. Also, whenever a
field is added to the structure Struct, the assembler code must not be altered. You must,
however, regenerate the a.inc file with a make tool.
The Compiler does not create the assembler include file every time it reads the header file,
but only when the header file changes significantly. Specify the -La option only when the
compiler must generate a.inc. If -La is always present, a.inc is always generated. A make
tool always restarts the assembler because the assembler files depend on a.inc. Such a
makefile might be similar to the following listing.
Listing: Sample Makefile
a.inc : a.h
$(CC) -La=a.inc a.h
$(CC) a_c.c
$(ASM) a_asm.asm
The order of elements in the header file is the same as the order of the elements in the
created file, except that comments may be inside elements in the C file. In this case, the
comments may be before or after the whole element.
The order of defines does not matter for the compiler. The order of EQU directives does
matter for the assembler. If the assembler has problems with the order of EQU directives in
a generated file, you must change the corresponding header file accordingly.
10.9.5.2 Macros
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 443
Defining C Macros Containing HLI Assembler Code
The Compiler translates defines lexically and not semantically. The compiler does not
check the accuracy of the define. The following example shows some uses of this feature:
Listing: Example Source Code
#pragma CREATE_ASM_LISTING ON
int i;
#define UseI i
#define Constant 1
The source code in the above listing produces the following output:
Listing: Output
XREF i
UseI EQU i
Constant EQU 1
Disassembly translates the hexadecimal C constant 0x1000 to $1000 and translates the octal
01234 to @1234. In addition, the compiler inserts one space between every two tokens. The
Compiler makes no other changes in the assembler listing for defines.
Some macros compile but do not assemble. The Compiler compiles macros with
parameters, predefined macros, and macros with no defined value, but the assembler
produces no output for these macros. Although these macros are in the header file the
Compiler uses to generate the assembler include file, locate the macros together and
preface the section with #pragma CREATE_ASM_LISTING OFF, to prevent the compiler from
generating the assembly listing.
The following defines do not work or are not generated:
Listing: Improper Defines
#pragma CREATE_ASM_LISTING ON
int i;
#define Nothing
The source code in the above listing produces the following output.
Listing: Output
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
444 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
XREF i
AddressOfI EQU & i
The assembler does not assemble the AddressOfI macro because the assembler cannot
interpret the & C address operator. Also, do not use other C-specific operators such as
dereferenciation (*ptr). The compiler generates them into the assembler listing file
without any translation.
The ConstantInt macro does not assemble because the assembler does not know the cast
syntax and the types. The assembler does not write macros with parameters (such as Mu17)
or macros with no actual value to the listing.
The C preprocessor ignores the syntactical content of the macro, therefore the compiler
processes macros like useUndef, with the undefined object UndefFkt, correctly. The
assembler EQU directive requires definitions for all used objects.
The Compiler processes the Anything macro in the previous listing with no difficulty. The
assembler cannot process these random characters.
10.9.5.3 Enumerations
An enum in C has a unique name and a defined value (refer the following listing).
Listing: Enumerations
#pragma CREATE_ASM_LISTING ON
enum {
E1=4,
E2=47,
E3=-1*7
};
The Compiler generates enums as EQU directives (refer the following listing).
Listing: Enumerations
E1 EQU $4
E2 EQU $2F
E3 EQU $FFFFFFF9
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 445
Defining C Macros Containing HLI Assembler Code
NOTE
The Compiler generates negative values as 32-bit hex numbers.
10.9.5.4 Types
There is no reason to generate the size of every occurring type, therefore only typedefs are
considered here.
The size of the newly defined type is specified for all typedefs.
Listing: typedefs
#pragma CREATE_ASM_LISTING ON
typedef long LONG;
struct tagA {
char a;
short b;
};
typedef struct {
long d;
struct tagA e;
int f:2;
int g:1;
} str;
The Compiler appends the term _SIZE to the end of the typedef's name for the size name.
For structures, the Compiler generates the offset of all structure fields relative to the
structure's start, and generates the structure offset names by appending an underscore (_)
and the structure field's name to the name of the typedef as shown in the following listing.
Listing:Disassembly of above listing
LONG_SIZE EQU $4
str_SIZE EQU $8
str_d EQU $0
str_e EQU $4
str_e_a EQU $4
str_e_b EQU $5
str_f EQU $7
str_f_BIT_WIDTH EQU $2
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
446 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
str_f_BIT_OFFSET EQU $0
str_g EQU $7
str_g_BIT_WIDTH EQU $1
str_g_BIT_OFFSET EQU $2
The Compiler contains all structure fields within that structure. The generated name
contains all the names for all fields listed in the path. The Compiler ignore any element
without a name (for example, an anonymous union).
The Compiler also generates the width and offset for all bitfield members. The offset 0
specifies the least significant bit, which is accessed with mask 0x1. The offset 2 specifies
the most significant bit, which is accessed with mask 0x4. The width specifies the number
of bits.
The offsets, bit widths, and bit offsets given here are examples. Different compilers may
generate different values. In C, the Compiler determines the structure alignment and
bitfield allocation and specifies the correct values.
10.9.5.5 Functions
The XREF directive generates declared functions, enabling them to be used with the
Assembler. Do not generate the function into the output file, but place the function in an
area of your code preceded by #pragma CREATE_ASM_LISTING OFF. The Assembler does not
allow the redefinition of labels declared with XREF (see the following listing).
Listing: Function Prototyping with the CREATE_ASM_LISTING Pragma
#pragma CREATE_ASM_LISTING ON
void main(void);
void f_asm(void);
10.9.5.6 Variables
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 447
Defining C Macros Containing HLI Assembler Code
char a;
int i:2;
};
struct A VarA;
int VarInt;
Declare variables with XREF. In addition, for structures, EQU directives define every field.
For bitfields, define the bit offset and bit size.
Define variables in the __SHORT_SEG segment with XREF.B, which informs the assembler
about the direct access. EQU.B directives define the structure fields in __SHORT_SEG segments.
Listing: Examples of Variables
XREF VarA
VarA_a EQU VarA + $0
VarA_i_BIT_WIDTH EQU $2
VarA_i_BIT_OFFSET EQU $0
XREF.B VarInt
The Compiler does not write the variable size explicitly. To generate the variable size,
use a typedef with the variable type.
The offsets, bit widths, and bit offsets given here are examples. Different compilers may
generate different values. In C, the Compiler determines the structure alignment and the
bitfield allocation and specifies the correct values.
10.9.5.7 Comments
When creating an assembly l isting, the Compiler writes any comments in the assembler
include file. When the Compiler encounters comments within a typedef, structure, or
variable declaration, the Compiler places the comments either before or after the
declaration in the generated file. The Compiler never places comments inside the
declaration, even when the declaration contains multiple lines. Therefore, a comment
after a structure field within a typedef appears before or after the whole typedef, not just
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
448 Freescale Semiconductor, Inc.
Chapter 10 ANSI-C Frontend
after the structure field. Every comment is on a single line. An empty comment (/* */)
inserts an empty line into the created file. Refer the following listing for an example of
using constants.
Listing: Example Using Comments
#pragma CREATE_ASM_LISTING ON
/*
void main(void);
/*
in the compiler. */
XREF main
; in the compiler.
SIZEOF_INT_SIZE EQU $2
10.9.5.8 Guidelines
The -La option translates specified parts of header files into an include file to import labels
and defines into an assembler source. Because the -La compiler option is very powerful,
use the following guidelines to avoid incorrect usage. This section describes using this
option to combine C and assembler sources, both using common header files.
The following general implementation recommendations help to avoid problems when
writing software using the common header file technique.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 449
Defining C Macros Containing HLI Assembler Code
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
450 Freescale Semiconductor, Inc.
Chapter 11
Generating Compact Code
The Compiler generates compact and efficient code whenever possible, although not
everything is handled directly by the Compiler. Denser code is possible by specifying
certain Compiler options, or __SHORT_SEG segments (if available).
This chapter covers the following topics:
• Compiler Options
• __SHORT_SEG Segments
• Defining I/O Registers
• Programming Guidelines
Using the following compiler options helps reduce the size of the code generated. Note
that some options may not be available for every target.
The topics covered here are as follows:
• -Or: Register Optimization
• -Oi: Inline Functions
When accessing pointer fields, this option prevents the compiler from reloading the
pointer address for each access. An index register holds the pointer value across
statements when possible.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 451
__SHORT_SEG Segments
NOTE
This option may not be available for all targets.
Use the inline keyword or the command line option -Oi for C/C++ functions (see -Oi:
Inlining for more information). Defining a function before using it helps the Compiler to
inline it:
/* OK */ /* better! */
myfun(); }
} void main(void) {
// ... }
This also allows the compiler to use a relative branch instruction instead of an absolute
branch instruction.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
452 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
Tools access variables on the direct page (between 0 and 0xFF) using direct addressing.
The Compiler allocates some variables on the direct page if they are defined in a
__SHORT_SEG segment (refer the following listing).
In the previous example, myVar1 and myVar2 are both accessed using direct addressing
mode. Variables myVar3 and myVar4 are accessed using extended addressing mode.
When you define some exported variables in a __SHORT_SEG segment, you must also specify
in the external declaration for these variables that they are allocated in a __SHORT_SEG
segment. The External definition of the variable defined above looks like:
Place the segment on the direct page using the parameter (PRM) file (refer the following
listing).
Listing: Linker Parameter File
LINK test.abs
NAMES test.o startup.o ansi.lib END
SECTIONS
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 453
Defining I/O Registers
PLACEMENT
END
STACKSIZE 0x60
NOTE
The Linker is case-sensitive. The segment name must be
identical in the C and PRM files.
The I/O Registers are usually based at address 0. To tell the compiler it must use direct
addressing mode to access th e I/O registers, define these registers in a __SHORT_SEG section
(if available) based at the specified address.
Define the I/O register in the C source file as in the following listing.
Listing: Definition of an I/O Register
typedef struct {
unsigned char SCC1;
} SCIStruct;
SCIStruct SCI;
Place the segment at the appropriate address in the PRM file (refer the following listing).
Listing: Linker Parameter File Allocating the I/O Register
LINK test.abs
NAMES test.o startup.o ansi.lib END
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
454 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
SECTIONS
PLACEMENT
END
STACKSIZE 0x60
NOTE
The Linker is case-sensitive. The segment name must be
identical in the C/C++ and PRM files.
Following a few programming guidelines helps to reduce code size. The Compiler many
things. However, a complex programming style or a style that forces the Compiler to
perform special code sequences results in a less efficient optimization.
The topics covered here are as follows:
• Constant Function at Specific Address
• HLI Assembly
• Post- and Pre-Operators in Complex Expressions
• Boolean Types
• printf() and scanf()
• Bitfields
• Struct Returns
• Local Variables
• Parameter Passing
• Unsigned Data Types
• Inlining and Macros
• Data Types
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 455
Programming Guidelines
• Short Segments
• Qualifiers
Sometimes functions are placed at a specific address, but the information regarding the
functions is not available. The programmer knows the function starts at address 0x1234
and wants to call it. Without having the function definition, a linker error occurs because
of the missing target function code. Use a constant function pointer to solve this problem:
void main(void) {
fktPtr();
This produces efficient code with no linker errors. However, the function at 0x1234 must
really exist.
The following code shows a better solution, without the need for a function pointer:
void main(void) {
Do not mix High-Level Inline (HLI) Assembly with C declarations and statements (see
the following listing). Using HLI assembly may affect the register trace of the compiler.
The Compiler cannot touch HLI Assembly, and thus it is out of range for any
optimizations except branch optimization.
Listing: Mixing HLI Assembly with C Statements (Not Recommended)
void myfun(void) {
/* some local variable declarations */
__asm {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
456 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
When encountering this code, the Compiler assumes that everything has changed. It
cannot hold variables used by C statements in registers while processing HLI statements.
Normally it is better to place special HLI code sequences into separate functions,
although additional calls or returns may occur. Placing HLI instructions into separate
functions (and modules) simplifies porting the software to another target (refer the
following listing).
Listing: HLI Statements are Not Mixed with C Statements (Recommended)
/* hardware.c */
void special_hli(void) {
__asm {
/* myfun.c */
void myfun(void) {
special_hli();
Writing a complex program results in complex code. In general it is the job of the
compiler to optimize complex functions. Some rules may help the compiler to generate
efficient code.
If the target does not support pre- or post-increment or pre- or post-decrement
instructions, using the ++ and -- operators in complex expressions is not recommended.
Post-increment and post-decrement particularly may result in additional code:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 457
Programming Guidelines
a[i++] = b[--j];
i++;
Avoid assignments in parameter passing or side effects (as ++ and --). The evaluation
order of parameters is undefined (ANSI-C standard 6.3.2.2) and may vary from Compiler
to Compiler, and even from one release to another:
i = 3;
myfun(i++, --i);
In the above example, myfun() is called either with myfun (3,3) or with myfun(2,2).
#define TRUE 1
#define FALSE 0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
458 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
Use the following code to reduce memory usage and improve code density:
from stdtypes.h ( Byte is an unsigned 8-bit data type also declared in stdtypes.h).
The printf() or scanf() code in the ANSI library can be reduced if no floating point
support ( %f) is used. Refer to the ANSI library reference and printf.c or scanf.c in your
library for details about saving code (avoiding float or doubles in printf() may decrease
code size by 50%).
11.4.6 Bitfields
Using bitfields to save memory generally produces additional code. For ANSI-C
compliance, bitfields have a type of signed int, thus a bitfield of size 1 is either -1 or 0.
This may force the compiler to sign extend operations:
struct {
int b:0; /* -1 or 0 */
} B;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 459
Programming Guidelines
When returning structs, the Compiler allocates space on the stack for the return value and
then calls the function. Then the Compiler copies the return value to the variable s.
During the return sequence, the Compiler copies the return value to myfun (refer to the
listing displayed below).
Depending on the size of the struct, this may be done inline. After return, the caller main
copies the result back into s. Depending on the Compiler or Target, it is possible to
optimize some sequences (avoiding some copy operations). However, returning a struct
by value may increase execution time, possibly increasing code and stack usage.
Listing: Returning a struct Forces the Compiler to Produce Lengthy Code
struct S
myfun(void)
/* ... */
return s; // (4)
void main(void) {
struct S s;
/* ... */
s =
myfun(); // (1), (2), (3)
/* ... */
With the following example, the Compiler passes the destination address and calls myfun.
The callee, myfun, copies the result indirectly into the destination. This approach reduces
stack usage, avoids copying structs, and results in denser code. Note that the Compiler
may also inline the above sequence (if supported). But for rare cases the above sequence
may not be exactly the same as returning the struct by value (for example, if myfun
modifies the destination struct).
Listing: Pass a Pointer to the Callee for the Return Value
void
myfun(struct S *sp) {
/* ... */
*sp = s; // (4)
} void main(void) {
S s;
/* ... */
myfun(&s); // (2)
/* ... */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
460 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
Using local variables instead of global variable results in better application manageability
by reducing or avoiding side effects entirely. Using local variables or parameters reduces
global memory usage but increases stack usage.
Target stack access capability influences code quality. Depending on the target
capabilities, access to local variables may be very inefficient. Targets without a dedicated
stack pointer require the use of an address register instead, making the address register
unavailable for other values. Limited offsets or addressing modes causes inefficient
variable access as well.
Allocating a large number of local variables causes the Compiler to generate a complex
sequence to allocate the stack frame in the beginning of the function and to deallocate it
at the end (refer the following listing).
Listing: Function with Many Local Variables
void myfun(void) {
/* huge amount of local variables: allocate space! */
/* ... */
If the target provides special entry or exit instructions for such cases, allocation of many
local variables is not a problem. You may also use global variables or static local
variables. However, this deteriorates maintainability and may waste global address space.
The Compiler may offer an option to overlap parameter or local variables using a
technique called overlapping, allocating local variables or parameters as globals. The
linker overlaps them depending on their use. For targets with limited stack (for example,
no stack addressing capabilities), this often is the only solution. However this solution
makes the code non-reentrant (recursion is not allowed).
Avoid using parameters larger than the data registers size (see HC(S)08 Backend).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 461
Programming Guidelines
Use unsigned data types when possible as signed operations are more complex than
unsigned operations (for example, shifts, divisions and bitfield operations). Take proper
precautions to handle the value in the event it is less than zero.
Use the corresponding macro M_ABS defined in stdlib.h instead of calling abs() and absl()
in the stdlib:
/* extract
i = M_ABS(j++);
i = abs(j++);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
462 Freescale Semiconductor, Inc.
Chapter 11 Generating Compact Code
ANSI-C requires that the memcpy() library function in strings.h return a destination pointer
and handle and can handle a count of zero:
Listing: Excerpts from the string.h and string.c Files Relating to memcpy()
/* extract of string.h *
extern void * memcpy(void *dest, const void * source, size_t count);
/* this function does not return dest and assumes count > 0 */
/* extract of string.c */
while (count--)
*sd++ = *ss++;
return (dest);
For a simpler, faster choice, use memcpy2() when the function does not have to return the
destination or handle a count of zero (refer the following listing).
Listing: Excerpts from the string.c File Relating to memcpy2()
/* extract of string.c */
void
/* this func does not return dest and assumes count > 0 */
do {
} while(count--);
Replacing calls to memcpy() with calls to memcpy2() saves runtime and code size.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 463
Programming Guidelines
Do not use larger data types than necessary. Use IEEE32 floating point format both for
float and doubles if possible. Set the enum type to a smaller type than int using the -T
option. Avoid data types larger than registers.
Whenever possible and available (not all targets support it), place frequently used global
variables into a DIRECT or __SHORT_SEG segment using:
11.4.14 Qualifiers
Use the const qualifier to help the compiler. In the HIWARE object-file format, the
Compiler places const objects into ROM when the -Cc compiler option is given.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
464 Freescale Semiconductor, Inc.
Chapter 12
HC(S)08 Backend
The Compiler's target-dependent Backend contains the code generator. This chapter
discusses the technical details of the Backend for the HC(S)08 family.
A memory model is a code design strategy that organizes a program's code and data so
that it best follows a particular addressing scheme used by the MCU.
NOTE
Further details on MCU memory models can be found in
Banked Memory Support.
This section describes the following memory models:
• Banked Model
• SMALL Model
• TINY Model
The banked memory model uses the MCU's Memory Management Unit (MMU),
allowing the extension of program space beyond the 64-kilobyte CPU-addressable
memory map. Enabling -MMU and -Mb enables code banking and extends program space;
enabling -MMU enables linear data access and extends data space (see -M (-Mb, -Ms, -Mt):
Memory Model ).
The topics covered are as follows:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 465
Memory Models
Code banking extends program space using a paged memory system. The 8-bit PPAGE
register selects the memory page, and a 16-kilobyte memory window to access the pages.
Current architecture supports up to 256 pages of 16 kilobytes each, allowing up to 4
Megabytes of memory.
Some HC(S)08 derivatives support a memory expansion scheme. Using the paging
mechanism, the user can access program memory by putting the page number into the
PPAGE register, and computing the address offset from the starting address of the paging
window. The following figure refers to MC9S08QE128 derivative as an example of
memory access using the code banking model. Access addresses directly, using the CPU
addresses, or use paged access, which uses the extended addressing method (for example,
access $06ABC directly at $06ABC or with PPAGE = 1 and OFFSET = $0AABC).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
466 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
NOTE
Memory addresses may vary depending on the derivative used.
The user can enter paged addresses in the linker parameter file. The high byte of such an
address is interpreted as page number. An example: 0x048100. Here, 4 is the page
number, while the lower two bytes contain an address within the paging window. This
particular address refers to byte 0x100 within page 4. This format does not impact non-
banked address specification. The following example defines pages 4 through 7 as
sections in the linker parameter file:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 467
Non-ANSI Keywords
The SMALL memory model, the default, assumes that all pointers and functions have 16-
bit addresses unless explicitly specified otherwise. This memory model requires code and
data to be located in the 64-kilobyte address space. Use the -Ms compiler option to select
the SMALL memory model (see -M (-Mb, -Ms, -Mt): Memory Model).
In the TINY memory model, all data including stack must fit into the zero page. This
memory model assumes that data pointers have 8-bit addresses unless explicitly specified
with the keyword __far. The code address space is 64 kilobytes and function pointers are
16-bit in size. Use the -Mt compiler option to select the TINY memory model.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
468 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
This section describes HC(S)08 Backend implementation of the basic ANSI-C types. The
topics covered are as follows:
• Scalar Types
• Floating-Point Types
• Bitfields
• Pointer Types and Function Pointers
• Structured Types and Alignment
• Object Size
• Register Usage
Use the -T compiler option to change any of the basic types (see -T: Flexible Type
Management). Scalar types (except char) do not have a signed/unsigned qualifier, and
their default values are signed (for example, int is the same as signed int).
NOTE
When using Flexible type management, use Minimal Startup
Code instead of ANSI startup code.
the following table gives the sizes and possible formats of the simple types using the -T
option.
Table 12-2. Floating-Point Representation
Type Default Format Default Value Range Formats Available
with the -T Option
Min Max
char (unsigned) 8 bit 0 255 8 bit, 16 bit, 32 bit
signed char 8 bit -128 127 8 bit, 16 bit, 32 bit
unsigned char 8 bit 0 255 8 bit, 16 bit, 32 bit
signed short 16 bit -32768 32767 8 bit, 16 bit, 32 bit
unsigned short 16 bit 0 65535 8 bit, 16 bit, 32 bit
enum (signed) 16 bit -32768 32767 8 bit, 16 bit, 32 bit
signed int 16 bit -32768 32767 8 bit, 16 bit, 32 bit
unsigned int 16 bit 0 65535 8 bit, 16 bit, 32 bit
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 469
Data Types
NOTE
Default value for plain type char is unsigned. Use the -T option
to change the default.
The Compiler supports the two IEEE standard formats (32 and 64 bits wide) for floating-
point types. The following table shows the range of values for the various floating-point
representations.
The Compiler implements the default format for a float as 32-bit IEEE, and double as
IEEE 64-bit format. If you need speed more than the added accuracy of double arithmetic
operations, issue the -Fd: Double is IEEE32 command-line option. Using this option, the
Compiler implements both float and double using the IEEE 32-bit format.
Use the -T: Flexible Type Management option to change the default format of a float or
double.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
470 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
12.3.3 Bitfields
The Compiler allows a maximum bitfield width of 16 bits, with byte-size allocation units.
The Compiler uses words only when a bitfield exceeds eight bits, or when using bytes
causes more than two bits to be left unused. Allo cation order is from the least significant
bit up to the most significant bit in the order of declaration. The following figure
illustrates an allocation scheme.
The following example demonstrates a simple C code source with various ways to access
bitfields, together with the produced code:
Listing: Demonstration of Bitfield Instructions for the HC(S)08 Compiler
#pragma DATA_SEG __SHORT_SEG _zpage /* place following variables into
zero page */
char i, j;
struct {
} B;
void main(void) {
if (i&1) { /* BRCLR */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 471
Data Types
if ((i&1) == 0) { /* BRSET */
if (i&4) { /* BRCLR */
if ((i&4) == 4) { /* BRSET */
i |= 4; /* BSET */
if (B.b0) {
B.b1 = 1;
} else if (B.b1) {
B.b0 = 0;
#if 0
20: }
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
472 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
26: }
29: }
31: i |= 4; /* BSET */
32: }
35: if (B.b0) {
36: B.b1 = 1;
00000021 81 RTS
38: B.b0 = 0;
39: }
40: }
00000027 81 RTS
#endif
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 473
Data Types
the following table shows data pointer sizes depending on memory model and __far,
__near, or __linear keyword usage:
Function pointer size is always two bytes for SMALL and TINY memory models, and
three bytes for Banked memory model.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
474 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
The Compiler uses all the standard registers of the HC(S)08. The stack pointer SP is used
as stack pointer and as a frame pointer.
The native HC08 and the new HCS08 have unique calling protocols. For the HCS08, the
H register loads and stores more easily when loaded and stored with the X register. Thus
the HCS08 uses the H register for parameter passing and return values.
The topics covered here are as follows:
• HC08 Argument Passing
• HCS08 Argument Passing (used for the -Cs08 Option)
• HC08 Return Values
• HCS08 Return Values (used for the -Cs08 Option)
• Returning Large Objects
• Stack Frames
• Pragma TRAP_PROC
• Interrupt Vector Table Allocation
• Segmentation
• Optimizations
• Volatile Objects
The HC08 uses the C calling convention for all functions. The caller pushes the
arguments from left to right. After the call, the caller removes the parameters from the
stack.
When a function contains a fixed number of arguments and the size of the last parameter
is two bytes, the HC08 passes last parameter in X and A.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 475
Calling Protocol and Conventions
When a function contains a fixed number of arguments and the size of the last parameter
is one byte and the size of the next to last parameter is greater than one, the HC08 passes
the last parameter in A. When the size of the next to last parameter is also one byte, the
HC08 passes the next to last parameter in A and the last one in X.
The HCS08 uses the C calling convention for all functions. The caller pushes the
arguments from left to right. After the call, the caller removes the parameters from the
stack.
When a function contains a fixed number of arguments and the size of the last parameter
is two bytes, the HCS08 passes the last parameter in H and X.
When a function contains a fixed number of arguments and the size of the last parameter
is one byte, the HCS08 passes the last parameter in A. If the size of the next to last
parameter is also one byte, the HCS08 passes the next to last parameter in X. If the size of
the next to last parameter is two bytes, the HCS08 passes the next to last parameter in H
and X.
The HC08 returns function results in registers, unless the function returns an object with
a size greater than two bytes. The register used depends on the return type, as shown in
the following table.
Table 12-5. HC08 Return Values
Return Type Registers
char (signed or unsigned) A
int (signed or unsigned) X:A
pointers/arrays X:A
function pointers X:A
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
476 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
The HCS08 returns function results in registers, unless the function returns an object with
a size greater than two bytes. The register used depends on the return type, as shown in
the following table.
Table 12-6. HCS08 Return Values
Return Type Registers
char (signed or unsigned) A
int (signed or unsigned) H:X
Pointers or arrays H:X
Function pointers H:X
Both the HC08 and the HCS08 call functions returning objects larger than two bytes with
an additional parameter. This parameter, the address to which to copy the object, passes
in H:X.
Both systems use a stack frame as a database for passing parameters to and from
functions that use stack in RAM.
The topics covered here are as follows:
• Frame Pointer
• Entry Code
• Exit Code
F unctions normally have a stack frame containing all their local data. The Compiler does
not set up an explicit frame pointer, but generates code to access local data and
parameters on the stack relative to the SP register.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 477
Calling Protocol and Conventions
The entry code reserves space for local variables (refer the following listing).
Listing: Entry Code
PSHA ; Only if there are register parameters
PSHX ; Only if there are register parameters
In this case, s is the size (in bytes) of the local data of the function. There is no static link,
and the dynamic link is not stored explicitly.
Exit code removes local variables from the stack and returns to the caller (refer the
following listing).
Listing: Exit Code
AIS #(t) ; Remove local stack space,
; including an eventual register parameter
This pragma defines an interrupt routine (that is, activating this pragma terminates the
function with an RTI instruction instead of an RTS). Normally, interrupt routines save
and restore the H register at the entry response exit. If you are sure that H is not written in
the interrupt routine, you can use the TRAP_PROC pragma to disable the saving and restoring
of H (see #pragma TRAP_PROC: Mark Function as Interrupt Function).
The Compiler provides a non-ANSI compliant way to directly specify the interrupt vector
number in the source:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
478 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
void
interrupt 0 ResetFunction(void) {
/* reset handler */
The Compiler uses the translation from interrupt vector number to interrupt vector
address shown in the followingthe following.
Table 12-7. Interrupt Vector Translation to Vector Address
Vector Number Vector Address Vector Address Size
0 0xFFFE, 0xFFFF 2
1 0xFFFC, 0xFFFD 2
2 0xFFFA, 0xFFFB 2
... ... ...
n 0xFFFF - (n*2) 2
12.4.9 Segmentation
The Linker memory space may be partitioned into several segments. The Compiler
allows attributing a certain segment name to certain global variables or functions, which
the Linker then allocates into that segment. An entry in the Linker parameter file
determines where that segment actually lies.
Three pragmas specify code segments and data segments:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 479
Calling Protocol and Conventions
All remain valid until the Compiler encounters the next pragma of the same kind. Unless
you specify different segments, the Compiler assumes two default segments named
DEFAULT_ROM (the default code segment) and DEFAULT_RAM (the default data
segment). To explicitly set these default segments as the current segments, use the
segment name DEFAULT ():
Listing: Explicit Default Segments
#pragma CODE_SEG DEFAULT
#pragma DATA_SEG DEFAULT
The additional keyword __SHORT_SEG informs the Compiler that a data segment is
allocated in the zero page (address range from 0x0000 to 0x00FF):
or
Using the zero page enables the Compiler to generate much denser code because it uses
DIRECT addressing mode instead of EXTENDED.
NOTE
It is the programmer's responsibility to actually allocate
__SHORT_SEG segments in the zero page in the Linker
parameter file. For more information, see the Linker section of
the Build Tools manual.
12.4.10 Optimizations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
480 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
This simple optimization replaces certain instructions with shorter and/or faster
equivalents. Examples include using of TSTA instead of CMP #0 or COMA instead of
EORA #0xFF.
This optimization replaces expensive operations with cheaper operations, reducing either
execution time or code size. Examples include using left or right shifts instead of
multiplications and divisions by constant powers of two.
char a, b;
a = b << 4;
LDA b
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 481
Calling Protocol and Conventions
STA a
Mask and shift operations involved in packing or unpacking bitfields cause inefficient
bitfield accesses. To increase efficiency when accessing bitfields only one bit wide, use
direct addressing mode, the BSET/BCLR instruction, and the bit branches BRSET and BRCLR.
To enable direct addressing, declare the bitfield in the zero page using the
DATA_SEG__SHORT_SEG pragma (refer the following listing).
Listing: Example
#pragma DATA_SEG __SHORT_SEG DATA_ZEROPAGE;
struct {
int a:1;
} bf;
void main(void) {
bf.a = -1;
This optimization minimizes the span of branch instructions. The Compiler replaces a
relative branch by an inverted condition branch across an unconditional jump, unless the
offset of this branch is in the range [-128 to 127]:
BRcc dest
dest:
Provided the code indicated by "..." doesn't contain another branch to label dest, the
Compiler changes the previous code to:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
482 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
BR~cc skip
JMP dest
skip:
dest:
Also, the Compiler may resolve branches to branches into two branches to the same
target. The Compiler may remove redundant branches (for example, a branch to the
instruction immediately following it).
The code above has the following effect:
1. The opcode byte of BRN (branch never) replaces an unconditional branch over one
byte.
2. The next byte is skipped (opcode decoded as SKIP1).
3. The opcode of CPHX < immediate_16> replaces an unconditional branch over two bytes,
if no flags are needed afterwards.
4. The following two bytes are skipped (opcode decoded as SKIP2).
5. One byte is gained for SKIP1 and two bytes are gained for SKIP2.
The execution speed remains unchanged. Use the -OnB: Disable Branch Optimizer
compiler option to disable this optimization.
At times the Compiler must choose between generating fast, but large code, or small but
slower code. Usually the Compiler optimizes on code size. It often has to decide between
a runtime routine and expanded code. In these cases, the Compiler chooses runtime
routine only if it is at least three bytes shorter than the expanded instruction sequence.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 483
Generating Compact Code with the HC08 Compiler
The Compiler does not do register tracing on volatile global objects and does not
eliminate accesses to volatile global objects.
Some compiler options or use of __SHORT_SEG segments help you to generate compact code
with the HC08 compiler. The topics covered are as follows:
• Compiler Options
• __SHORT_SEG Segments
• Defining I/O Registers
Using the -Cni (non-integral promotion on integer compiler) option helps reduce the size
of the code generated.
When you specify this option, ANSI C integral promotion does not apply to character
comparison or arithmetic operations. This dramatically reduces the amount of code.
Variables allocated on the direct page (between 0 and 0xFF) are accessed using direct
addressing mode. The Compiler allocates variables on the direct page if you define the
variables with a __SHORT_SEG segment.
Listing: Example
#pragma DATA_SEG __SHORT_SEG myShortSegment
unsigned int myVar1, myVar2;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
484 Freescale Semiconductor, Inc.
Chapter 12 HC(S)08 Backend
In the previous example, access both myVar1 and myVar2 using direct addressing mode.
Access the variables myVar3 and myVar4 using extended addressing mode.
Defining some exported variables in a __SHORT_SEG segment requires that the external
declaration for these variables also specify a __SHORT_SEG segment allocation.
Listing: External Definition of the Above Variable
#pragma DATA_SEG __SHORT_SEG myShortSegment
extern unsigned int myVar1, myVar2;
SECTIONS
PLACEMENT
END
STACKSIZE 0x60
NOTE
The linker is case-sensitive. The segment name must be
identical in the C and PRM files.
If all data and stack fits into the zero page, use the tiny memory model for convenience.
The HC(S)08 I/O Registers are usually based at address 0. To tell the compiler to use
direct addressing mode to access the I/O registers, define these registers in a __SHORT_SEG
section based at the specified address.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 485
Generating Compact Code with the HC08 Compiler
} SCIStruct;
SECTIONS
PLACEMENT
END
STACKSIZE 0x60
NOTE
The linker is case-sensitive. The segment name must be
identical in the C and PRM files.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
486 Freescale Semiconductor, Inc.
Chapter 13
High-Level Inline Assembler for the HC(S)08
The High-Level Inline (HLI) Assembler makes full use of the target processor properties
from within a C program. There is no need to write a separate assembly file, assemble it,
and later bind it with the rest of the application written in ANSI-C with the inline
assembler. The Compiler does all the work. For detailed information, refer to the
Freescale HC(S)08 Family Reference Manual.
This chapter lists the following topics:
• Syntax
• C Macros
• Inline Assembly Language
• Special Features
13.1 Syntax
I nline assembly statements can appear anywhere a C statement can appear (an __asm
statement must be inside a C function). Inline assembly statements take one of two forms,
which have various configurations. Using the first form, you can put multiple __asm
statements on one line and delimit comments like regular C or C++ comments. Using the
second form, you can contain one to several assembly instructions within the __asm
block, but only one assembly instruction per line is possible. Also, the semicolon starts an
assembly comment.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 487
C Macros
or
"__asm" "{"
"}"
or
or
or
"#asm"
"#endasm"
13.2 C Macros
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
488 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
C macros expand inside inline assembler code just like they expand in C. One special
point to note is the syntax of the __asm directive (generated by macros). As macros always
expand to one single line, you can only use __asm NOP; the first form of the __asm
keyword, in macros.
for example,
NOP; \
NOP; \
Here the preprocessor expands the NOT_OK macro to one single line, which is mistranslated
because every assembly instruction must be explicitly terminated by a new line.
To use # inside macros to build immediates, use the #pragma NO_STRING_CONSTR:
No String Concatenation during Preprocessing.
The following listing is an inline assembly instruction in the EBNF Syntax. A short
discussion on semantics and special constructs follows.
Listing: Inline Assembly Listing in EBNF Format
AsmLine = [Label](Code | Directive).
Label = ident :.
Directive = Code.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 489
Inline Assembly Language
Imm = # Expression.
Reg = A|HX|H|X|SR.
Variable = Identifier.
Factor = ( Expression )
| - Factor
| @ Factor
| * Factor
| Factor {: Factor|MSB)}
| Number
| TypeQualifier
| Variable {. Field}
| Procedure
| Label
Procedure = Identifier.
Label = Identifier.
Type = Identifier.
Field = Identifier.
To resolve grammar ambiguities, take the longest possible match to reduce to Factor
(shift is always preferred). The pseudo offset MSB designates the most significant byte of
an effective address and is only allowed for memory operands. The TypeQualifier
production above evaluates to the offset of the given field. Type must be the name of a
struct type. All named fields must exist.
This section covers the following topic:
• Register Indirect Addressing Mode
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
490 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
The offset must be constant for the register indirect addressing modes. This constant may
be an immediate or a variable address relocated by the linker.
Example:
STA @Variable_Name,X
The following simple example illustrates the use of the HLI Assembler:
Assuming that str points to a character array, you can write a simple function in assembly
language to determine the length of a string:
Listing: strlen() Definition
int strlen (char *str)
/*** The 'str' character array is passed on the stack. strlen returns
length of 'str'.
__asm {
loop:
test:
};
NOTE
Unless #pragma NO_ENTRY is set, the Compiler takes care of entry
and exit code. You do not have to worry about setting up a
stack frame.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 491
Special Features
The remainder of this section covers special HLI features for the HC(S)08. This section
covers the following topic:
• Caller/Callee Saved Registers
• Reserved Words
• Pseudo Opcodes
• Accessing Variables
• Address Notation
• H:X Instructions
• Constant Expressions
• Optimizing Inline Assembly
• Assertions
• Stack Adjust
• In and Gen Sets
Because the compiler does not save any registers on the caller/callee side, you do not
have to save or restore any registers in the HLI across function calls.
The inline assembler knows some reserved words which must not collide with user-
defined identifiers such as variable names. These reserved words are:
• All opcodes (LDA, STX, ...)
• All register names (A, H, X, HX, SR, SP)
• The identifier MSB
These reserved words are not case-sensitive in the inline assembler; that is, LDA is the
same as lda or even LdA. For all other identifiers (labels, variable names and so on), the
inline assembler is case-sensitive.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
492 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
The inline assembler provides some pseudo opcodes to put constant bytes into the
instruction stream. These are:
• DCB 1 ; Byte constant 1
• DCB 0 ; Byte constant 0
• DCW 12 ; Word constant 12
• DCL 20, 23 ; Longword constants
• DCF 1.85 ; IEEE 32bit float
• DCD 2.0 ; double IEEE64
The inline assembler allows accessing local and global variables declared in C. Simply
use the variable names in the instruction.
In addition to the address syntax described in the HC(S)08 Family Manual, one may
access objects using syntax similar to C and symbolic variable names. In this case all
addresses are assumed to be of type char *.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 493
Special Features
The Compiler allows LDHX with any reasonable argument and does not restrict it to
DIRECT page and IMMEDIATE arguments. In the native HC08, LDHX instructions
represent code patterns which translate automatically into an appropriate code sequence,
unless the option -cs08 is active. Consider the following example (assume local is a
variable on the stack).
Table 13-1. H:X Instructions
Inline Assembly Expansion
LDHX local LDX local:0 PSHX PULH LDX local:1
LDHX @local TSX AIX #<local-offset>
The Compiler is free to modify the instruction stream as long as its semantics remains the
same. This is especially true for stack pointer indirect accesses (ind, SP, for example,
accesses to local variables), which may be replaced by TSX and a ind, H:X access.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
494 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
13.4.9 Assertions
The pseudo instruction below declares that the register <reg> (one of H, X, HX, A)
contains addr at this inst ruction.
_ASSERT <reg>, addr
The Compiler may use this instruction to perform optimizations. The code is correct even
if the Compiler ignores this information. The following listing shows an example.
Listing: Using _ASSERT
LDHX @a:4
MOV #4, tmp
loop:
AIX #-1
LDA 0,X
STA 4,X
_ASSERT HX, @a
ICG-based versions of the compiler no longer support the _STACK pseudo instruction. For
example:
label:
_STACK #offs
This pseudo instruction declares that the stack pointer's value at this instruction is (stack
pointer's value at label) + offs. It is ignored by the ICG-based Compiler. Also:
_ADJ #offs
label:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 495
Special Features
This pseudo instruction adjusts the SP register with appropriate AIS instructions, so that
_STACK holds (value at label+offs) afterwards. The _STACK instruction is useful for situations
like the following:
Listing: Using the _STACK Pseudo Instruction
base:
CLRA
loop:
PSHA
_STACK label:offs
The pseudo instruction below announces to the Compiler that registers in <in-set> are
used further, and those in <gen-set> are not.
The notation below declares which registers are used and which ones are modified by an
instruction:
This works well for JSR, JMP, and RTS (and similar) instructions. The default is always on
the conservative side. Consider the following example.
Listing: Example Program
LDA a:1
ADD b:1
STA b:1
LDA a:0
ADC b:0
STA b:0
RTS ! {}, {}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
496 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
This allows the Compiler to discard the H:X register for accesses to local variables. With
the simple RTS, the Compiler does not know if the H:X register is to be preserved or not.
Separate multiple registers with a +. For example:
RTS ! {A+X}, {}
You can use the MSB syntax to get the high-address part of an object. Consider the
following example.
Listing: Getting the High-Address Part of an Object
int i, *p_i;
void main(void) {
/* p_i = &i */
__asm {
LDA @i
STA p_i:1
LDA @i:MSB
STA p_i
The following examples illustrate the usage with the original code and the generated one.
Listing: Four Examples of HLI Usage and the Generated Assembly Code
char f(void); char f(void);
char asm1(int a) { char asm1(int a) {
int b; int b;
__asm { __asm {
} RTS
} }
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 497
Special Features
}
int b; int b;
__asm { __asm {
} RTS
} }
int b; int b;
__asm { __asm {
} LDA 1,X
} RTS
int b; int b;
__asm { __asm {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
498 Freescale Semiconductor, Inc.
Chapter 13 High-Level Inline Assembler for the HC(S)08
; in this function!
} }
} }
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 499
Special Features
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
500 Freescale Semiconductor, Inc.
Chapter 14
ANSI-C Library Reference
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 501
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
502 Freescale Semiconductor, Inc.
Chapter 15
Library Files
Check out the README.TXT located in the library folder for additional information on
memory models and library filenames.
In the directory structure above, a CodeWarrior * .mcp file can build all the libraries and
the startup code object files. Simply load the <target>_lib.mcp file into your CodeWarrior
project and build all the targets.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 503
Common Source Files
The following table lists the target-independent source and header files of the Standard
ANSI Library.
Table 15-1. Standard ANSI Library-Target Independent Source and Header Files
Source File Header File
alloc.c
assert.c assert.h
ctype.c ctype.h
errno.h
heap.c heap.h
limits.h
math.c, mathf.c limits.h, ieemath.h, float.h
printf.c, scanf.c stdio.h
signal.c signal.h
stdarg.h
stddef.h
stdlib.c stdlib.h
string.c string.h
time.h
Because every memory model needs special startup initialization, the library files also
contain startup object files compiled with different Compiler option settings (see
Compiler Options for details).
Depending on the memory model chosen, link the correct startup file with the
application. The floating point format used does not matter for the startup code.
Note that the library files contain a generic startup written in C as an example of doing all
the tasks needed for a startup:
• Zero Out
• Copy Down
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
504 Freescale Semiconductor, Inc.
Chapter 15 Library Files
• Register initialization
• Handling ROM libraries
Because not all of the above tasks may be needed for an application and for efficiency
reasons, special startup is provided as well (e.g., written in HLI). However, you can also
use the version written in C as well. For example, compile the startup.c file with the
memory/options settings and link it to the application.
The topics covered here are as follows:
• Startup Files for HC08
• Startup Files for HCS08
Depending on the memory model, link a different startup object file to the application.
The following table lists the startup files for the HC08.
Table 15-2. Startup Files for HC08
Startup Object File Startup Source File Compiler Options
start08.o Start08.c -Ms
start08p.o Start08.c -Ms -C++f
start08t.o Start08.c -Mt
start08tp.o Start08.c -Mt -C++f
Depending on the memory model, link a different startup object file to the application.
The following table lists the startup files for the HCS08:
Table 15-3. Startup Files for HCS08
Startup Object File Startup Source File Compiler Options
start08s.o Start08.c -Ms -Cs08
start08ts.o Start08.c -Mt -Cs08
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 505
Library Files
NOTE
This feature is not yet implemented in the current release of the
MCU V10.x tools.
The CodeWarrior IDE delivers most of the ANSI library object files in the form of an
object library (see below).
Several Library files are bundled with the Compiler. Different memory models or
floating point formats require different library files.
The library files contain all necessary runtime functions used by the compiler and the
ANSI Standard Library as well. The list files ( *.lst extension) contain a summary of all
objects in the library file.
To link against a modified file which also exists in the library, specify the file first in the
link order.
Check the readme.txt located in the library structure ( lib\<target>c\README.TXT) for a list of
all delivered library files and the related memory models or options used.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
506 Freescale Semiconductor, Inc.
Chapter 16
Special Features
Not everything defined in the ANSI standard library relates to embedded systems
programming. Therefore, some functions remain unimplemented, and some have been
left open for implementation because they strongly depend on the actual setup of the
target system.
NOTE
All unimplemented functions do a HALT when called. All
functions are re-entrant, except rand() and srand() , because
these use a global variable to store the seed, which might give
problems with light-weight processes. strtok() also uses a global
variable, based on the ANSI standard definition.
This chapter describes and explains these functions:
• Memory Management - malloc(), free(), calloc(), realloc(); alloc.c, and heap.c
• Signals - signal.c
• Multiple-Byte Characters - mblen(), mbtowc(), wctomb(), mbstowcs(), wcstombs();
stdlib.c
• Program Termination - abort(), exit(), atexit(); stdlib.c
• I/O - printf.c
• Locales - locale.*
• ctype
• String Conversions - strtol(), strtoul(), strtod(), and stdlib.c
File alloc.c provides a full implementation of these functions. You must specify heap
location, heap size, and heap overrun processes.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 507
Signals - signal.c
Address all of these points in the heap.c file. View the heap as a large array with a default
error handling function. Feel free to modify this function or the size of the heap to suit the
needs of the application. Define the heap size in libdefs.h, LIBDEF_HEAPSIZE.
Signals are implemented as traps. This means function signal() allows you to set a vector
to some function of your own (ideally a TRAP_PROC), while function raise() is
unimplemented. To ignore a certain signal, install a default handler that does nothing.
Because the compiler does not support multiple-byte characters, all multiple-byte
routines in stdlib.c are unimplemented. If these functions are needed, the programmer
must specifically write them.
Because programs in embedded systems usually are not expected to terminate, we only
provide a minimum implementation of the first two functions, while atexit() is not
implemented at all. Both abort() and exit() perform a HALT.
The printf() library function is unimplemented in the current version of the library sets in
the ANSI libraries, but is implemented in the terminal.c file. This was done because often
no terminal is available or the terminal highly dependent on user hardware.
The ANSI library contains several functions which simplify printf() function
implementation, with all its special cases.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
508 Freescale Semiconductor, Inc.
Chapter 16 Special Features
Using the first, ANSI-compliant way, allocate a buffer and then use the vsprintf() ANSI
function (refer the following listing) .
Listing: Implementation of the printf() Function
int printf(const char *format, ...) {
char outbuf[MAXLINE];
int i;
va_list args;
va_start(args, format);
va_end(args);
WriteString(outbuf);
return i;
The value of MAXLINE defines the maximum size of any value of printf(). Assume the
WriteString() function writes one string to a terminal. The disadvantages of this solution
include:
• A buffer is needed, which may use a large amount of RAM.
• No matter how large the buffer (MAXLINE) is, buffer overflow is always possible.
Therefore we do not recommend this solution. Newer library version provide two non-
ANSI functions (vprintf() and set_printf()) to avoid both disadvantages. Because these
functions are non-ANSI extensions, they are not contained in the stdio.h header file.
Therefore, specify their prototypes before using. Refer the following listing.
Listing: Prototypes of vprintf() and set_printf()
int vprintf(const char *pformat, va_list args);
void set_printf(void (*f)(char));
The set_printf() function installs a callback function, which is called later for every
character vprintf() prints.
Be advised that calls to set_printf() and vprintf() also implement the standard ANSI C
printf() derivatives functions sprintf() and vsprintf(). This allows code sharing across all
printf derivatives.
There is one limitation of the printf() implementation. Because the callback function is
not passed as an argument to vprintf(), but held in a global variable, none of the printf()
derivatives are reentrant. Calls to different derivatives at the same time are not allowed.
The following listing shows a simple implementation of a printf() with vprintf() and
set_printf().
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 509
Locales - locale.*
va_list args;
set_printf(PutChar);
va_start(args, format);
i = vprintf(format, args);
va_end(args);
return i;
16.7 ctype
contains two sets of implementations for all functions. The standard is a set of
ctype
macros which translate into lookup table accesses.
This table uses 257 bytes of memory, so the library provides an implementation using
real functions. These functions are accessible only when the macros are undefined. After
#undef isupper, isupper translates into a call to function isupper(). Without undef, the
corresponding macro replaces isupper.
Using the functions instead of the macros saves RAM and code size, at the expense of
some additional function call overhead.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
510 Freescale Semiconductor, Inc.
Chapter 16 Special Features
ANSI standards for string conversions require that range checking be done. Set the
variable errno accordingly and special limit values are returned. The macro
ENABLE_OVERFLOW_CHECK is set to 1 by default. To reduce code size, we recommend that you
switch this macro off (clear ENABLE_OVERFLOW_CHECK to 0).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 511
String Conversions - strtol(), strtoul(), strtod(), and stdlib.c
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
512 Freescale Semiconductor, Inc.
Chapter 17
Library Structure
This section examines the various parts of the ANSI-C standard library, grouped by
category. This library not only contains a rich set of functions, but also numerous types
and macros.
This chapter lists the following topics:
• Error Handling
• String Handling Functions
• Memory Block Functions
• Mathematical Functions
• Memory Management
• Searching and Sorting
• Character Functions
• System Functions
• Time Functions
• Locale Functions
• Conversion Functions
• printf() and scanf()
• File I/O
Use the global variable errno to do ANSI library error handling. Library routines set errno
and it may be tested by user programs. There also are a few functions for error handling:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 513
String Handling Functions
Strings in ANSI-C are always null-terminated character sequences. The ANSI library
provides the following functions to manipulate such strings.
Listing: ANSI-C String Manipulation Functions
size_t strlen(const char *s);
char * strcpy(char *to, const char *from);
Closely related to the string handling functions are those operating on memory blocks.
Memory block functions operate on any block of memory, whether it is null-terminated
or not. Give the length of the block as an additional parameter. Also, these functions
work with void pointers instead of char pointers (refer the following listing).
Listing: ANSI-C Memory Block Functions
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
514 Freescale Semiconductor, Inc.
Chapter 17 Library Structure
void * memcpy(void *to, const void *from, size_t size);
void *
memmove(void *to, const void *from, size_t size);
The ANSI library co ntains a variety of floating point functions. The standard interface,
which is defined for type double ( Listing: ANSI-C Double-Precision Mathematical
Functions), has been augmented by an alternate interface (and implementation) using
type float ( Listing: ANSI-C Single-Precision Mathematical Functions).
Listing: ANSI-C Double-Precision Mathematical Functions
double acos(double x);
double asin(double x);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 515
Mathematical Functions
The float type functions use the same names with an appended f.
Listing: ANSI-C Single-Precision Mathematical Functions
float acosf(float x);
float asinf(float x);
In addition, the ANSI library also defines some functions operating on integral values
(refer the following listing).
Listing: ANSI Functions with Integer Arguments
int abs(int i);
div_t div(int a, int b);
To allocate and deallocate memory blocks, the ANSI library provides the following
functions:
Because it is not possible to implement these functions in a way that suits all possible
target processors and memory configurations, all these functions are based on the system
module heap.c file, which can be modified by the user to fit a particular memory layout.
The ANSI library contains both a generalized s earching and a generalized sorting
procedure:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 517
Character Functions
These functions test or convert characters. All these functions are implemented both as
macros and as functions, and, by default, the macros are active. To use the corresponding
function, you have to #undefine the macro.
Listing: ANSI-C Character Functions
int isalnum(int ch);
int isalpha(int ch);
The ANSI library also defines an interface for multiple-byte and wide characters. The
implementation only offers minimal support for this feature: the maximum length of a
multiple-byte character is one byte.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
518 Freescale Semiconductor, Inc.
Chapter 17 Library Structure
The ANSI standard includes some system functions for raising and responding to signals,
non-local jumping, and so on.
Listing: ANSI-C System Functions
void abort(void);
int atexit(void(* func) (void));
To process variable length argument lists, the ANSI library provides the following
functions, implemented as macros:
The ANSI library provides several fun ctions to get the current time. In an embedded
systems environment, implementations for these functions cannot be provided because
different targets may use different ways to count the time.
Listing: ANSI-C Time Functions
clock_t clock(void);
time_t time(time_t *time_val);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 519
Locale Functions
These functions handle loca les. The ANSI-C library only supports the minimal C
environment (refer the following listing).
Listing: ANSI-C Locale Functions
struct lconv *localeconv(void);
char *setlocale(int cat, const char *locale);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
520 Freescale Semiconductor, Inc.
Chapter 17 Library Structure
More conversions are possible for the C functions for reading and writing formatted data.
The following listing shows these functions.
Listing: ANSI-C Read and Write Functions
int sprintf(char *s, const char *format, ...);
int vsprintf(char *s, const char *format, va_list args);
The ANSI-C library contains a fairly large file I/O interface. In microcontroller
applications however, one usually does not need file I/O. In the few cases where one
might need it, the implementation depends on the actual target system setup. Therefore, it
is impossible for Freescale to provide an implementation for these features.
Listing: ANSI-C File I/O Functions listing contains file I/O functions while Listing:
ANSI-C Functions for Writing and Reading Characters shows character reading and
writing functions. Listing: ANSI-C Functions for Reading and Writing Blocks of Data
shows data block reading and writing functions. Listing: ANSI-C Formatted I/O
Functions on Files shows functions for formatted I/O on files and Listing: ANSI-C
Positioning Functions shows functions for positioning data within files.
Listing: ANSI-C File I/O Functions
FILE* fopen(const char *name, const char *mode);
FILE* freopen(const char *name, const char *mode, FILE *f);
FILE* tmpfile(void);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 521
File I/O
int fgetc(FILE *f);
char* fgets(char *s, int n, FILE *f);
int getchar(void);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
522 Freescale Semiconductor, Inc.
Chapter 18
Types and Macros in the Standard Library
This section discusses all types and macros defined in the ANSI standard library. The
following header files are covered here:
• errno.h
• float.h
• limits.h
• locale.h
• math.h
• setjmp.h
• signal.h
• stddef.h
• stdio.h
• stdlib.h
• time.h
• string.h
• assert.h
• stdarg.h
• ctype.h
18.1 errno.h
This header file declares two constants used as error indicators in the global variable
errno.
#define EDOM -1
#define ERANGE -2
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 523
float.h
18.2 float.h
This header file defines constants describing the properties of floating-point arithmetic.
See the following tables.
Table 18-1. Rounding and Radix Constants
Constant Description
FLT_ROUNDS Gives the rounding mode implemented
FLT_RADIX The base of the exponent
All other constants are prefixed by either FLT_, DBL_ or LDBL_. FLT_ is a constant for type
float, DBL_ for double, and LDBL_ for longdouble.
18.3 limits.h
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
524 Freescale Semiconductor, Inc.
Chapter 18 Types and Macros in the Standard Library
Defines some constants for the maximum and minimum allowed values for certain types.
Refer the following table.
Table 18-3. Constants Defined in limits.h
Constant Description
CHAR_BIT Number of bits in a character
SCHAR_MIN Minimum value for signed char
SCHAR_MAX Maximum value for signed char
UCHAR_MAX Maximum value for unsigned char
CHAR_MIN Minimum value for char
CHAR_MAX Maximum value for char
MB_LEN_MAX Maximum number of bytes for a multiple-byte character.
SHRT_MIN Minimum value for shortint
SHRT_MAX Maximum value for shortint
USHRT_MAX Maximum value for unsignedshortint
INT_MIN Minimum value for int
INT_MAX Maximum value for int
UINT_MAX Maximum value for unsignedint
LONG_MIN Minimum value for longint
LONG_MAX Maximum value for longint
ULONG_MAX Maximum value for unsignedlongint
18.4 locale.h
The header file in the following listing defines a struct containing all the locale-specific
values.
Listing: Locale-Specific Values
struct
lconv { /*
"
C
"
locale (default) */
char *decimal_point;
/* "." */
char *thousands_sep;
/* "" */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 525
locale.h
char *grouping;
/* "\CHAR_MAX" */
value.
char *int_curr_symbol;
/* "" */
char *currency_symbol;
/* "" */
char *mon_decimal_point;
/* "." */
char *mon_thousands_sep;
/* "" */
char *mon_grouping;
/* "\CHAR_MAX" */
char *positive_sign;
/* "" */
char *negative_sign;
/* "" */
char int_frac_digits;
/* CHAR_MAX */
char frac_digits;
/* CHAR_MAX */
char p_cs_precedes;
/* 1 */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
526 Freescale Semiconductor, Inc.
Chapter 18 Types and Macros in the Standard Library
char p_sep_by_space;
/* 1 */
char n_cs_precedes;
/* 1 */
char n_sep_by_space;
/* 1 */
char p_sign_posn;
/* 4 */
char n_sign_posn;
/* 4 */
};
Use one of several constants in setlocale() to define which part of the locale to set. Refer
the following table.
Table 18-4. Constants Used with setlocale()
Constant Description
LC_ALL Changes the complete locale.
LC_COLLATE Only changes the locale for functions strcoll() and strxfrm().
LC_MONETARY Changes the locale for formatting monetary numbers.
LC_NUMERIC Changes the locale for numeric (non-monetary) formatting.
LC_TIME Changes the locale for function strftime().
LC_TYPE Changes the locale for character handling and multiple-byte
character functions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 527
setjmp.h
18.5 math.h
18.6 setjmp.h
18.7 signal.h
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
528 Freescale Semiconductor, Inc.
Chapter 18 Types and Macros in the Standard Library
18.8 stddef.h
Defines a few generally useful types and constants. Refer the following table.
Table 18-7. Constants Defined in stddef.h
Constant Description
ptrdiff_t The result type of the subtraction of two pointers.
size_t Unsigned type for the result of sizeof.
wchar_t Integral type for wide characters.
#define NULL ((void *) 0)
size_t offsetof ( type, struct_member) Returns the offset of field struct_member in struct type.
18.9 stdio.h
This header file contains two type declarations. Refer the following table.
Table 18-8. Type Definitions in stdio.h
Type Definition Description
FILE Defines a type for a file descriptor.
fpos_t A type to hold the position in the file as needed by fgetpos()
and fsetpos().
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 529
stdlib.h
18.10 stdlib.h
Besides a redefinition of NULL, size_t and wchar_t, this header file contains the type
definitions listed in the following table.
Table 18-10. Type Definitions in stdlib.h
Type Definition Description
typedef div_t; A struct for the return value of div().
typedef ldiv_t; A struct for the return value of ldiv().
18.11 time.h
This header files defines types and constants for time management. Refer the following
listing.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
530 Freescale Semiconductor, Inc.
Chapter 18 Types and Macros in the Standard Library
struct tm {
> 0 It is DST
0 It is not DST
< 0 unknown */
};
The constant CLOCKS_PER_SEC gives the number of clock ticks per second.
18.12 string.h
The string.h file defines only functions to manipulate ANSI-C string but not types or
special defines.
The functions are explained below together with all other ANSI functions.
18.13 assert.h
The assert.h file defines the assert() macro. If the NDEBUG macro is defined, then assert does
nothing. Otherwise, assert() calls the auxiliary function _assert if the sole macro
parameter of assert() evaluates to 0 (FALSE). Refer the following listing.
Listing: Use assert() to Assist in Debugging
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 531
stdarg.h
#ifdef NDEBUG
#define assert(EX)
#else
#endif
18.14 stdarg.h
The stdarg.h file defines the type va_list and the macros va_arg(), va_end(), and
va_start(). The type va_list implements a pointer to one argument of an open parameter
list. The macro va_start() initializes a variable of type va_list to point to the first open
parameter, given the last explicit parameter and its type as arguments. The macro va_arg()
returns one open parameter, given its type and also makes the va_list argument pointing
to the next parameter. The va_end() macro finally releases the actual pointer. For all
implementations, the va_end() macro does nothing because va_list is implemented as an
elementary data type and therefore it must not be released. The va_start() and the va_arg()
macros have a type parameter, accessed only with sizeof().
Listing: Example using stdarg.h
char sum(long p, ...) {
char res=0;
va_end(list);
return res;
void main(void) {
char c = 2;
if (f(10L, c) != 2) Error();
In the line (*), va_arg must be called with int, not with char. Because of the default
argument-promotion rules of C, integral types pass an int at least and floating types pass
a double at least. In other words, using va_arg(..., char) or va_arg(..., short) yields
undefined results in C. Be cautious when using variables instead of types for va_arg(). In
the example above, res= va_arg(list, res) is incorrect unless res has type int and not char.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
532 Freescale Semiconductor, Inc.
Chapter 18 Types and Macros in the Standard Library
18.15 ctype.h
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 533
ctype.h
#endif /* __OPTIMIZE_FOR_TIME__ */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
534 Freescale Semiconductor, Inc.
Chapter 19
The Standard Functions
This section describes all the standard functions in the ANSI-C library. Each function
description consists of the subsections listed in the following table:
Table 19-1. Function Description Subsections
Subsection Description
Syntax Shows the function's prototype and which header file to
include.
Description Describes how to use the function.
Return Describes what the function returns in which case. If the
function modifies the global variable errno, describes
possible values also.
See also Contains cross-references to related functions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 535
abort()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
536 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.1 abort()
Syntax
void abort(void);
Description
abort() terminates the program. It does the following (in this order):
• Raises signal SIGABRT
• Flushes all open output streams
• Closes all open files
• Removes all temporary files
• Calls HALT
If your application handles SIGABRT and the signal handler does not return (for example,
because it does a longjmp()), the application is not halted.
Return
None
See also
atexit()
exit()
raise()
signal()
19.2 abs()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 537
acos() and acosf()
labs()
Syntax
Description
acos() computes the principal value of the arc cosine of x.
Return
The arc cosine cos^(-1)(x) of x in the range between 0 and Pi, if x is in the range -1 <= x <=
1. If x is not in this range, the function returns NAN and sets errno to EDOM.
See also
asin() and asinf()
atan() and atanf()
atan2() and atan2f()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
538 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.4 asctime()
Description
asctime() converts the time, broken down in timeptr, into a string.
Return
A pointer to a string containing the time string.
See also
localtime()
mktime()
time()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 539
assert()
Description
asin() computes the principal value of the arc sine of x.
Return
The arc sine sin^(-1)(x) of x in the range between -Pi/2 and Pi/2, if x is in the range -1 <= x
<= 1. If x is not in this range, the function returns NAN and sets errno to EDOM.
See also
acos() and acosf()
atan() and atanf()
atan2() and atan2f()
cos() and cosf()
19.6 assert()
Syntax
Description
The assert() macro indicates that expression expr is expected to be true at this point in the
program. If expr is false (0), assert() halts the program. Compiling with option -DNDEBUG or
placing the preprocessor control statement #define NDEBUG before the #include <assert.h>
statement effectively deletes all assertions from the program.
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
540 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Nothing
See also
abort()
exit()
Syntax
Description
atan() computes the principal value of the arc tangent of x.
Return
The arc tangent tan^(-1)(x), in the range from -Pi/2 to Pi/2 rad.
See also
acos() and acosf(),
asin() and asinf(),
atan2() and atan2f(),
cos() and cosf(),
sin() and sinf(), and
tan() and tanf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 541
atexit()
Syntax
Description
computes the principal value of the arc tangent of y/x. It uses the sign of both
atan2()
operands to determine the quadrant of the result.
Return
The arc tangent tan^(-1)(y/x), in the range from -Pi to Pi rad, if neither x or y are 0. If both
x and y are 0, it returns 0.
See also
acos() and acosf()
19.9 atexit()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
542 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
atexit() lets you install a function that is to be executed just before the normal
termination of the program. You can register at most 32 functions with atexit(). The first
function registered is the last function called; likewise the last function registered is the
first function called.
Return
atexit() returns 0 if it registered the function, otherwise it returns a non-zero value.
See also
abort()
exit()
19.10 atof()
Syntax
Description
atof()converts the string s to a double floating point value, ignoring white space at the
beginning of s. It stops converting when it reaches either the end of the string or a
character that cannot be part of the number. The number format accepted by atof() is as
follows:
FloatNum = Sign{Digit}[.{Digit}][Exp]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 543
atoi()
Sign = [+|-]
Return
atof() returns the converted double floating point value.
See also
atoi()
strtod()
strtol()
strtoul()
19.11 atoi()
Syntax
Description
atoi() converts the string s to an integer value, ignoring white space at the beginning of s.
It stops converting when it reaches either the end of the string or a character that cannot
be part of the number. The number format accepted by atoi() is as follows:
Number = [+|-]Digit{Digit}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
544 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Return
atoi() returns the converted integer value.
See also
atof()
atol()
strtod()
strtol()
strtoul()
19.12 atol()
Syntax
Description
atol() converts the string s to an long value, ignoring white space at the beginning of s. It
stops converting when it reaches either the end of the string or a character that cannot be
part of the number. The number format accepted by the followingatol() is as follows:
Number = [+|-]Digit{Digit}
Return
atol() returns the converted long value.
See also
atoi()
atof()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 545
bsearch()
strtod()
strtol()
strtoul()
19.13 bsearch()
Syntax
size_t n,
size_t size,
cmp_func cmp());
Description
bsearch()performs a binary search in a sorted array. It calls the comparison function cmp()
with two arguments: a pointer to the key element that is to be found and a pointer to an
array element. Thus, the cmp_func type can be declared as:
const void
*data);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
546 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
NOTE
Make sure the array contains only elements of the same size.
bsearch() also assumes that the array is sorted in ascending order
with respect to the comparison function cmp().
Return
bsearch() returns a pointer to an array element that matches the key, if one exists. If the
comparison function never returns zero (that is, no matching array element exists),
bsearch() returns NULL.
19.14 calloc()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 547
ceil() and ceilf()
Description
calloc() allocates a block of memory for an array containing n elements of size size, and
initializes all bytes in the memory block to zero. To deallocate the block, use free(). Do
not use the default implementation in interrupt routines as it is not reentrant.
Return
calloc() returns a pointer to the allocated memory block. If calloc() cannot allocate the
block, the return value is NULL.
See also
malloc()
realloc()
Syntax
Description
These functions round their parameters up to the nearest integer.
Return
ceil() returns the smallest integral number larger than x.
See also
floor() and floorf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
548 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.16 clearerr()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
clearerr() resets the error flag and the EOF marker of file f.
Return
None
19.17 clock()
clock_t clock(void);
Description
clock()determines the amount of time since your system started, in clock ticks. To
convert to seconds, divide by CLOCKS_PER_SEC.
Return
clock() returns the amount of time since system startup.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 549
cos() and cosf()
See also
time()
Syntax
Description
cos() computes the principal value of the cosine of x. Express x in radians.
Return
The cosine cos(x).
See also
acos() and acosf()
asin() and asinf()
atan() and atanf()
atan2() and atan2f()
sin() and sinf()
tan() and tanf()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
550 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
cosh() computes the hyperbolic cosine of x.
Return
The hyperbolic cosine cosh(x). If the computation fails because the value is too large, the
function returns HUGE_VAL and sets errno to ERANGE.
See also
cos() and cosf()
sinh() and sinhf()
tanh() and tanhf()
19.20 ctime()
Description
ctime() converts the calendar-time timer to a character string.
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 551
difftime()
mktime()
time()
19.21 difftime()
Description
difftime() calculates the number of seconds between any two calendar times.
Return
The number of seconds between the two times, as a double.
See also
mktime()
time()
19.22 div()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
552 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
div() computes both the quotient and the modulus of the division x/y.
Return
A structure with the results of the division.
See also
ldiv()
19.23 exit()
Syntax
Description
exit() terminates the program normally. It does the following, in this order:
• executes all functions registered with atexit()
• flushes all open output streams
• closes all open files
• removes all temporary files
• calls HALT
exit() ignores the status argument.
See also
abort()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 553
fabs() and fabsf()
Syntax
#include <math.h >
Description
exp() computes ex, where e is the base of natural logarithms.
Return
ex.If the computation fails because the value is too large, this function returns HUGE_VAL
and sets errno to ERANGE.
See also
log() and logf()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
554 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
fabs() computes the absolute value of x.
Return
The absolute value of x for any value of x.
See also
abs()
labs()
19.26 fclose()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fclose() closes file f. Before doing so, fclose() does the following:
• Flushes the stream, if the file was not opened in read-only mode
• Discards and deallocates any buffers that were allocated automatically (that is, not
using setbuf()).
Return
Zero, if the function succeeds; EOF otherwise.
See also
fopen()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 555
ferror()
19.27 feof()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
feof() tests whether previous I/O calls on file f tried to do anything beyond the end of the
file.
NOTE
Calling clearerr() or fseek() clears the file's end-of-file flag;
therefore feof() returns 0.
Return
Zero, if not at the end of the file; EOF otherwise.
19.28 ferror()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
ferror() tests whether an error occurred on file f. To clear the file's error indicator, use
clearerr(). rewind() automatically resets the file's error flag.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
556 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
NOTE
Do not use ferror() to test for end-of-file. Use feof() instead.
Return
Zero, if no error occurred; non-zero otherwise.
19.29 fflush()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fflush() flushes the I/O buffer of file f, allowing a clean switch between reading and
writing the same file. If the program was writing to file f, fflush() writes all buffered data
to the file. If it was reading, fflush() discards any buffered data. If f is NULL, fflush()
flushes all files open for writing.
Return
Zero, if no error occurred; EOF otherwise.
See also
setbuf()
setvbuf()
19.30 fgetc()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 557
fgetpos()
Syntax
Description
fgetc() reads the next character from file f.
NOTE
If file f was opened as a text file, fgetc() reads the end-of-line
character combination as one '\n' character.
Return
fgetc() reads the character as an integer in the range from 0 to 255. If a read error occurs,
fgetc() returns EOF and sets the file's error flag, so that a subsequent call to ferror() returns
a non-zero value. If an attempt is made to read beyond the end of the file, fgetc() also
returns EOF, but sets the end-of-file flag instead of the error flag so that feof() returns EOF,
but ferror() returns zero.
See also
fgets()
fopen()
fread()
fscanf()
getc()
19.31 fgetpos()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
558 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
fgetpos() returns the current file position in *pos. Use this value later to reset the position,
using fsetpos().
NOTE
Do not assume the value in *pos to have any particular meaning,
such as a byte offset from the beginning of the file. The ANSI
standard does not require this, and in fact any value may be put
into *pos as long as an fsetpos() with that value resets the
position in the file correctly.
Return
Non-zero, if an error occurred; zero otherwise.
See also
fseek()
ftell()
19.32 fgets()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fgets() reads a string of at most n-1 characters from file f into s. Immediately after the last
character read, fgets() appends a '\0'. If fgets() reads a line break ( '\n') or reaches the
end of the file before having read n-1 characters, the following happens:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 559
floor() and floorf()
• If fgets() reads a line break, it adds the '\n' plus a '\0' to s and returns successfully.
• If it reaches the end of the file after having read at least 1 character, it adds a '\0' to s
and returns successfully.
• If it reaches EOF without having read any character, it sets the file's end-of-file flag
and returns unsuccessfully ( s is left unchanged).
Return
NULL, if an error occurred; s otherwise.
See also
fgetc()
fputs()
Syntax
Description
floor() calculates the largest integral number less than or equal to x.
Return
The largest integral number not less than or equal to x.
See also
ceil() and ceilf()
modf() and modff()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
560 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Syntax
Description
fmod() calculates the floating point remainder of x/y.
Return
The floating point remainder of x/y, with the same sign as x. If y is 0, it returns 0 and sets
errno to EDOM.
Seealso
div()
ldiv()
ldexp() and ldexpf()
modf() and modff()
19.35 fopen()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
#include <stdio.h >
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 561
fopen()
Description
fopen() opens a file with the given name and mode. It automatically allocates an I/O
buffer for the file.
There are three main modes: read, write, and update (both read and write) accesses. Each
can be combined with either text or binary mode to read a text file or update a binary file.
Opening a file for text accesses translates the end-of-line character (combination) into
'\n' when reading and vice versa when writing. The following table lists all possible
modes.
Table 19-5. Operating Modes of the fopen() Function
Mode Effect
r Open the file as a text file for reading.
w Create a text file and open it for writing.
a Open the file as a text file for appending.
rb Open the file as a binary file for reading.
wb Create a file and open as a binary file for writing.
ab Open the file as a binary file for appending.
r+ Open a text file for updating.
w+ Create a text file and open for updating.
a+ Open a text file for updating. Append all writes to the end.
r+b or rb+ Open a binary file for updating.
w+b or wb+ Create a binary file and open for updating.
a+b or ab+ Open a binary file for updating. Append all writes to the end.
If the mode contains an r, but the file doesn't exist, fopen() returns unsuccessfully.
Opening a file for appending (mode contains a) always appends writing to the end, even
if fseek(), fsetpos(), or rewind() is called. Opening a file for updating allows both read
and write accesses on the file. However, fseek(), fsetpos(), or rewind() must be called in
order to write after a read or to read after a write.
Return
A pointer to the file descriptor of the file. If fopen() cannot create the file, the function
returns NULL.
See also
fclose()
freopen()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
562 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
setbuf()
setvbuf()
19.36 fprintf()
Syntax
Description
fprintf() is the same as sprintf(), but the output goes to file f instead of a string.
For a detailed format description, see sprintf().
Return
The number of characters written. If some error occurred, fprintf() returns EOF.
See also
printf()
vfprintf(), vprintf(), and vsprintf()
19.37 fputc()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 563
fputs()
Description
fputc() writes a character to file f.
Return
The integer value of ch. If an error occurred, fputc() returns EOF.
See also
fputs()
19.38 fputs()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fputs() writes the zero-terminated string s to file f (without the terminating '\0').
Return
EOF, if an error occurred; zero otherwise.
See also
fputc()
19.39 fread()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
564 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
fread()reads a contiguous block of data. It attempts to read n items of size size from file f
and stores them in the array to which ptr points. If either n or size is 0, nothing is read
from the file and the array is left unchanged.
Return
The number of items successfully read.
See also
fgetc()
fgets()
fwrite()
19.40 free()
Description
free() deallocates a memory block previously allocated by calloc(), malloc(), or realloc().
If ptr is NULL, nothing happens. The default implementation is not reentrant; do not use in
interrupt routines.
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 565
freopen()
19.41 freopen()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
FILE *f);
Description
freopen() opens a file using a specific file descriptor. Use this function for redirecting
stdin, stdout, or stderr. For information about possible modes, see fopen().
Return
See also
fclose()
fopen()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
566 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
frexp() splits a floating point number into mantissa and exponent. The relation is x = m *
2^exp. m always normalizes to the range 0.5 < m <= 1.0. The mantissa has the same sign as
x.
Return
The mantissa of x (the exponent is written to *exp). If x is 0.0, both the mantissa (the return
value) and the exponent are 0.
See also
exp() and expf()
ldexp() and ldexpf()
modf() and modff()
19.43 fscanf()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fscanf() is the same as scanf() but the input comes from file f instead of a string.
Return
The number of data arguments read, if any input was converted. If not, it returns EOF.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 567
fseek()
See also
fgetc()
fgets()
sscanf()
19.44 fseek()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fseek() sets the current position in file f.
For binary files, the position can be set in three ways, as shown in this table.
Table 19-6. fseek() Function Offset Position into the File
Mode Set Position
SEEK_SET offset bytes from the beginning of the file.
SEEK_CUR offset bytes from the current position.
SEEK_END offset bytes from the end of the file.
For text files, either offset must be zero or mode is SEEK_SET and offset a value returned by a
previous call to ftell().
If fseek() is successful, it clears the file's end-of -file flag. The position cannot be set
beyond the end of the file.
Return
Zero, if successful; non-zero otherwise.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
568 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
fgetpos()
fsetpos()
ftell()
19.45 fsetpos()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
fsetpos()sets the file position to pos, which must be a value returned by a previous call to
fgetpos() on the same file. If the function is successful, it clears the file's end-of-file flag.
The position cannot be set beyond the end of the file.
Return
Zero, if successful; non-zero otherwise.
See also
fgetpos()
fseek()
ftell()
19.46 ftell()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 569
fwrite()
Syntax
Description
ftell()returns the current file position. For binary files, this is the byte offset from the
beginning of the file; for text files, do not use this value except as an argument to fseek().
Return
-1, if an error occurred; otherwise the current file position.
See also
fgetpos()
fsetpos()
19.47 fwrite()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
size_t size,
size_t n,
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
570 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
FILE *f);
Description
fwrite() writes a block of data to file f. It writes n items of size size, starting at address
ptr.
Return
The number of items successfully written.
See also
fputc()
fputs()
fread()
19.48 getc()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
getc()is the same as fgetc(), but may be implemented as a macro. Therefore, ensure that
expression f has no side effects.
Return
See also
fgetc()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 571
getchar()
19.49 getchar()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
int getchar(void);
Description
getchar() is the same as getc(stdin).
Return
See also
fgetc()
19.50 getenv()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
getenv() returns the value of environment variable name.
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
572 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
NULL
See also
19.51 gets()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
gets() reads a string from stdin and stores it in s. It stops reading when it reaches a line
break or EOF character, but does not append this character to the string. gets() terminates
the string with zero.
If the function reads EOF before any other character, it sets stdin's end-of-file flag and
returns unsuccessfully without changing string s.
Return
NULL, if an error occurred; s otherwise.
See also
fgetc()
puts()
19.52 gmtime()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 573
isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), and isxdigit()
Description
converts *time to Universal Coordinated Time (UTC), which is equivalent to
gmtime()
Greenwich Mean Time (GMT).
Return
NULL, if UTC is unavailable; a pointer to a struct containing UTC otherwise.
See also
ctime()
time()
Syntax
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
574 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
These functions determine whether character ch belongs to a certain set of characters. The
next table describes the character ranges tested by the functions.
Table 19-7. Testing Functions Character Range
Function ch Test Range
isalnum() Alphanumeric character ( A-Z, a-z, or 0-9)
isalpha() Alphabetic character ( A-Z or a-z)
iscntrl() Control character ( \000-\037 or \177 (DEL))
isdigit() Decimal digit ( 0-9)
isgraph() Printable character except space ( !-~)
islower() Lower case letter ( a-z)
isprint() Printable character ( ' '-~)
ispunct() Punctuation character ( !-/, :-@, [-' and {-~)
isspace() White space character ( ' ', \f, \n, \r, \t and \v)
isupper() Upper case letter ( A-Z)
isxdigit() Hexadecimal digit ( 0-9, A-F or a-f)
Return
TRUE ( 1), if ch is in the character class; 0 otherwise.
See also
tolower()
toupper()
19.54 labs()
Syntax
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 575
ldexp() and ldexpf()
See also
abs()
Syntax
Description
ldexp() multiplies x by 2exp.
Return
x * 2exp.If this function fails because the result is too large, both ldexp() and ledxpf()
return HUGE_VAL and set errno to ERANGE.
See also
exp() and expf()
frexp() and frexpf()
log() and logf()
log10() and log10f()
modf() and modff()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
576 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.56 ldiv()
Syntax
Description
ldiv() computes both the quotient and the modulus of the division x/y.
Return
A structure containing the division results.
See also
div()
19.57 localeconv()
Description
returns a pointer to a struct containing information about the current locale
localeconv()
(for example, formatting monetary quantities).
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 577
localtime()
19.58 localtime()
Description
localtime() converts *time into broken-down time.
Return
A pointer to a struct containing the broken-down time.
See also
asctime()
mktime()
time()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
578 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
log() computes the natural logarithm of x.
Return
ln(x), if x is greater than zero. If x is smaller then zero, log() returns NAN; if x is equal to
zero, log() returns negative infinity. In both cases, log() sets errno to EDOM.
See also
exp() and expf()
log10() and log10f()
Syntax
Description
log10() computes the decadic logarithm (the logarithm to base 10) of x.
Return
log10(x), if x is greater than zero. If x is smaller then zero, log10() returns NAN; if x is equal
to zero, log10() returns negative infinity. In both cases, log10() sets errno to EDOM.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 579
longjmp()
See also
exp() and expf()
log10() and log10f()
19.61 longjmp()
Syntax
Description
longjmp() performs a non-local jump to some location, earlier in the call chain, which was
marked by a call to setjmp(). longjmp() restores the environment at the time of that call to
setjmp() ( env, which also was the parameter to setjmp()) and your application continues as
if the call to setjmp() just returned the value val.
Return
See also
setjmp()
19.62 malloc()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
580 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
malloc() allocates a block of memory for an object of size size bytes. The content of this
memory block is undefined. To deallocate the block, use free(). Do not use malloc() in
interrupt routines as the default implementation is not reentrant.
Return
malloc() returns a pointer to the allocated memory block. If the block cannot be allocated,
the return value is NULL.
See also
calloc()
realloc()
19.63 mblen()
Description
mblen() determines the number of bytes the multi-byte character pointed to by s occupies.
Return
0, if s is NULL.
-1, if the first n bytes of *s do not form a valid multi-byte character.
n, the number of bytes of the multi-byte character otherwise.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 581
mbstowcs()
See also
mbtowc()
mbstowcs()
19.64 mbstowcs()
size_t n);
Description
mbstowcs() converts a multi-byte character string mbs to a wide character string wcs. Only
the first n elements are converted.
Return
The number of elements converted, or (size_t) - 1 if an error occurred.
See also
mblen()
mbtowc()
19.65 mbtowc()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
582 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
mbtowc() converts a multi-byte character s to a wide character code wc. Only the first n
bytes of *s are taken into consideration.
Return
The number of bytes of the multi-byte character converted (size_t) if successful or -1 if
an error occurred.
See also
mblen()
mbstowcs()
19.66 memchr()
Syntax
Description
looks for the first occurrence of a byte containing ( ch&0xFF) in the first n bytes of
memchr()
the memory are pointed to by p.
Return
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 583
memcmp()
19.67 memcmp()
Syntax
size_t n);
Description
memcmp() compares the first n bytes of the two memory areas pointed to by p and q.
Return
A positive integer, if p is considered greater than q; a negative integer if p is considered
smaller than q or zero if the two memory areas are equal.
See also
memchr()
strcmp()
strncmp()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
584 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Syntax
size_t n);
size_t n);
Description
Both functions copy n bytes from q to p. memmove() also works if the two memory areas
overlap.
Return
p
See also
strcpy()
strncpy()
19.69 memset()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 585
mktime()
Syntax
Description
memset() sets the first n bytes of the memory area pointed to by p to the value ( val&0xFF).
Return
p
See also
calloc()
memcpy() and memmove()
19.70 mktime()
Description
mktime() converts *time to a time_t. The *time fields may have any value and are not
restricted to the ranges given in time.h. If the conversion is successful, mktime() restricts
the fields of *time to these ranges and also sets the tm_wday and tm_yday fields correctly.
Return
*time as a time_t
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
586 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
See also
ctime()
gmtime()
time()
Syntax
Description
modf() splits the floating-point number x into an integral part (returned in *i) and a
fractional part. Both parts have the same sign as x.
Return
The fractional part of x
See also
floor() and floorf()
fmod() and fmodf()
frexp() and frexpf()
ldexp() and ldexpf()
19.72 perror()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 587
pow() and powf()
Syntax
Description
perror()writes an error message appropriate for the current value of errno to stderr. The
character string msg is part of perror's output.
Return
See also
assert()
strerror()
Syntax
Description
pow() computes x to the power of y (that is, xy).
Return
xy, if x > 0
1, if y == 0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
588 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.74 printf()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
printf() is the same as sprintf(), but the output goes to stdout instead of a string.
For a detailed format description see sprintf().
Return
The number of characters written. Returns EOF if some error occurred.
See also
fprintf()
vfprintf(), vprintf(), and vsprintf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 589
putchar()
19.75 putc()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
putc()is the same as fputc(), but may be implemented as a macro. Therefore, ensure that
expression f has no side effects. See fputc() for more information.
Return
See also
fputc()
19.76 putchar()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
putchar(ch) is the same as putc (ch, stdin). See fputc() for more information.
Return
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
590 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
fputc()
19.77 puts()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
puts() writes string s followed by a newline ( \n) to stdout.
Return
EOF, if an error occurred; zero otherwise.
See also
fputc()
putc()
19.78 qsort()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 591
raise()
Description
qsort() sorts the array according to the ordering implemented by the comparison function.
It calls the cmp() comparison function with two pointers to array elements ( *key, *other).
Thus, the type cmp_func() can be declared as:
NOTE
Make sure the array contains elements of the same size.
Return
See also
19.79 raise()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
592 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
raise()raises the given signal, invoking the signal handler or performing the defined
response to the signal. If a response was undefined or a signal handler is not installed, the
application aborts.
Return
Non-zero, if an error occurred; zero otherwise.
See also
signal()
19.80 rand()
Syntax
int rand(void);
Description
rand()generates a pseudo random number in the range from 0 to RAND_MAX. The numbers
generated are based on a seed, which initially is 1. To change the seed, use srand().
The same seeds always lead to the same sequence of pseudo random numbers.
Return
A pseudo random integer in the range from 0 to RAND_MAX.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 593
remove()
19.81 realloc()
Description
realloc() changes the size of a memory block, preserving its contents. ptr must be a
pointer returned by calloc(), malloc(), realloc(), or NULL. In the latter case, realloc() is
equivalent to malloc().
If the new memory block size is smaller than the old size, realloc() discards the memory
at the end of the block. If size is zero (and ptr is not NULL), realloc() frees the whole
memory block.
If there is not enough memory to perform the realloc(), the old memory block is left
unchanged, and realloc() returns NULL. Do not use realloc() in interrupt routines as the
default implementation is not reentrant.
Return
returns a pointer to the new memory block. If the operation cannot be
realloc()
performed, realloc() returns NULL.
See also
free()
19.82 remove()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
594 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
#include <stdio.h>
Description
deletes the file filename. If the file is open, remove() does not delete it and returns
remove()
unsuccessfully.
Return
Non-zero, if an error occurred; zero otherwise.
See also
tmpfile()
tmpnam()
19.83 rename()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
#include <stdio.h>
Description
rename()renames the from file to to. If there already is a to file, rename() does not change
anything and returns with an error code.
Return
Non-zero, if an error occurred; zero otherwise.
See also
tmpfile()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 595
rewind()
tmpnam()
19.84 rewind()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
#include <stdio.h>
Description
rewind() resets the current position in file f to the beginning of the file. It also clears the
file's error indicator.
Return
See also
fopen()
fseek()
fsetpos()
19.85 scanf()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
596 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
scanf() is the same as sscanf(), but the input comes from stdin instead of a string.
Return
The number of data arguments read, if any input was converted. If not, it returns EOF.
See also
fgetc()
fgets()
fscanf()
19.86 setbuf()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
#include <stdio.h>
Description
setbuf() lets you specify how a file is buffered. If buf is NULL, the file is unbuffered (all
input or output goes directly to and comes directly from the file). If buf is not NULL, it is
used as a buffer ( buf points to an array of BUFSIZ bytes).
Return
See also
fflush()
setvbuf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 597
setjmp()
19.87 setjmp()
Syntax
Description
setjmp()saves the current program state in the environment buffer env and returns zero.
This buffer can be used as a parameter to a later call to longjmp(), which then restores the
program state and jumps back to the location of setjmp(). This time, setjmp() returns a
non-zero value, which is equal to the second parameter to longjmp().
Return
Zero if called directly. Non-zero if called by longjmp().
See also
longjmp()
19.88 setlocale()
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
598 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
setlocale() changes the program's locale, either all or part of it, depending on class. The
character string loc gives the new locale. The following table lists the classes allowed.
Table 19-10. setlocale() Function Allowable Classes
Class Affected Function
LC_ALL All classes
LC_COLLATE strcoll() and strxfrm() functions
LC_MONETARY Monetary formatting
LC_NUMERIC Numeric formatting
LC_TIME strftime() function
LC_TYPE Character handling and multi-byte character functions
NOTE
The CodeWarrior IDE supports only the minimum locale C (see
locale.h), so this function has no effect.
Return
C, if loc is C or NULL; NULL otherwise.
See also
localeconv()
strcoll()
strftime()
strxfrm()
19.89 setvbuf()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
#include <stdio.h>
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 599
signal()
char *buf,
int mode,
size_t size);
Description
Use setvbuf() to specify how a file is buffered. mode determines how the file is buffered.
Table 19-11. setvbuf() Function Operating Modes
Mode Buffering
_IOFBF Fully buffered
_IOLBF Line buffered
_IONBF Unbuffered
To make a file unbuffered, call setvbuf() with mode _IONBF; the other arguments ( buf and
size) are ignored.
In all other modes, the file uses buffer buf of size size. If buf is NULL, the function allocates
a buffer of size size itself.
See also
fflush()
setbuf()
19.90 signal()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
600 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
signal()defines how the application responds to the sig signal. The various responses are
given by the table below.
Table 19-12. Input Signal Responses
Handler Response to the Signal
SIG_IGN Ignores the signal
SIG_DFL The default response ( HALT).
a function Calls the function with sig as parameter.
Raise the signal using the raise() function. Before the handler is called, the response is
reset to SIG_DFL.
In the CodeWarrior IDE, there are only two signals: SIGABRT indicates an abnormal
program termination, and SIGTERM indicates a normal program termination.
Return
If signal succeeds, it returns the previous response for the signal; otherwise it returns
SIG_ERR and sets errno to a positive non-zero value.
Syntax
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 601
sinh() and sinhf()
Syntax
Description
sinh() computes the hyperbolic sine of x.
Return
The hyperbolic sine sinh(x) of x. If it fails because the value is too large, it returns infinity
with the same sign as x and sets errno to ERANGE.
See also
asin() and asinf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
602 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.93 sprintf()
Syntax
#include <stdio.h>
Description
sprintf()writes formatted output to string s. It evaluates the arguments, converts them
according to format, and writes the result to s, terminated with a zero character.
The format string contains the text to be printed. Any character sequence in format
starting with % is a format specifier that is replaced by the corresponding argument. The
first format specifier is replaced with the first argument after format, the second format
specifier by the second argument, and so on.
A format specifier has the form:
FormatSpec = % {Format}[Width][Precision]
[Length]Conversion
where:
Format = -|+|<a blank>|#|0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 603
sprintf()
The format defines justification and sign information (the latter only for numerical
arguments). A - left justifies the output, a + forces output of the sign, and a blank outputs
a blank if the number is positive and a - if it is negative. The following table describes the
effect of # depending on the conversion character.
Table 19-13. Effect of # in the Format Specification
Conversion Effect of #
e, E, f Always prints the value of the argument with decimal point,
even if there are no fractional digits.
g, G As above, but also appends zeroes to the fraction until the
specified width is reached.
o Prints a zero before the number to indicate an octal value.
x, X Prints 0x (if the conversion is x) or 0X (if it is X) before the
number to indicate a hexadecimal value.
Others Undefined
A 0 as format specifier adds leading zeroes to the number until the desired width is
reached, if the conversion character specifies a numerical argument.
If both " " (blank) and + are given, only + is active; if both 0 and - are specified, only - is
active. If there is a precision specification for integral conversions, 0 is ignored.
• Width = *|Number|0Number
Number defines the minimum field width into which the output is to be put. If the
argument is smaller, the space is filled as defined by the format characters.
0Number is the same as above, but uses zeroes instead of blanks.
If a * is given, the field width is taken from the next argument, which must be a
number. If that number is negative, the output is left-justified.
• Precision = [Number|*]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
604 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
If the precision specifier is *, the precision is taken from the next argument, which must
be an int. If that value is negative, the precision is ignored.
• Length = h|l|L
A length specifier tells sprintf() what type the argument has. The first two length
specifiers can be used in connection with all conversion characters for integral
numbers. h defines short; l defines long. Use specifier L in conjunction with the
conversion characters for floating point numbers to specify long double.
• Conversion = c|d|e|E|f|g|G|i|n|o|p|s|u|x|X|%
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 605
sqrt() and sqrtf()
Conversion characters for integral types are d, i, o, u, x, and X; for floating point types e, E,
f, g, and G.
Syntax
Description
sqrt() computes the square root of x.
Return
The square root of x. If x is negative, it returns 0 and sets errno to EDOM.
See also
pow() and powf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
606 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.95 srand()
Syntax
Description
srand() initializes the seed of the random number generator. The default seed
is 1.
Return
See also
rand()
19.96 sscanf()
Syntax
#include <stdio.h>
Description
sscanf() scans string s according to the given format, storing the values in the given
parameters. The format specifiers in the format tell sscanf() what to expect next. A format
specifier has the format:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 607
sscanf()
• FormatSpec = %[Flag][Width][Size]Conversion
where:
• Flag = *
Specifies the maximum number of characters to read when scanning the value.
Scanning also stops if white space or a character not matching the expected
syntax is reached.
• Size = h|l|L
Specifies the size of the argument to read. The following table describes the
meaning of the size argument.
Table 19-16. Relationship of the Size Parameter with Allowable Conversions and
Types
Size Allowable Conversions Parameter Type
h d, i, n short int * (instead
of int *)
h o, u, x, X unsigned short int
* (instead of unsigned
int *)
l d, i, n long int * (instead of
int *)
l o, u, x, X unsigned long int
* (instead of unsigned
int *)
l e, E, f, g, G double * (instead of
float *)
L e, E, f, g, G long double *
(instead of float *)
• Conversion = c|d|e|E|f|g|G|i|n|o|p|s|u|x|X|%|Range
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
608 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
These conversion characters tell sscanf() what to read and how to store it in a
parameter. Their meaning is shown in the following table.
Table 19-17. Actions Taken for
Conversions
Conversion Description
c Reads a string of exactly width characters
and stores it in the parameter. If no width is
given, reads one character. The argument
must be a char *. The string read is not
zero-terminated.
d Reads as a decimal number (syntax below)
and stores in the parameter. The parameter
must be a pointer to an integral type.
i Reads as d (above), but also reads octal
and hexadecimal numbers (syntax below).
e, E, f, g, or G Reads a floating-point number (syntax
below). The parameter must be a pointer to
a floating-point type.
n The argument must be a pointer to an int.
sscanf() writes the number of characters
read so far to that address. If n is used
together with length specifier h or l, the
argument must be a pointer to a shortint
or a longint.
o Reads an octal number (syntax below). The
parameter must be a pointer to an integral
type.
p Reads a pointer in the same format as
sprintf() prints it. The parameter must be a
void **.
s Reads a character string up to the next
white space character or at most width
characters. The string is zero-terminated.
The argument must be of type char *.
u Reads as d (above), but the parameter
must be a pointer to an unsigned integral
type.
x, X Reads as u (above), but reads a
hexadecimal number.
% Skips a % sign in the input. Give only as %%.
Range = [[^]List]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 609
sscanf()
You can also use a scan set to read a character string that either contains only the given
characters or contains only characters not in the set. A scan set always is bracketed by left
and right brackets. If the first character in the set is ^, the set is inverted (that is, only
characters not in the set are allowed). You can specify whole character ranges, (for
example, A-Z specifies all upper-case letters). To include a right bracket in the scan set, it
must be the first element in the list; a dash ( -) must be either the first or the last element.
To include a ^ in the list (instead of indicating an inverted list) ensure that the ^ is not the
first character after the left bracket.
Some examples are:
[A-Za-z] Allows all upper- and lower-case characters.
[^A-Z] Allows any character that is not an upper-case character.
[]abc] Allows ], a, b and c.
[^]abc] Allows any character except ], a, b and c.
[-abc] Allows -, a, b and c.
A white space in the format string skips all white space characters up to the next non-
white-space character. Any other character in the format must be exactly matched by the
input; otherwise sscanf() stops scanning.
The syntax for numbers as scanned by sscanf() is the following:
Number = FloatNumber|IntNumber
IntNumber = DecNumber|OctNumber|HexNumber
DecNumber = SignDigit{Digit}
OctNumber = Sign0{OctDigit}
Exponent = (e|E)DecNumber
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
610 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
OctDigit = 0|1|2|3|4|5|6|7
Digit = OctDigit|8|9
Return
EOF, if s is NULL; otherwise it returns the number of arguments filled in.
NOTE
If sscanf() finds an illegal input (that is, not matching the
required syntax), it simply stops scanning and returns
successfully.
19.97 strcat()
Syntax
Description
strcat()appends string q to the end of string p. Both strings and the resulting
concatenation are zero-terminated.
Return
p
See also
memcpy() and memmove()
strcpy()
strncat()
strncpy()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 611
strchr()
19.98 strchr()
Syntax
Description
strchr() looks for character ch in string p. If ch is \0, the function looks for the end of the
string.
Return
A pointer to the character, if found; if there is no such character in *p, NULL is returned.
See also
memchr()
strrchr()
strstr()
19.99 strcmp()
Syntax
Description
strcmp()compares the two strings, using the character ordering given by the ASCII
character set.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
612 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Return
A negative integer, if p is smaller than q; zero, if both strings are equal; or a positive
integer if p is greater than q.
NOTE
The return value of strcmp() can be used as a comparison
function in bsearch() and qsort().
See also
memcmp()
strcoll()
strncmp()
19.100 strcoll()
Syntax
Description
strcoll()compares the two strings interpreting them according to the current locale, using
the character ordering given by the ASCII character set.
Return
A negative integer, if p is smaller than q; zero, if both strings are equal; or a positive
integer if p is greater than q.
See also
memcmp()
strcpy()
strncmp()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 613
strcpy()
19.101 strcpy()
Syntax
Description
strcpy() copies string q into string p (including the terminating \0).
Return
p
See also
memcpy() and memmove()
strncpy()
19.102 strcspn()
Syntax
#include <string.h >
Description
strcspn() searches p for the first character that also appears in q.
Return
The length of the initial segment of p that contains only characters not in q.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
614 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
See also
strchr()
strpbrk()
strrchr()
strspn()
19.103 strerror()
Syntax
Description
strerror() returns an error message appropriate for error number errno.
Return
A pointer to the message string.
See also
perror()
19.104 strftime()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 615
strftime()
size_t max,
Description
strftime() converts time to a character string s. If the conversion results in a string longer
than max characters (including the terminating \0), strftime() leaves s unchanged and the
function returns unsuccessfully. The format string determines the conversion process.
This string contains text, which is copied one-to-one to s, and format specifiers. Format
specifiers always start with % sign and are replaced by the following:
Table 19-18. strftime() Output String Content and Format
Format Replaced With
%a Abbreviated name of the weekday of the current locale (for
example, Fri)
%A Full name of the weekday of the current locale (for example,
Friday)
%b Abbreviated name of the month of the current locale (for
example, Feb)
%B Full name of the month of the current locale (for example,
February)
%c Date and time in the form given by the current locale.
%d Day of the month in the range from 0 to 31.
%H Hour, in 24-hour-clock format.
%I Hour, in 12-hour-clock format.
%j Day of the year, in the range from 0 to 366.
%m Month, as a decimal number from 0 to 12.
%M Minutes
%p AM/PM specification of a 12-hour clock or equivalent of
current locale.
%S Seconds
%U Week number in the range from 0 to 53, with Sunday as the
first day of the first week.
%w Day of the week (Sunday = 0, Saturday = 6)
%W Week number in the range from 0 to 53, with Monday as the
first day of the first week
%x The date in format given by current locale
%X The time in format given by current locale
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
616 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Return
Returns zero if the resulting string has more than max characters; otherwise returns the
length of the created string.
See also
mktime()
setlocale()
time()
19.105 strlen()
Syntax
#include <string.h >
Description
strlen() returns the number of characters in string s.
Return
The length of the string.
See also
19.106 strncat()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 617
strncmp()
Syntax
Description
strncat()appends string q to string p. If q contains more than n characters, only the first n
characters of q are appended to p. The two strings and the result all are zero-terminated.
Return
p
See also
strcat()
19.107 strncmp()
Syntax
Description
strncmp() compares at most the first n characters of the two strings.
Return
A negative integer, if p is smaller than q; zero, if both strings are equal; or a positive
integer if p is greater than q.
See also
memcmp()
strcmp()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
618 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
19.108 strncpy()
Syntax
Description
strncpy()copies at most the first n characters of string q to string p, overwriting p's
previous contents. If q contains less than n characters, strncpy() appends a \0.
Return
p
See also
memcpy()
strcpy()
19.109 strpbrk()
Syntax
Description
strpbrk() searches for the first character in p that also appears in q.
Return
NULL, if there is no such character in p; a pointer to the character otherwise.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 619
strrchr()
See also
strchr()
strcspn()
strrchr()
strspn()
19.110 strrchr()
Syntax
Description
strpbrk() searches for the last occurrence of character ch in s.
Return
NULL, if there is no such character in p; a pointer to the character otherwise.
See also
strchr()
strcspn()
strpbrk()
strspn()
19.111 strspn()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
620 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
Description
strspn()returns the length of the initial part of p that contains only characters also
appearing in q.
Return
The position of the first character in p that is not in q.
See also
strchr()
strcspn()
strpbrk()
strrchr()
19.112 strstr()
Syntax
#include <string.h >
Description
strstr() looks for substring q appearing in string p.
Return
A pointer to the beginning of the first occurrence of string q in p, or NULL, if q does not
appear in p.
See also
strchr()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 621
strtod()
strcspn()
strpbrk()
strrchr()
strspn()
19.113 strtod()
Syntax
Description
strtod()converts string s into a floating point number, skipping over any white space at
the beginning of s. It stops scanning when it reaches a character not matching the
required syntax and returns a pointer to that character in *end. strtod() accepts the
following number format:
FloatNum = Sign{Digit}[.{Digit}][Exp]
Sign = [+|-]
Exp = (e|E)SignDigit{Digit}
Return
The floating point number read. If an underflow occurred, strtod() returns 0.0. If the
value causes an overflow, strtod() returns HUGE_VAL. In both cases, strtod() sets errno to
ERANGE.
See also
atof()
scanf()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
622 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
strtol()
strtoul()
19.114 strtok()
Syntax
Description
strtok() breaks the string p into tokens, separated by at least one character appearing in q.
The first time, call strtok() using the original string as the first parameter. Afterwards,
pass NULL as first parameter: strtok() continues from its previous stopping position.
strtok() saves the string p unless it is NULL.
NOTE
This function is not re-entrant because it uses a global variable
for saving string p. ANSI defines this function in this way.
Return
A pointer to the token found, or NULL, if no token was found.
See also
strchr()
strcspn()
strpbrk()
strrchr()
strspn()
strstr()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 623
strtol()
19.115 strtol()
Syntax
Description
strtol()converts string s into a longint of base base, skipping over any white space at the
beginning of s. It stops scanning when it reaches a character not matching the required
syntax (or a character too large for a given base) and returns a pointer to that character in
*end.
Int_Number =
Dec_Number|Oct_Number|Hex_Number|Other_Number
Dec_Number = SignDigit{Digit}
Oct_Number = Sign0{OctDigit}
Hex_Number = 0(x|X)Hex_Digit{Hex_Digit}
Other_Number = SignOther_Digit{Other_Digit}
Oct_Digit = 0|1|2|3|4|5|6|7
Digit = Oct_Digit|8|9
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
624 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
The base must be 0 or in the range from 2 to 36. If it is between 2 and 36, strtol()
converts a number in that base (digits larger than 9 are represented by upper or lower case
characters from A to Z). If base is zero, the function uses the prefix to find the base. If the
prefix is 0, strtol() assumes base 8 (octal). If it is 0x or 0X, strtol() assumes base 16
(hexadecimal). Any other prefixes make strtol() scan a decimal number.
Return
The number read. If no number is found, returns zero; if the value is smaller than LONG_MIN
or larger than LONG_MAX, returns LONG_MIN or LONG_MAX and sets errno to ERANGE.
See also
atoi()
atol()
scanf()
strtod()
strtoul()
19.116 strtoul()
Syntax
char **end,
int base);
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 625
strxfrm()
strtoul() converts string s into an unsigned long int of base base, ignoring any white space
at the beginning of s. It stops scanning when it reaches a character not matching the
required syntax (or a character too large for a given base) and returns a pointer to that
character in *end. strtoul() accepts the same number format as strtol() except that the
negative sign is not allowed, and neither are the possible values for base.
Return
The number read. If no number is found, returns zero; if the value is larger than ULONG_MAX,
returns ULONG_MAX and sets errno to ERANGE.
See also
atoi()
atol()
scanf()
strtod()
strtol()
19.117 strxfrm()
Syntax
Description
strxfrm() transforms string q according to the current locale, such that the comparison of
two strings converted with strxfrm() using strcmp() yields the same result as a comparison
using strcoll(). If the resulting string is longer than n characters, strxfrm() leaves p
unchanged.
Return
The length of the converted string.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
626 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
setlocale()
strcmp()
strcoll()
19.118 system()
Description
system() executes the command line cmd.
Return
Zero
See also
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 627
tanh() and tanhf()
Description
tan() computes the tangent of x. Give x in radians.
Return
tan(x). If x is an odd multiple of Pi/2, it returns infinity and sets errno to EDOM.
See also
acos() and acosf()
asin() and asinf()
atan() and atanf()
atan2() and atan2f()
cosh() and coshf()
sin() and sinf()
tan() and tanf()
Syntax
Description
tanh() computes the hyperbolic tangent of x.
Return
tanh(x)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
628 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
See also
atan() and atanf()
atan2() and atan2f()
cosh() and coshf()
sin() and sinf()
tan() and tanf()
19.121 time()
Description
time()gets the current calendar time. If timer is not NULL, the current calendar time is
assigned to timer.
Return
The current calendar time.
See also
clock()
mktime()
strftime()
19.122 tmpfile()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 629
tmpnam()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
FILE *tmpfile(void);
Description
creates a new temporary file using mode wb+. Temporary files are deleted
tmpfile()
automatically when closed or the application ends.
Return
A pointer to the file descriptor if the file is created; NULL otherwise.
See also
fopen()
tmpnam()
19.123 tmpnam()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
tmpnam() creates a new unique filename. If s is not NULL, tmpnam() assigns the new name to s.
Return
A unique filename
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
630 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
See also
tmpfile()
19.124 tolower()
Syntax
Description
tolower()converts any upper-case character in the range from A to Z into a lower-case
character from a to z.
Return
If ch is an upper-case character, returns the corresponding lower-case letter. Otherwise,
returns ch (unchanged).
See also
islower()
isupper()
toupper()
19.125 toupper()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 631
ungetc()
Description
toupper()converts any lower-case character in the range from a to z into an upper-case
character from A to Z.
Return
If ch is a lower-case character, returns the corresponding upper-case letter. Otherwise,
returns ch (unchanged).
See also
islower()
isupper()
tolower()
19.126 ungetc()
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
Description
ungetc()pushes the single character ch back onto the input stream f. The next read from f
reads that character.
Return
ch
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
632 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
fgets()
fopen()
getc()
getchar()
Syntax
Description
These macros can be used to get the parameters in an open parameter list. Calls to
va_arg() get a parameter of the given type. The following example demonstrates the use of
va_arg():
va_list args;
int i;
char *q;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 633
vfprintf(), vprintf(), and vsprintf()
va_start(args, s);
...
va_end (args);
This is a file I/O function, also hardware dependent. It is not implemented in this
Compiler.
Syntax
va_list args);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
634 Freescale Semiconductor, Inc.
Chapter 19 The Standard Functions
va_list args);
Description
These functions are the same as fprintf(), printf(), and sprintf(), except that they take a
va_list instead of an open parameter list as argument.
19.129 wctomb()
Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 635
wcstombs()
Description
wctomb()converts wchar to a multi-byte character, stores that character in s, and returns the
length of s in bytes.
Return
The length of s in bytes after the conversion.
See also
wcstombs()
19.130 wcstombs()
Description
wcstombs() converts the first n wide character codes in ws to multi-byte characters, stores
them in s, and returns the number of wide characters converted.
Return
The number of wide characters converted.
See also
wctomb()
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
636 Freescale Semiconductor, Inc.
Chapter 20
Appendices
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 637
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
638 Freescale Semiconductor, Inc.
Chapter 21
Porting Tips and FAQs
This appendix describes some FAQs and provides tips on EBNF syntax and porting the
application from a different tool vendor.
This chapter covers the following topics:
• Migration Hints
• Protecting Parameters in the OVERLAP Area
• Using Variables in EEPROM
• General Optimization Hints
• Executing Application from RAM
• Frequently Asked Questions (FAQs) and Troubleshooting
• Bug Reports
• EBNF Notation
• Abbreviations and Lexical Conventions
• Number Formats
• Precedence and Associativity of Operators for ANSI-C
• List of all Escape Sequences
This section describes the differences between this compiler and the compilers of other
vendors. It also provides information about porting sources and methods of adapting
them.
The topics covered are as follows:
• Porting from Cosmic
• Allocation of Bitfields
• Type Sizes and Sign of char
• @bool Qualifier
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 639
Migration Hints
If your current application is written for Cosmic compilers, there are some special things
to consider. The topics covered in this section are as follows:
• Getting Started
• Cosmic Compatibility Mode Switch
• Assembly Equates
• Inline Assembly Identifiers
• Pragma Sections
• Inline Assembly Constants
• Inline Assembly and Index Calculation
• Inline Assembly and Tabs
• Inline Assembly and Operators
• @interrupt
• Inline Assembly and Conditional Blocks
• Compiler Warnings
• Linker *.prm File (for the Cosmic compiler) and Linker *.prm File (for the HC(S)08
Compiler)
The best way is to create a new project, either using the New Bareboard Project wizard
( File > New Bareboard Project ) or with a stationery template. This sets up a project
for you, including all the default options and library files. Then add the existing files used
for Cosmic to the project (for example, through drag and drop from the Windows
Explorer, or right-clicking in the CodeWarrior Projects view and selecting Add Files ).
Ensure that the new project uses the same memory model and CPU type as the Cosmic
project.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
640 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
The latest compiler offers a Cosmic compatibility mode switch ( -Ccx: Cosmic
Compatibility Mode for Space Modifiers and Interrupt Handlers). When you enable this
compiler option, the compiler accepts most Cosmic constructs.
For the Cosmic compiler, you use equ to define equates for the inline assembly. To use an
equate or value in C as well, you use #define to define it. For this compiler, only #define is
needed for C and for inline assembly (refer the following listing). The equ directive is not
supported in normal C code.
Listing: EQU Directive Example
#ifdef __MWERKS__
#else
#endif
For the Cosmic compiler, you need to place an underscore ( _) in front of each identifier,
but for this compiler you can use the same name both for C and inline assembly. In
addition, to use the address of a variable, place a @ in front of variables for better type-
safety with this compiler. Use a conditional block like the one below in the following
listing, to compensate for the differences in compilers.
Listing: Using a Conditional Block
#ifdef __MWERKS__
ldx @myVariable,x
jsr MyFunction
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 641
Migration Hints
#else
ldx _myVariable,x
jsr _MyFunction
#endif
You can also use macros to cope with the compiler differences. The following listing
shows the preferred method.
Listing: Using a Macro
#ifdef __MWERKS__
#endif
ldx USCRA(myVariable),x
jsr USCR(MyFunction)
Cosmic uses the #pragma section syntax, while this compiler employs either #pragma
DATA_SEG or #pragma CONST_SEG.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
642 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
Use the segments (in the examples above CONSTVECT_SEG and APPLDATA_SEG) in the linker *.prm
file in the PLACEMENT block.
Cosmic uses an assembly constant syntax, whereas this compiler employs the normal C
constant syntax (refer the following listing).
Listing: Normal C Constant Syntax
#ifdef __MWERKS__
and 0xF8
#else
and #$F8
#endif
The Cosmic compiler uses the + operator to calculate offsets into arrays. For the
CodeWarrior compiler, use a colon (:) instead:
Listing: Using a Colon for Offset
ldx array:7
#else
ldx array+7
#endif
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 643
Migration Hints
The Cosmic compiler lets you use TAB characters in normal C strings (surrounded by
double quotes):
Because the compiler rejects hidden tab characters in C strings according to the ANSI-C
standard, you must remove the tab characters from such strings.
The Cosmic compiler and this compiler's inline assembly may not support the same
amount or level of operators. But in most cases it is simple to rewrite or transform them
(refer the following listing).
Listing: Compensating for Different Operators between Different Compilers
#ifdef __MWERKS__
ldx #(BOFFIE + WUPIE) ; enable Interrupts
#else
#endif
#ifdef __MWERKS__
lda #(_TxBuf2+Data0)
#else
#endif
21.1.1.10 @interrupt
The Cosmic compiler uses the @interrupt syntax, whereas this compiler employs the
interrupt syntax. To keep the source base portable, you can use a macro (for example, in a
main header file, which selects the correct syntax depending on the compiler used).
Listing: interrupt Syntax
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
644 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
#else
#endif
In most cases, the ( -Ccx: Cosmic Compatibility Mode for Space Modifiers and Interrupt
Handlers) handles the #asm blocks used in the Cosmic compiler's inline assembly code
Cosmic compatibility switch. However, if you use #asm with conditional blocks like
#ifdef or #if, then the C parser may not accept it (refer the following listing).
void myfun(void) {
#asm
nop
#if 1
#endasm
myfun();
#asm
#endif
nop
#endasm
In such cases, the #asm and #endasm must be ported to asm { and } block markers (refer the
following listing).
Listing: Using Conditional Blocks with asm Block Markers ({ and })
void myfun(void) {
asm { // asm #1
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 645
Migration Hints
nop
#if 1
} // end of asm #1
myfun();
asm { // asm #2
#endif
nop
} // end of asm #2
Check the warnings produced by the compiler carefully. The Cosmic compiler does not
warn about many cases where your application code may contain a bug. Later on you can
switch the warning messages off if they issues they highlight are unimportant (for
example, use the -W2: Do not Print INFORMATION or WARNING Messages option or use #pragma
MESSAGE: Message Setting in the source code).
21.1.1.13 Linker *.prm File (for the Cosmic compiler) and Linker *.prm
File (for the HC(S)08 Compiler)
The Cosmic compiler uses a *.prm file with a special syntax for the linker. This compiler
uses a linker parameter file with a *.prm file extension. The syntax is not the same format,
but most things are straightforward to port. For this compiler, you must declare the RAM
or ROM areas in the SEGMENTS ... END block and place the sections into the SEGMENTS in the
PLACEMENT...END block.
Make sure that you use all segments declared in your application (through #pragma
DATA_SEG, #pragma CONST_SEG, and #pragma CODE_SEG) in the PLACEMENT block of the Linker prm
file.
Check the linker warnings or errors carefully. They may indicate needed adjustments or
corrections in your application. For example, you may have allocated the vectors in the
linker *.prm file (using VECTOR or ADDRESS syntax) and also allocated them in the application
itself (with the #pragma CONST_SEG or with the @address syntax). Allocating objects twice is
an error, so allocate these objects one way or the other, but not both.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
646 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
Consult the map file produced by the linker to ensure that everything is allocated
correctly.
Remember that the linker is a smart linker. This means the linker does not link unused or
unreferenced objects to the application (the Cosmic linker may link unused or
unreferenced objects). The application may need to link to these objects for some reason
even though the linker does not. To link objects to the application even when unused, use
the ENTRIES ... END block in the Linker *.prm file:
ENTRIES /* the following objects or variables need to be linked even if not referenced by
the application */
END
Bitfield allocation depends on the compiler. Some compilers allocate the bits from right
(least significant byte) to left (most significant byte), and others allocate from left to
right. Also, some compilers implement alignment and byte or word crossing of bitfields
inconsistently. Solutions include:
• Check the different allocation strategies,
• Find out if an option exists to change the compiler allocation strategy, or
• Use the compiler defines to maintain source portability:
• __BITFIELD_LSBIT_FIRST__
• __BITFIELD_MSBIT_FIRST__
• __BITFIELD_LSBYTE_FIRST__
• __BITFIELD_MSBYTE_FIRST__
• __BITFIELD_LSWORD_FIRST__
• __BITFIELD_MSWORD_FIRST__
• __BITFIELD_TYPE_SIZE_REDUCTION__
• __BITFIELD_NO_TYPE_SIZE_REDUCTION__
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 647
Migration Hints
Carefully check the type sizes used by your compiler uses. Different compilers
implement the sizes for the standard types ( char, short, int, long, float, or double)
differently. For instance, the size for int is 16 bits for some compilers and 32 bits for
others.
If necessary, change the default type settings with the -T: Flexible Type Management
option.
Also, the sign of plain char is inconsistent across compilers. If the software program
requires that char be signed or unsigned, either change all plainchar types to the signed or
unsigned types or change the sign of char with the -T option.
Some compiler vendors provide the special keyword @bool to specify that a function
returns a boolean value:
Because this compiler does not support this special keyword, remove @bool or use a define
such as this:
Some compiler vendors provide special keywords to place variables in absolute locations.
In ANSI-C, you can express such absolute locations as constant pointers:
#ifdef __HIWARE__
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
648 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
#endif
The Compiler does not need the @tiny qualifier directly. The Compiler is smart enough
to take the right addressing mode depending on the address:
Some compilers accept the following non-ANSI compliant statement to declare an array
with an unknown size:
However, the compiler issues an error message for this because an object with size zero
(even if declared as extern) is illegal. Use the legal version:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 649
Migration Hints
Many compilers accept a function-call usage without a prototype. This compiler issues a
warning for this. However if the prototype of a function with open arguments is missing
or this function is called with a different number of arguments, this is clearly an error:
printf(
"hello world!"); // compiler assumes void
printf(char*);
printf(
"hello %s!", "world");
To avoid such programming bugs use the -Wpd: Error for Implicit Parameter Declaration
compiler option and always include or provide a prototype.
21.1.8 _asm("sequence")
Some compilers use _asm(< string> ) to write inline assembly code in normal C source
code: _asm(< nop> );
Rewrite this with asm or asm {}: asm nop;
Some compilers accept recursive comments without any warnings. This Compiler issues
a warning for each such recursive comment:
int a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
650 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
/* */
The Compiler treats the above source as one single comment, so the definition of a is
inside the comment. That is, the Compiler treats everything between the first opening
comment ( /*) until the closing comment token ( */) as a comment. Change any existing
recursive comments.
Mark interrupt functions with #pragma TRAP_PROC or use the interrupt keyword (refer
the following listing).
Listing: Using the TRAP_PROC Pragma with an Interrupt Function
#ifdef __HIWARE__
#pragma
TRAP_PROC
void MyTrapProc(void)
function */
#endif
This section discusses some important topics related to interrupt function handling:
• Defining an Interrupt Function
• Initializing the Vector Table
• Placing an Interrupt Function in a Special Section
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 651
Migration Hints
The TRAP_PROC pragma informs the compiler that the following function is an
interrupt function (refer the following listing). In that case, the compiler should terminate
the function by a special interrupt return sequence (for many processors, an RTI instead
of an RTS).
Listing: Example of Using the TRAP_PROC Pragma
#pragma TRAP_PROC
void INCcount(void) {
tcount++;
The interrupt keyword is non-standard ANSI-C and therefore is not supported by all
ANSI-C compiler vendors. In the same way, the syntax for the usage of this keyword
may change between different compilers. The keyword interrupt informs the compiler
that the following function is an interrupt function (refer the following listing).
Listing: Example of Using the Interrupt Keyword
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
652 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
Once you write the interrupt function code, you must associate this function with an
interrupt vector. Do this by initializing the vector table. You can initialize the vector table
in the following ways:
• Using the Linker Commands VECTOR ADDRESS or VECTOR in the PRM file
• Using the Interrupt Keyword
The Linker provides two commands to initialize the vector table: VECTOR ADDRESS or VECTOR.
Use the VECTOR ADDRESS command to write the address of a function at a specific address in
the vector table.
To enter the address of the INCcount() function at address 0x8A, insert the following
command in the application's PRM file.
Listing: Using the VECTOR ADDRESS Command
VECTOR ADDRESS 0x8A INCcount
Use the VECTOR command to associate a function with a specific vector, identified by
its number. The mapping from the vector number is specific to the target.
To associate the address of the INCcount() function with the vector number 42, insert the
following command in the application's PRM file.
Listing: Using the VECTOR Command
VECTOR 42 INCcount
When using the interrupt keyword, you may directly associate your interrupt function
with a vector number in the ANSI C-source code file. For that purpose, specify the vector
number next to the keyword interrupt.
To associate the address of the INCcount() function with the vector number 42, define the
function as in the following listing.
Listing: Definition of the INCcount() Interrupt Function
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 653
Migration Hints
interrupt 42 void INCcount(void) {
int card1;
tcount++;
For all targets supporting paging, allocate the interrupt function in an area that is
accessible all the time. You can do this by placing the interrupt function in a specific
segment, as listed below:
• Defining a Function in a Specific Segment
• Allocating a Segment in Specific Memory
To define a function in a specific segment, use the CODE_SEG pragma, as shown in the
following listing.
Listing: Defining a Function in a Specific Segment
#pragma TRAP_PROC
void INCcount(void) {
tcount++;
In the PRM file, you can specify where to allocate each segment defined in your source
code. To place a segment in a specific memory area, add the segment name in the
PLACEMENT block of your PRM file. Remember the linker is case-sensitive; ensure
that your segment name is exact, as shown in the following listing.
Listing: Allocating a Segment in Specific Memory
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
654 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
LINK test.abs
NAMES test.o ... END
SECTIONS
PLACEMENT
....
END
Instead of using memory on the stack, some targets may direct compilers to place
parameters and local variables into a global memory area called OVERLAP. For targets
without stack access, there is no other way to handle parameters and local variables.
The example below demonstrates the use of pragma NO_OVERLAP and NO_ENTRY to protect the
Tim_PresetTimer() function. Various code sequences, particularly interrupt service routines
(ISRs), call Tim_PresetTimer(). The parameters passed to Tim_PresetTimer() are placed in the
overlap area. The following example protects these parameters from overwriting.
#include <hidef.h>
#pragma NO_OVERLAP
#pragma NO_ENTRY
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 655
Protecting Parameters in the OVERLAP Area
DisableInterrupts;
asm {
STX tIndex
STA PresetValue
timer[tIndex] = PresetValue;
EnableInterrupts;
As an example the following code is given, but it looks similar for other targets:
1: #include <hidef.h>
2:
4:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
656 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
5: #pragma NO_OVERLAP
6: #pragma NO_ENTRY
PresetValue)
8: {
9: DisableInterrupts;
Function: Tim_PresetTimer
0000 9b SEI
10: asm {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 657
Using Variables in EEPROM
13: }
15: EnableInterrupts;
0010 9a CLI
16:
17: }
0011 81 RTS
The C language does not explicitly support writing variables to EEPROM, however, you
may occasionally need to perform such activities. The processor-specific examples in this
section can be easily adapted for other processors.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
658 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
Define your RAM or ROM areas in your linker parameter file (refer to the following
listing). However, to avoid initializing the memory range during normal startup, declare
the EEROM memory as NO_INIT.
Listing: Linker Parameter File
LINK test.abs
NAMES test.o startup.o ansi.lib END
SECTIONS
EEPROM =
NO_INIT 0xD00 TO 0xD01;
PLACEMENT
END
The example in the following erases or writes an EEPROM word. Consult the technical
documentation for your derivative or CPU to adapt the example for your processor.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 659
Using Variables in EEPROM
NOTE
Consult your technical documentation before initiating write
operations to the EEPROM. Limits on the number of writes
available vary depending on the device and manufacturer.
Listing: Erasing and Writing an EEPROM
/*
Definition of a variable in EEPROM
Running this application too frequently may surpass this limit and the
EEPROM may be unusable afterwards.
*/
#include <hidef.h>
#include <stdio.h>
#include <math.h>
/* INIT register. */
typedef struct {
union {
struct {
} INITEE_Bits;
} INITEE;
} INIT;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
660 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
/* EEPROG register. */
volatile struct {
} EEPROG @0x00F3;
/* EEPROT register. */
volatile struct {
} EEPROT @0x00F1;
void EraseEEPROM(void) {
EEPROG.BYTE = 1;
EEPROG.ERASE = 1;
EEPROG.EELAT = 1;
VAR = 0;
EEPROG.EEPGM =1;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 661
Using Variables in EEPROM
EEPROG.EEPGM = 0;
EEPROG.EELAT = 0;
EEPROG.ERASE = 0;
EraseEEPROM();
EEPROG.ERASE = 0;
EEPROG.EELAT = 1;
VAR = val;
EEPROG.EEPGM = 1;
EEPROG.EEPGM = 0;
EEPROG.EELAT = 0;
EEPROG.ERASE = 0;
void func1(void) {
unsigned int i;
i = 0;
do
i++;
WriteEEPROM(i);
while (1);
void main(void) {
EEPROT.BPROT4 = 0;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
662 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
EEON=1;
WriteEEPROM(0);
func1();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 663
Executing Application from RAM
For performance reasons, you can copy an application from ROM to RAM and execute it
from RAM. The following procedure outlines this process.
1. Link your application with code located in RAM.
2. Generate an S-Record File.
3. Modify the startup code to copy the application code.
4. Link the application with the S-Record File previously generated.
NOTE
It is recommended that you generate a ROM library for your
application. This allows you to debug your final application
easily (including the copying of the code).
The following sections describe each step:
• ROM Library Startup File
• Generate an S-Record File
• Modify the Startup Code
• Application PRM File
• Copying Code from ROM to RAM
A ROM Library requires a very simple startup file, containing only the definition from
the startup structure. Usually a ROM library startup file looks as follows:
#include "startup.h"
You must generate a PRM file to set code placement in RAM. Because the compiler
generates absolute code, the linker must know the final location of the code to generate
correct code for the function call.
In the PRM file, you must:
• Specify the name of the application entry points in the ENTRIES block
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
664 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
END
SECTIONS
PLACEMENT
END
ENTRIES
myMain
END
NOTE
You cannot use a main function in a ROM library. Use another
name for the application's entry point. In the example above, we
used myMain.
Use the Burner utility to generate the required S-Record file. The Burner utility generates
the file when you click Execute in the burner dialog.
NOTE
Initialize the field From with zero and the field Length with a
value greater than the last byte used for the code. If byte 0xFFFF
is used, then Length must be at least 10000.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 665
Executing Application from RAM
Modify the final application startup code to include code that copies the code from RAM
to ROM. You must explicitly call the application's entry point (the entry point is located
in the ROM library).
Use an offset to link the S-Record File (generated previously) to the application.
The application's PRM file places the application code at address 0x800 in ROM and
copies the code to address 0x7000 in RAM. The following listing shows the PRM file.
Listing: Linker Parameter File
LINK fiborom.abs
NAMES mystart.o fiboram.abs ansis.lib END
SECTIONS
PLACEMENT
END
STACKSIZE 0x100
NOTE
The Compiler adds the offset specified in the HEXFILE
command to each record in the S-Record File, and encodes the
code at address 0x700 to address 0x800.
If using CodeWarrior tools, then the CodeWarrior IDE passes all the names in the
NAMES...END directive directly to the linker. Ensure that the NAMES...END directive
is empty.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
666 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
You must implement a function that copies the code from ROM to RAM.
To place the application code at address 0x800 in ROM and copy it to address 0x7000 in
RAM, implement a copy function (refer to the following listing).
Listing: Definition of the CopyCode() Function
void CopyCode(void) {
The startup code must call the application's entry point, located in the ROM library. You
must explicitly call this function by name. Ideally, call the application's entry point just
before calling the application's main routine (refer the following listing).
Listing: Invoking the Application's Entry Point
void _Startup(void) {
... set up stack pointer ...
CopyCode();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 667
Frequently Asked Questions (FAQs) and Troubleshooting
The ROM library contains the main function. Define a dummy main function in the
startup module (refer the following listing).
Listing: Definition of a Dummy Main Function
#pragma NO_ENTRY
#pragma NO_EXIT
void main(void) {
asm NOP;
This section provides some tips to solve the most commonly encountered problems,
covered in the following topic:
• Making Applications
If the compiler or linker crashes, isolate the construct causing the crash and send a bug
report to Freescale support. Other common problems are:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
668 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
This means that WinEdit did not find the EDOUT file (that is, the compiler wrote it to a
place not expected by WinEdit). Some steps to take include:
• Ensure that the DEFAULTDIR: Default Current Directory environment variable is
not set and that the project directory is set correctly.
• In WinEdit 2.1, make sure that the OUTPUT entry in the file WINEDIT.INI is empty.
First, determine whether the code is really incorrect. Sometimes the operator-precedence
rules of ANSI-C do not give the results one would expect, and sometimes faulty code
appears correct. Consider the following example.
Listing: Possibly faulty code?
if (x & y != 0) ...
evaluates as:
C's integral promotion rules sometimes produce unexpected behavior. Characters are
usually (sign-)extended to integers. This sometimes has unexpected results (refer the
following listing).
Listing: If Condition is Always FALSE
unsigned char a, b;
b = -8;
a = ~b;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 669
Frequently Asked Questions (FAQs) and Troubleshooting
if (a == ~b) ...
The if condition in this example is always false, because extending a results in 0x0007,
while extending b gives 0x00F8 and the ~ results in 0xFF07. If the code contains a bug,
isolate the construct causing it and send a bug report to Freescale support.
21.6.1.4 The code seems to be correct, but the application does not
work.
Ensure that the hardware is set up correctly (for example, using chip selects). Some
memory expansions require a special access mode (for example, only word accesses). If
memory is accessible only in a certain way, use inline assembly or use the volatile
keyword.
Usually this is caused by compiling object files with different compiler versions, or
having different flag settings. Make sure that all object files are compiled with the latest
version of the compiler and with the same flags for memory models and floating point
formats. If not, recompile them.
21.6.1.6 The make Utility does not Make the entire Application.
Probably you did not specify the target on the command line. In this case, the make utility
assumes the target of the first rule is the top target. Either put the rule for your application
as the first in the make file, or specify the target on the command line.
This problem appears when you have short source files in your application. MS-DOS
only saves the time of last modification of a file with an accuracy of ±2 seconds. When
the compiler compiles two files in that time, both have the same time stamp. The make
utility makes the safe assumption that if one file depends on another file with the same
time stamp, the first file must be recompiled. There is no way to solve this problem.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
670 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
The compiler help file is a true Win32 help file. To open the compiler help file, use
Winhlp32.exe. The winhlp32.exe program resides either in the Windows directory (usually C:
\windows, C:\win95 or C:\winnt) or in its system ( Win32s) or system32 (Windows 2000,
Windows XP, or Windows Vista operating systems) subdirectory. The Win32s
distribution also contains Winhlp32.exe.
To change the association with Windows 95 or Windows NT either (1) use the explorer
menu View > Options and then the File Types tab or (2) select any help file and press
the Shift key. Hold it while opening the context menu by clicking on the right mouse
button. Select Open with from the menu. Enable the Always using this program
checkbox and use the Other option to select the winhlp32.exe file.
Use #pragma INTO_ROM: Put Next Variable Definition into ROM and the -Cc: Allocate
Const Objects into ROM compiler option.
In the default.env file, ensure that the source file path is set in the GENPATH: #include
"File" Path environment variable. In addition, use the -I: Include File Path compiler
option to specify the include file path.
Add + after the object in the NAMES list of the prm file.
When using CodeWarrior tools and the ELF/DWARF object-file format (see -F (-Fh, -F1,
-F1o, -F2, -F2o,-F6, or -F7): Object-File Format) compiler option, you can link
everything in the object within an ENTRIES...END directive in the linker prm file:
ENTRIES fibo.o:* END
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 671
Frequently Asked Questions (FAQs) and Troubleshooting
In the simulator or debugger, change the memory configuration mode (menu Simulator
> Configure ) to auto on access .
21.6.1.13 How can I load the same memory configuration every time
the simulator or debugger starts?
Save the memory configuration under default.mem. For example, select Simulator >
Configure > Save and enter default.mem.
bs &main t
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
672 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
INIT myStartup
21.6.1.17 How can I use a custom name for the main() function?
MAIN myMain
21.6.1.18 How can I set the reset vector to the beginning of the
startup code?
Open the compiler, select File > Configuration from the menu, and choose Editor
Settings .
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 673
Frequently Asked Questions (FAQs) and Troubleshooting
Change the Compiler options to those in the default.env file. Save them in the project.ini
file by clicking the Save button in the compiler.
The cable might be too long. The maximum length for unshielded cables is about 20 cm.
This error may also indicate too much electrical noise in the environment.
21.6.1.23 How can I write initialized data into the ROM area?
Use the const qualifier, and compile the source with the -Cc: Allocate Const Objects into
ROM option.
The cable might be too long. The maximum length for unshielded cables is about 20 cm.
This error may also indicate too much electrical noise in the environment.
Extract the source where the assertion appears and send it as a zipped file with all the
headers, options and versions of all tools.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
674 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
Click on the message and press F1 to start up the help file. You can also copy the message
number, open the PDF manual, and search on the message number.
Open the compiler and type -H: Short Help into the command line. A list of all options
appears with a short description of each. You can also look in the manual for detailed
information. A third way is to select the option and press F1 in the Options Settings
panel.
If you cannot solve your problem, you may need to contact our Technical Support
Department. Isolate the problem; if it is a compiler problem, write a short program
reproducing the problem. Then send or fax your bug report to your local distributor, who
will forward it to the Technical Support Department.
The report type informs us of the urgency level of the bug report. The classifications are:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 675
EBNF Notation
• Information
This describes things you would like to see improved in a future major release.
• Bug
This is an error which requires a workaround for you to continue work. Frequently
we are able to supply workaround solutions for bugs. (If you already have a
workaround, we'd like to know about it, too!) Bugs will be fixed in the next release.
• Critical Bug
A grave error that makes it impossible for you to continue with your work.
This chapter gives a short overview of the Extended Backus-Naur Form (EBNF)
notation, which is frequently used in this document to describe file formats and syntax
rules.
Listing: EBNF Syntax
ProcDecl = PROCEDURE
( ArgList ).
ArgList = Expression {, Expression}.
AddOp = +|-.
The EBNF notation is used to express the syntax of context-free languages. The EBNF
grammar consists of a rule set called productions of the form:
LeftHandSide = RightHandSide.
The left-hand side is a non-terminal symbol. The right-hand side describes the
composition.
EBNF consists of the following symbols. A brief discussion of each symbol follows.
• Terminal Symbols
• Non-Terminal Symbols
• Vertical Bar
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
676 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
• Brackets
• Parentheses
• Production End
• EBNF Syntax
• Extensions
Terminal symbols (or terminals) are the basic symbols which form the language
described. In the above example, PROCEDURE is a terminal.
The vertical bar "|" denotes an alternative, that is, either the left or the right side of the
bar can appear in the language described, but one of them must appear (for example, the
third production above means "an expression is a term followed by either a "*" or a "/"
followed by another term").
21.8.4 Brackets
Parts of an EBNF production enclosed by "[" and "]" are optional. They may appear
exactly once in the language, or they may be skipped. The minus sign in the last
production above is optional, both -7 and 7 are allowed.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 677
EBNF Notation
The repetition is another useful construct. Any part of a production enclosed by "{" and
"}" may appear any number of times in the language described (including zero, that is, it
may also be skipped). ArgList above is an example: an argument list is a single expression
or a list of any number of expressions separated by commas.
NOTE
The syntax in the example does not allow empty argument lists.
21.8.5 Parentheses
For better readability, normal parentheses may be used for grouping EBNF expressions,
as is done in the last production of the example. Note the difference between the first and
the second left bracket. The first one is part of the EBNF notation. The second one is a
terminal symbol and may appear in the language.
Factor = NonTerminal
| Terminal
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
678 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
NonTerminal = Identifier.
The identifier for a non-terminal can be any name you like. Terminal symbols are either
identifiers appearing in the language described or any character sequence that is quoted.
21.8.8 Extensions
In addition to this standard definition of EBNF, the following notational conventions are
used.
The counting repetition: Anything enclosed by { and } and followed by a superscripted
expression x must appear exactly x times. x may also be a non-terminal. In the following
example, exactly four stars are allowed:
Stars = {*}4.
The size in bytes: Any identifier immediately followed by a number n in square brackets
([ and ]) may be assumed to be a binary number with the most significant byte stored
first, having exactly n bytes. The following listing shows the example.
Listing: Example of 4-Byte Identifier FilePos
Struct = RefNo FilePos[4].
In some examples, text is enclosed by < and >. This text is a meta-literal, that is, whatever
the text says may be inserted in place of the text (confer <any char> in the above listing,
where any character can be inserted).
The following table lists some programming terms used in this manual.
Table 21-1. Common Terminology
Topic Description
ANSI American National Standards Institute
Compilation Unit Source file to be compiled, includes all included header files
Floating Type Numerical type with a fractional part, for example, float,
double, longdouble
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 679
Number Formats
Valid constant floating number suffixes are f and F for float and l or L for long double.
Note that floating constants without suffixes are double constants in ANSI. For
exponential numbers use e or E. Use - and + for signed representation of the floating
number or the exponent.
The following table lists the suffixes that are supported.
Table 21-2. Supported Number Suffixes
Constant Suffix Type
floating F float
floating L long double
integral U unsigned in t
integral uL unsigned long
Suffixes are not case-sensitive, for example, ul, Ul, uL and UL all denote an unsigned long
type. The following listing shows examples of these numerical formats.
Listing: Examples of Supported Number Suffixes
+3.15f /* float */
-0.125f /* float */
3.125f /* float */
0.787F /* float */
7.125 /* double */
3.E7 /* double */
8.E+7 /* double */
9.E-7 /* double */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
680 Freescale Semiconductor, Inc.
Chapter 21 Porting Tips and FAQs
The following table gives an overview of the precedence and associativity of operators.
Table 21-3. ANSI-C Precedence and Associativity of Operators
Operators Associativity
() [] -> . left to right
! ~ ++ -- + - * & (type) sizeof right to left
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
? : right to left
= += -= *= /= %= &= ^= |= <<= >>= right to left
, left to right
NOTE
Unary +, - and * have higher precedence than the binary forms.
ANSI-C syntax determines precedence and associativity (ANSI/ISO 9899-1990, p. 38
and Kernighan/ Ritchie, "The C Programming Language", Second Edition).
Listing: Examples of Operator Precedence and Associativity
if (a == b&&c) and
if ((a == b)&&c) are equivalent.
However,
if (a == b|c)
is the same as
if ((a == b)|c)
a = b + c * d;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 681
List of all Escape Sequences
In the above listing, the operator-precedence adds the product of (c*d) to b, and then
assigns that sum to a.
In the following listing, the associativity rule first evaluates c+=1, then assigns b to the
value of b plus (c+=1), and then assigns the result to a.
Listing: Three Assignments in One Statement
a = b += c += 1;
List of all Escape Sequences lists all escape sequences. Use these escape sequences inside
strings, if needed (for example, for printf).
Table 21-4. Escape Sequences
Description Escape Sequence
Line Feed \n
Tabulator sign \t
Vertical Tabulator \v
Backspace \b
Carriage Return \r
Line feed \f
Bell \a
Backslash \\
Question Mark \?
Quotation Mark \^
Double Quotation Mark \"
Octal Number \ooo
Hexadecimal Number \xhh
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
682 Freescale Semiconductor, Inc.
Chapter 22
Global Configuration File Entries
This appendix describes the possible entries in the mcutools.ini global configuration file,
and contains these sections:
• [Options] Section
• [XXX_Compiler] Section
• [Editor] Section
• Example
This section documents the following possible entries in the [Options] section of the file
mcutools.ini:
• DefaultDir
22.1.1 DefaultDir
Arguments
Default directory to be used.
Description
Specifies the current directory for all tools on a global level (see also environment
variable DEFAULTDIR: Default Current Directory).
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 683
[XXX_Compiler] Section
DefaultDir=C:\install\project
This section documents the following possible entries in an [XXX_Compiler] section of the
mcutools.ini file:
NOTE
XXX is a placeholder for the name of the actual backend. For
example, for the HC08 compiler, the name of this section is
[ HC08_Compiler].
• SaveOnExit
• SaveAppearance
• SaveEditor
• SaveOptions
• RecentProject0, RecentProject1
• TipFilePos
• ShowTipOfDay
• TipTimeStamp
22.2.1 SaveOnExit
Arguments
1/0
Description
Set to 1 to store the configuration when the compiler is closed. Clear to 0 if storing is
unnecessary. The compiler does not ask to store a configuration in either case.
22.2.2 SaveAppearance
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
684 Freescale Semiconductor, Inc.
Chapter 22 Global Configuration File Entries
1/0
Description
Set to 1 to store the visible topics when writing a project file. Clear to 0 otherwise. The
command line, its history, the window position, and other topics belong to this entry.
22.2.3 SaveEditor
Arguments
1/0
Description
Set to 1 to store the visible topics when writing a project file. Clear to 0 otherwise. The
editor setting contains all information of the Editor Configuration dialog.
22.2.4 SaveOptions
Arguments
1/0
Description
Set to 1 to save the options when writing a project file. Clear to 0 to exit without saving.
The option also contains the message settings.
Arguments
Names of the last and prior project files
Description
The Compiler updates this list when a project loads or saves. Its current content shows in
the file menu.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 685
[XXX_Compiler] Section
Example
SaveOnExit=1
SaveAppearance=1
SaveEditor=1
SaveOptions=1
RecentProject0=C:\myprj\project.ini
RecentProject1=C:\otherprj\project.ini
22.2.6 TipFilePos
Arguments
Any integer, for example, 236
Description
Actual position in tip of the day file. Used to show different tips at different calls.
Saved
Always saved when saving a configuration file.
22.2.7 ShowTipOfDay
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
686 Freescale Semiconductor, Inc.
Chapter 22 Global Configuration File Entries
0/1
Description
Used to enable showing the Tip of the Day dialog at startup. Set to 1 to enable the Tip of
the Day . Clear to 0 to open Tip of the Day through the Help menu only.
Saved
Always saved when saving a configuration file.
22.2.8 TipTimeStamp
Arguments
date and time
Description
Date and time when the tips were last used.
Saved
Always saved when saving a configuration file.
This section documents the following possible entries in the [Editor] section of the
mcutools.ini file:
• Editor_Name
• Editor_Exe
• Editor_Opts
• Example [Editor] Section
22.3.1 Editor_Name
Arguments
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 687
[Editor] Section
22.3.2 Editor_Exe
Arguments
The name of the executable file of the global editor
Description
Specifies the filename that is called (for showing a text file) when the global editor
setting is active. In the Editor Configuration dialog, the global editor selection is active
only when this entry is present and not empty.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
22.3.3 Editor_Opts
Arguments
The options for use with the global editor
Description
Specifies options used for the global editor. If this entry is not present or empty, %f is
used. The command line to launch the editor is built by taking the Editor_Exe content,
then appending a space followed by this entry.
Saved
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
688 Freescale Semiconductor, Inc.
Chapter 22 Global Configuration File Entries
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
[Editor]
editor_name=notepad
editor_exe=C:\windows\notepad.exe
editor_opts=%f
22.4 Example
Group=ANSI-C Compiler
[Editor]
editor_name=notepad
editor_exe=C:\windows\notepad.exe
editor_opts=%f
[Options]
DefaultDir=c:\myprj
[XXXX_Compiler]
SaveOnExit=1
SaveAppearance=1
SaveEditor=1
SaveOptions=1
RecentProject0=c:\myprj\project.ini
RecentProject1=c:\otherprj\project.ini
TipFilePos=0
ShowTipOfDay=1
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 689
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
690 Freescale Semiconductor, Inc.
Chapter 23
Local Configuration File Entries
This appendix describes the possible entries that can appear in the local configuration
file. Usually, you name this file project.ini, where project is a placeholder for the name
of your project. This appendix contains these sections:
• [Editor] Section
• [XXX_Compiler] Section
• Example
This section documents the possible entries in an [Editor] section of a project.ini file.
23.1.1 Editor_Name
Arguments
The name of the local editor
Description
Specifies the name displayed for the local editor. This entry has only a descriptive effect.
Its content is not used to start the editor.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog. This entry has the same format as the global Editor Configuration in the
mcutools.ini file.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 691
[Editor] Section
23.1.2 Editor_Exe
Arguments
The name of the executable file of the local editor
Description
Specifies the filename that is used for a text file when the local editor setting is active. In
the Editor Configuration dialog, the local editor selection is active only when this entry
is present and not empty.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog. This entry has the same format as the global Editor Configuration in the
mcutools.ini file.
23.1.3 Editor_Opts
Arguments
Local editor options
Description
Specifies local editor options. If this entry is absent or empty, %f is used. The command
line to launch the editor is built by taking the Editor_Exe content, then appending a space,
followed by this entry.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog. This entry has the same format as the global Editor Configuration in the
mcutools.ini file.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
692 Freescale Semiconductor, Inc.
Chapter 23 Local Configuration File Entries
[Editor]
editor_name=notepad
editor_exe=C:\windows\notepad.exe
editor_opts=%f
23.2.1 RecentCommandLineX
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 693
[XXX_Compiler] Section
NOTE
X is a placeholder for an integer.
Arguments
String with a command line history entry, for example, fibo.c
Description
This list of entries contains the content of the command line history.
Saved
Only with Appearance set in the File > Configuration > Save Configuration dialog.
23.2.2 CurrentCommandLine
Arguments
String with the command line, for example, fibo.c -w1
Description
The currently visible command line content.
Saved
Only with Appearance set in the File > Configuration > Save Configuration dialog.
23.2.3 StatusbarEnabled
Arguments
1/0
Special
This entry is considered only at startup. Later load operations do not use it.
Description
Use to enable or disable the status bar. Set to 1 to make the status bar visible. Clear to 0
to hide the status bar.
Saved
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
694 Freescale Semiconductor, Inc.
Chapter 23 Local Configuration File Entries
Only with Appearance set in the File > Configuration > Save Configuration dialog.
23.2.4 ToolbarEnabled
Arguments
1/0
Special
This entry is considered only at startup. Later load operations do not use it.
Description
Use to enable or disable the toolbar. Set to 1 to make the toolbar visible. Clear to 0 to
hide the toolbar.
Saved
Only with Appearance set in the File > Configuration > Save Configuration dialog.
23.2.5 WindowPos
Arguments
10 integers, for example, " 0,1,-1,-1,-1,-1,390,107,1103,643"
Special
This entry is considered only at startup. Later load operations do not use it.
Changes of this entry do not show the "*" in the title.
Description
This number contains the position and the state of the window (maximized) and other
flags.
Saved
Only with Appearance set in the File > Configuration > Save Configuration dialog.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 695
[XXX_Compiler] Section
23.2.6 WindowFont
Arguments
Description
Font attributes.
Saved
Only with Appearance set in the File > Configuration > Save Configuration dialog.
Example
WindowFont=-16,500,0,Courier
23.2.7 Options
Arguments
-W2
Description
The currently active option string. This entry also stores messages and is quite long.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
696 Freescale Semiconductor, Inc.
Chapter 23 Local Configuration File Entries
Saved
Only with Options set in the File > Configuration > Save Configuration dialog.
23.2.8 EditorType
Arguments
0/1/2/3
Description
This entry specifies which Editor Configuration is active.
• 0: Global Editor Configuration (in the file mcutools.ini)
• 1: Local Editor Configuration (the one in this file)
• 2: Command line Editor Configuration, entry EditorCommandLine
• 3: DDE Editor Configuration, entries beginning with EditorDDE
For details see Editor Settings Dialog Box.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
23.2.9 EditorCommandLine
Arguments
Command line for the editor.
Description
Command line content to open a file. For details see Editor Settings Dialog Box.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 697
[XXX_Compiler] Section
23.2.10 EditorDDEClientName
Arguments
Client command, for example, " [open(%f)]"
Description
Name of the client for DDE Editor Configuration. For details see Editor Started with
DDE.
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
23.2.11 EditorDDETopicName
Arguments
Topic name. For example, "system"
Description
Name of the topic for DDE Editor Configuration. For details, see Editor Started with
DDE
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
23.2.12 EditorDDEServiceName
Arguments
Service name. For example, "system"
Description
Name of the service for DDE Editor Configuration. For details, see Editor Started with
DDE.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
698 Freescale Semiconductor, Inc.
Chapter 23 Local Configuration File Entries
Saved
Only with Editor Configuration set in the File > Configuration > Save Configuration
dialog.
23.3 Example
The following listing shows a typical configuration file layout (usually project.ini).
Listing: Typical Local Configuration File Layout
[Editor]
Editor_Name=notepad
Editor_Exe=C:\windows\notepad.exe
Editor_Opts=%f
[XXX_Compiler]
StatusbarEnabled=1
ToolbarEnabled=1
WindowPos=0,1,-1,-1,-1,-1,390,107,1103,643
WindowFont=-16,500,0,Courier
Options=-w1
EditorType=3
RecentCommandLine0=fibo.c -w2
RecentCommandLine1=fibo.c
CurrentCommandLine=fibo.c -w2
EditorDDEClientName=[open(%f)]
EditorDDETopicName=system
EditorDDEServiceName=msdev
EditorCommandLine=C:\windows\notepad.exe %f
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 699
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
700 Freescale Semiconductor, Inc.
Chapter 24
Known C++ Issues in the HC(S)08 Compilers
This appendix describes the known issues when using C++ with the HC(S)08 compilers,
and contains these sections:
• Template Issues
• Operators
• Bigraph and Trigraph Support
• Known Class Issues
• Keyword Support
• Member Issues
• Constructor and Destructor Functions
• Overload Features
• Conversion Features
• Initialization Features
• Known Errors
• Other Features
---------^-------------------- ERROR
• Declaring a template in a class is unsupported. Example:
struct S {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 701
Operators
};
A<i>() {}
- void g00(void) {}
void g00(U) {}
24.2 Operators
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
702 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
- struct A { };
enum B{ };
- struct A{
A a;
(void)*a;
--------^----------------Compile ERROR
- struct A{};
int f() {
B b;
return (*b);
struct A {
void operator*() { }
void test();
};
void S::test(){
S s;
(void) (s * 3);
>
--------------^------------------Compile ERROR
• Explicit operator calls are unsupported. Example:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 703
Operators
struct B {
};
B b;
b.operator int();
The other operator-related limitations and issues as well as unsupported operator features
for the following operators are described here:
• Binary Operators
• Unary operators
• Equality Operators
struct S {
int m;
ERROR at template
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
704 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
if (~c != tilda(c))
class A{};
A a;
if ((!a) != (bang_(a)))
class X {
public:
} x;
(void) (0 || x);
-----------^------------ERROR
• Conditional operators are unsupported. Example:
int x = 1;
int a = 2;
int b = 3;
x?a:b = 1;
-------------^------------------ERROR
• Assignment operators are incorrectly implemented. Example:
(i = 2) = 3;
(i *= 2) = 3;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 705
Header Files
(i += 5) = 3;
struct X {
void f() {}
};
class X {
public:
int m;
};
(void) ( &X::m == 0 );
-----------^-------------ERROR
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
706 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
The compiler does not recognize the trigraph sequence ??! as equal to |.
In some cases the compiler fails to replace the %: sequence. Example:
#if (4 == 9)
#include <string.h>
%:endif
The following section describes known class issues and unimplemented or unsupported
features.
• Class Names
Usually, using elaborate type specifiers ensures the validity of both names when you
define a class and a function with the same name in the same scope. However, in the
HC(S)08 compilers this type of class name definition causes an error. Example:
class C { char c; };
void C(int x) { }
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 707
Known Class Issues
int x;
void main()
C(x);
------^----------------------- ERROR
}
• Local classes are unsupported on the HC(S)08 compilers. Example:
void f(void)
class C {
C() { }
};
}
• The class member access feature is unsupported. Example:
class X {
public:
enum E { a, b, c };
} x;
type(x.a);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
708 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
• Nested class declaration is unsupported, although some accesses and calls may
succeed when using nested classes.
• Nested class depths of ten or more are not supported. Example:
struct :: A a;
-------------------^----------------ERROR
• Function member definitions are not allowed within local class definitions. Example:
void f (){
class A{
int g();
};
}
• Defining a class within a function template is not allowed. Example:
struct A {
void f();
};
void A<T>::f(){
class B {
T x;
};
-------------^----------------ERROR
}
• Unsupported Scope rules for classes
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 709
Keyword Support
Declaring the name of a class does not ensure that the scope name extends through
the declarative regions of classes nested within the first class. Example:
struct X4 {
enum {i = 4};
struct Y4 {
int ar[i];
---------------^-------------------ERROR
}
• Unimplemented Storage class specifiers
Normally, C++ allows taking the address of an object declared register. Example:
register int a;
int* ab = &a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
710 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 711
Member Issues
int X::mem_func(){
return var; //returned value should be 1
}
• A non-static data member/member function name should refer to the object for
which it was called. However, in the HC(S)08 compiler, it does not. Example:
class X {
public:
int m;
X(int a) : m(a) {}
}
X obj = 2;
int a = obj.m; //should be 2 (but is not)
• Member Access Control
• Accessing a protected member of a base class using a friend function of the
derived class is unsupported. Example:
class A{
protected:
int i;
};
class B:public A{
friend int f(B* p){return p->i};
} ;
• Specifying a private nested type as the return type of a member function of the
same class or a derived class is unsupported. Example:
class A {
protected:
typedef int nested_type;
nested_type func_A(void);
};
Class B: public A{
nested_type func_B(void);
};
A::nested_type A::func_A(void) { return m; }
B:: nested_type B::func_B(void) { return m; }
^------------------------------------ERROR: Not allowed
• Accessing a protected member is unsupported. Example:
class B {
protected:
int i;
};
class C : private B {
friend void f(void);
};
void f(void) { (void) &C::i;}
-------------------------^------ERROR: Member cannot be accessed
• Access declaration
Base class member access modification is unimplemented in the following case:
class A{
public:
int z;
};
class B: public A{
public:
A::z;
---------^------------ERROR
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
712 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
void f(void) {
C c1;
C c2 = c1;
}
• Using a non-explicit constructor for an implicit conversion (conversion by
constructor) is unsupported. Example:
class A{
public:
int m;
S(int x):m(x){};
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 713
Constructor and Destructor Functions
class A{
int m;
A(int) {vf()}
class B: public A{
void vf(){}
B(int i) : A(i) {}
class A{
int m;
void gf(){vf();}
A(int) {gf();}
class B: public A{
void vf(){}
B(int i) : A(i) {}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
714 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
class A{
int m;
A(int):m(vf()){}
class B: public A{
B(int i) : A(i) {}
----------------^--------------------ERROR:function redefinition
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 715
Overload Features
int func(char)
return F_char;
struct A {} a;
return pfc(0);
if (a + func != F_char){}
struct X {
void f (void) {}
void f (int) {}
} x;
mfvp f03() {
return &X::f;
}
• Usually, when an overloaded name is a function template and template argument
deduction succeeds, the resulting template argument list is used to generate an
overload resolution candidate that should be a function template specialization. This
feature is unsupported at this time. Example:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
716 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
int (*p00)(char) = f;
struct S {
int m;
ERROR at template
};
class A{
public:
int m;
S(int x):m(x){};
};
struct T{
int m;
T() { m = 0; }
} t;
struct S {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 717
Conversion Features
} s00;
T t00 = s00;
float f = 2.3f;
short s = 5;
value = f0(s);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
718 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
char k = 'a';
char * kp = &k;
struct S0 {
S0(...) { flag = 0; }
S0(void *) { flag = 1; }
};
The following implicit conversion sequence rankings situations are unsupported at this
time.
• When s1 and s2 are distinct standard conversion sequences and s1 is a sub-sequence
of s2, overload resolution prefers s1 to s2. Example:
value = f0('a');
---------------^----------------ERROR:Ambiguous
• When s1 and s2 are distinct standard conversion sequences of the same rank, neither
of which is a sub-sequence of the other, and when s1 converts c* to b* (where b is a
base of class c), while s2 converts c* to a* (where a is a base of class b), then overload
resolution prefers s1 to s2. Example:
struct a
struct b : public a
struct c : public b
c* cp;
value = f0(cp);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 719
Conversion Features
--------------^----------------ERROR:Ambiguous
• When s1 and s2 are distinct standard conversion sequences neither of which is a sub-
sequence of the other, and when s1 has Promotion rank, and s2 has Conversion rank,
then overload resolution prefers s1 to s2. Example:
short aa = 1;
int i = f(aa)
----------^------------------- ERROR:Ambiguous
The following syntax use is not allowed when using explicit type conversions on an
HC(S)08 compiler:
The following explicit type conversion features are unsupported at this time:
• Casting reference to a volatile type object into a reference to a non-volatile type
object. Example:
volatile int x = 1;
volatile int& y= x;
if((int&)y != 1);
-------^-------------------------ERROR
• Converting an object or a value to a class object even when an appropriate
constructor or conversion operator has been declared. Example:
class X {
public:
int i;
X(int a) { i = a; }
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
720 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
};
X x = 1;
x = 2;
class B : private A {
public:
int y;
};
int main(){
B b;
A *ap = (A *) &b;
class A{
public:
A(){}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 721
Initialization Features
};
class B{
public:
A x[3];
B(){};
};
struct B {
int im;
B(int i=0) { im = i; }
};
struct C : public B {
C(int i) : B2(i) {} ;
---------------------^------------------ERROR
};
• Specifying explicit initializers for arrays is not supported. Example:
typedef M MA[3];
struct S {
MA a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
722 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
S(int i) : a() {}
};
• Initialization of local static class objects with constructor is unimplemented.
Example:
struct S {
int a;
};
static S s(10);
---------^-------------ERROR
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 723
Known Errors
• Local scope of switch statement is unsupported for the default branch. Example:
switch (a){
default :
int x = 1;
}
• An if condition with initialized declaration is unsupported. Example:
if(int i = 0)
------^-----------------ERROR
The following internal errors occur when using C++ with the HC(S)08 compiler:
• Internal Error #103. Example:
long double i;
if (f(i)!=i)
--------^-----------------Internal Error
• Internal Error #385, generated by the following example:
class C{
public:
int n;
}cy;
switch(cy) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
724 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
--------^-------------ERROR
case 1:
break;
default:
break;
}
• Internal Error #418, generated by the following example:
#include <time.h>
struct std::tm T;
• Internal Error #604, generated by the following example:
class C {
public:
int a;
};
if (pf != 0 );
struct Index {
int s;
~Index(void){ ++x; }
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 725
Other Features
for (int i = 0; i < 10; i++)
// ...
• Name Features
• Namespaces are currently unsupported. Example:
namespace A {
----------^------------------- ERROR
int f(int x);
}
• The name lookup feature is currently unsupported. Name lookup is defined as
looking up a class as if the name is used in a member function of X when the
name is used in the definition of a static data member of the class. Example:
class C {
public:
static int i;
static struct S {
int i; char c;
} s;
};
int C::i = s.i;
• Hiding a class name or enumeration name using the name of an object, function,
or enumerator declared in the same scope is unsupported. Example:
enum {one=1, two, hidden_name };
struct hidden_name{int x;};
-----------^----------------Not allowed
• Global initializers with non-const variables are unsupported. Example:
int x;
int y = x;
• Anonymous unions are unsupported. Example:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
726 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
void f()
{
union { int x; double y; };
x = 1;
y = 1.0;
}
• The following time functions (<ctime>) are unsupported:
• time()
• localtime()
• strftime()
• ctime()
• gmtime()
• mktime()
• clock()
• asctime()
• The fundamental type feature is not supported:
int myfun (char x){}
int myfun (unsigned char x){}
--------------^--------------------------Illegal function redefinition
• Enumeration declaration features
• Defining an enum in a local scope of the same name is unsupported. Example:
enum e { gwiz }; // global enum e
void f()
{
enum e { lwiz };
---------------^---------------- ERROR: Illegal enum redeclaration
}
• The identifiers in an enumerator-list declared as constants, and appearing
wherever constants are required, is unsupported. Example:
int myfun(short l) { return 0; }
int myfun(const int l) { return 1; }
enum E { x, y };
myfun(x); /*should be 1*/
• Unsupported union features:
• An unnamed union for which an object is declared having member functions
• Allocation of bit-fields within a class object. Example:
enum {two = 2};
struct D { unsigned char : two; };
• The following multiple base definition features are unimplemented as yet:
• More than one indirect base class for a derived class. Example:
Class B:public A(){};
Class C: public B(){};
Class D :public B, public A,publicC{};
• Multiple virtual base classes. Example:
class A{};
class B: public virtual A{};
class C: public virtual A{};
class D: public B, public C{}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 727
Other Features
• Generally, a friend function defined in a class is in the scope of the class in which it
is defined. However, this feature is unsupported at this time. Example:
class A{
public:
static int b;
int f(){return b;};
};
int A::b = 1;
int x = f(); /*ERROR : x!=1 (it should be 1)*/
• The compiler considers the following types ambiguous (the same):
• char
• unsigned char
• signed char
• The Call to Named Function feature is unsupported. Example:
class A{
static int f(){return 0;}
friend void call_f(){
f();
------^-----ERROR: missing prototype (it should be accepted by
the compiler)
}
}
• Preprocessing directives are unsupported. Example:
#define MACRO (X) 1+ X
MACRO(1) + 1;
-------------^-------------------Illegal cast-operation
• The following line control feature is unsupported.
• Including a character-sequence in a line directive makes the implementation
behave as if the content of the character string literal is equal to the name of the
source file. Example:
#line 19 "testfile.C" //line directive should alter __FILE__
• The following floating point characteristics errors occur:
• Float exponent is inconsistent with minimum
power(FLT_RADIX, FLT_MIN_EXP -1) != FLT_MIN
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
728 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 729
Other Features
return ((void) 1);
----------------------------^------------ERROR
• Permitting a function to appear in an integral constant if it appears in a sizeof
expression is unsupported. Example:
void f() {}
int i[sizeof &f];
--------------------^-------------ERROR
• Defining a local scope using a compound statement is an unimplemented feature.
Example:
int i = 4;
int main(){
if ((i != 1) || (::i != 4));
------------------------^----------ERROR
}
• The following Main function is currently unimplemented:
argv[argc]!=0 (it should be guaranteed that argv[argc]==0.)
• The following Object lifetime feature is currently unimplemented:
• When the lifetime of an object ends and a new object is created at the same
location before it is released, a pointer that pointed to the original object can be
used to manipulate the new object.
• The following function call features are unsupported:
• References to functions feature is not supported. Example:
int main(){
int f(void);
int (&fr)(void) = f;/
}
• Return pointer type of a function make ambiguous between void * and X *.
Example:
class X {
public:
X *f() { return this; }
};
int type(void *x) {return VOIDP;}
int type(X *x) {return CXP;}
X x;
type(x.f())
-----^--------ERROR: ambiguous
• Incorrect implementation of a member function call when the call is a
conditional expression followed by argument list. Example:
struct S {
S(){}
int f() { return 0; }
int g() { return 11; }
int h() {
return (this->*((0?(&S::f) : (&S::g))))();
------------------------------^-------------ERROR
}
};
• The following Enumeration feature is unsupported:
• For enumerators and objects of enumeration type, if an int can represent all the
values of the underlying type, the value is converted to an int; otherwise if an
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
730 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
unsigned int can represent all the values, the value is converted to an unsigned int;
otherwise if a long can represent all the values, the value is converted to a long;
otherwise it is converted to unsigned long. Example:
enum E { i=INT_MAX, ui=UINT_MAX , l=LONG_MAX, ul=ULONG_MAX };
-------------------------^--------------ERROR: Integral type expected or enum value
out of range
• Delete operations have the following restrictions:
• Use the S::operator delete only for single cell deletion and not array deletion. For
array deletion, use the global ::delete(). Example:
struct S{
S() {}
~S () {destruct_counter++;}
void * operator new (size_t size) {
return new char[size];
}
void operator delete (void * p) {
delete_counter ++;
::delete p;}
};
S * ps = new S[3];
delete [] ps;
-------------^--------ERROR: Used delete operator (should use global ::delete)
• Global ::delete uses the class destructor once for each cell of an array of class
objects. Example:
S * ps1 = new S[5];
::delete [] ps1;
------------^------ERROR: ~S is not used
• Error at declaring delete operator. Example:
void operator delete[](void *p){};
-----------------------^--------------ERROR
• The New operator is unimplemented. Example:
- void * operator new[](size_t);
-------------------^--------ERROR: Operator must be a function
• The following Expression fails to initialize the object. Example:
int *p = new int(1+(2*4)-3);
-----------------^-----ERROR: The object is not initialized
• Use placement syntax for new int objects. Example:
int * p1, *p2;
p1 = new int;
p2 = new (p1) int;
--------------^----------------ERROR: Too many arguments
• The following Multi-dimensional array syntax is not supported:
int tab[2][3];
int myfun(int (*tab)[3]);
-------------------^---------------------ERROR
• The following goto or switch syntax is unsupported:
label:
int x = 0;
--------------^---------------ERROR: x not declared (or typename)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 731
Other Features
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
732 Freescale Semiconductor, Inc.
Chapter 24 Known C++ Issues in the HC(S)08 Compilers
};
S x(int(a));
--------^----------ERROR: Should have been a function declaration, not an object
declaration
• Using const as a qualified reference is an unsupported feature. Example:
int i;
typedef int& c;
const c cref = i;// reference to int
--------------------^------------------ERROR
• No warning on invalid jump past a declaration with explicit or implicit initializer.
Example:
switch(val)
{
case 0:
int a = 10; // invalid, warning should be reported
break;
case 1:
int b; // valid
b = 11;
break;
case 2:
break;
}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 733
Other Features
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
734 Freescale Semiconductor, Inc.
Chapter 25
Banked Memory Support
This appendix describes the architecture of the Banked memory support and introduces
you to the Paged memory and Linear address space in the HCS08 family.
The topics covered here are as follows:
• Introduction
• Paged Memory and Non-Paged Memory
• Linear Memory Space
25.1 Introduction
Having an address bus of 16-bits wide, the typical HCS08 Core architecture limits the
available CPU addressable space to 64K bytes. However, some special HCS08 MCUs,
like the MC9S08QE128 which contains a MMU (Memory Management Unit), extends
the processor's ability of addressing up to 4M memory space.
On these derivatives, memory can be accesses using the paging mechanism, using the
linear memory access mechanism or directly, if the address is below 64K.
To avoid common pitfalls and to detect where there may be room for code optimizations,
you need to have a complete understanding of your application. Thus, it is essential to
know how to correctly access a given memory location and how CodeWarrior distributes
your code between these three memory categories.
The following sections in this chapter introduce the notions of these three kinds of
memory and highlight their differences.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 735
Paged Memory and Non-Paged Memory
As mentioned above, the typical HCS08 Core architecture can only access 2^16 = 65536
bytes, or 64 Kilobytes memory space. Thus, a paging mechanism was introduced to
enable HCS08 CPU access more memory space. The terms "paged" and "non-paged" are
derived from the paging mechanism. "Banked" and "non-banked" are synonym terms to
paged and non-paged, respectively. They are often used interchangeably in Freescale's
literature.
To better understand paging mechanism, we need to consider the following:
• Notion of Local Map
• Notion of Page Window
• Notion of Memory Page
• Page-switching Mechanism
• Compiler Support
• Example
The term "CPU local map" refers to the 64K space that the CPU can directly - or
naturally access through its instruction set with a 16-bit address.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
736 Freescale Semiconductor, Inc.
Chapter 25 Banked Memory Support
We can see in the above figure that the registers and the other memory resources have
dedicated address ranges. The above figure illustrates the local map for an MC9S08DZ60
part.
In the case of the HCS08 family, local memory maps may change from device to device,
however, they do share a common characteristic. The common characteristic is that
RAM, EEPROM and Register space boundaries may change from device to device but
are always by default located in the first 16K region of the local map (from addresses
0x0000 to 0x3FFF) . The upper 48K region is devoted to hosting Flash memory (From
address 0x4000 to 0xFFFF).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 737
Paged Memory and Non-Paged Memory
When paging mechanism is applied to extend the memory space, the 48K region is
divided into three 16K regions. The middle region 16K region (from 0x8000 to 0xBFFF)
is called the Flash page window, plays a very special role in paging mechanism.
Most of the local addresses in the CPU local map always "point" to well-defined fixed
physical locations. Certain local addresses, however, will not always point to the same
physical locations. These special address ranges are called "page windows". Local
addresses inside a page-window range are addresses whose mere 16-bits are not enough
information for the MMU to determine a well-defined physical location.
For a local address inside a page window range, the MMU requires additional
information, stored inside a register, to be able to translate the given local address into a
well-defined physical location. Such a register is called a Page-register.
A memory "page" is simply a continuous section of physical memory that has a fixed
size. In the case of HCS08 family, only the flash resource is paged. For instance, for
MC9S08QE128 the page size is 16K. The size of a flash page is 16K. Note that the size
of a memory page is the same as the size of that memory resource's page window in the
local map.
The division of physical memory into pages is just a conceptual division. Pages do not
correspond to real physical divisions of memory. Once conceptual division is done, a
number is assigned to each page.
In order to view a particular physical page in the local map's page window, the
programmer needs to write the page number into the page register.
Once the appropriate page of physical memory has been "displayed" inside the page
window, the CPU can access this data with a 16 bit address corresponding to a location
inside the page window.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
738 Freescale Semiconductor, Inc.
Chapter 25 Banked Memory Support
It is important to understand that, when a memory resource is paged, the totality of this
resource can be accessed through the page window. However, writing to the page register
every time a memory location has to be accessed introduces a certain amount of
overhead. This is why, certain locations are also mapped directly into the local map.
These locations that are always mapped onto the CPU local map regardless of any page-
register value are called non-banked, or non-paged locations. For these locations, most of
the time the paged access is not used and the direct access is always preferred. The
totality of a paged-memory resource is conceptually divided into numbered pages, non
banked locations from the resource and have a certain page number associated.
The fiugre below shows the page numbers that are associated with the non-banked
locations in the local map and page numbers that associated with the extended locations.
For local map locations, it can be accessed by two ways.
For example, address 0x038000 is equivalent to address 0xC000.
The following figure shows the paging mechanism of device MC9S08QE128.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 739
Paged Memory and Non-Paged Memory
CodeWarrior's C compiler takes care of automatically inserting instructions that write the
appropriate value to the page register.
How this is accomplished differs for code and data. Functions placed in the extended
memory are usually defined using the __far keyword (in the banked memory model all
the functions are by default __far); data placed in the extended memory can be accessed
using linear addressing (via __linear pointers for instance).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
740 Freescale Semiconductor, Inc.
Chapter 25 Banked Memory Support
To ensure that this happens, the programmer needs to select the memory model that is
most appropriate for the application, and use special qualifiers like __near or __far
keywords, or #pragma statements to locally modify compiler behavior where needed.
The __far keyword when associated to a function (for example. void __far f()) instructs
the compiler to consider that function as placed in the extended memory.
The __near keyword when associated to a function (for example. void__near f()) instructs
the compiler to consider that function as placed inthe non-banded memory.
Near functions can also be placed in the banked memory, but only when they are called
by other functions placed in the same page.
Table 25-1. Memory Models and __near and __far Keywords
Tiny Memory Model Small Memory Model Banked Memory Model
Functions are inherently __near if not Functions are inherently __near if not Functions are inherently __far if not
specified otherwise specified otherwise specified otherwise
Functions in extended memory need to Functions in extended memory need to Functions that do not reside in the
be marked with __far (or #pragma be marked with __far (or #pragma extended memory (or those that can use
CODE_SEG __FAR_SEG) CODE_SEG __FAR_SEG) the "classical" calling convention) need
to be marked with __near (or #pragma
CODE_SEG __NEAR_SEG)
25.2.6 Example
//PRM file
SEGMENTS
...
PPAGE_5 = READ_ONLY 0x058000 TO 0x05BFFF;
...
END
PLACEMENT
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 741
Linear Memory Space
P2 INTO PPAGE_5;
...
END
Some HCS08 derivatives (with an MMU) provide a special mechanism to access data.
This mechanism makes use of addresses that run in a linear fashion, that is, memory is
treated as one contiguous memory space.
This section covers the following topics:
• Notion of Linear Memory Space
• Compiler Support
• Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
742 Freescale Semiconductor, Inc.
Chapter 25 Banked Memory Support
25.3.3 Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 743
Linear Memory Space
A simple example illustrates placing data in the extended memory, reading a data from
the extended memory and storing the data address to a linear pointer.
Listing: Placing Data in the Linear Memory
...
#include <mmu_lda.h>
int y;
void f() {
/* y = x; */
__LOAD_LAP_ADDRESS(x);
__LOAD_WORD_INC(y);
//PRM file
SEGMENTS
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
744 Freescale Semiconductor, Inc.
Chapter 25 Banked Memory Support
...
...
END
PLACEMENT
...
DEFAULT_ROM, PAGED_ROM
INTO PPAGE_0,PPAGE_2,PPAGE_4,/*PPAGE_5,*/
PPAGE_6,PPAGE_7,ROM1;
...
...
END
NOTE
When use linear address, a single quote ' (in C '\'') character and
a F ('F') character should be added to the end of address to let
the linker know it is a linear reference.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 745
Linear Memory Space
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
746 Freescale Semiconductor, Inc.
Chapter 26
Compiler Messages
[FATAL]
Description
The application tried to emit a message which was not defined. This is a internal error
which should not occur. Please report any occurrences to your support.
Tips
Try to find out the and avoid the reason for the unknown message.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 747
Compiler Messages
Description
The application did show the number of messages of the specific kind as controlled with
the options -WmsgNi, -WmsgNw and -WmsgNe. Further options of this kind are not
displayed.
Tips
Use the options -WmsgNi, -WmsgNw and -WmsgNe to change the number of messages.
[FATAL]
Description
The Application was not able to find a file needed for processing.
Tips
Check if the file really exits. Check if you are using a file name containing spaces (in this
case you have to quote it).
[FATAL]
Description
In case there is an error while processing the command line, this message is issued.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
748 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
-WmsgSD123456789
Tips
There are various reasons why the tool would not recognize a certain message:
• make sure you are using the option with the right tool, say you don't disable linker
messages in the compiler preferences
• The message may have existed for an previous version of the tool but was removed
for example because a limitation does no longer exist.
• The message was added in a more recent version and the used old version did not
support it yet.
• The message did never exist. Maybe a typo?
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 749
Compiler Messages
Check the manual for all the current option. Check the release notes about the
background of this change.
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
750 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
LIBPATH=c:\Codewarrior\lib\
OBJPATH=c:\Codewarrior\work
...
Is taken identical as
...
LIBPATH=c:\Codewarrior\libOBJPATH=c:\Codewarrior\work
...
Tips
To fix it, append a '.' behind the '\'
...
LIBPATH=c:\Codewarrior\lib\.
OBJPATH=c:\Codewarrior\work
...
Note Because this information occurs during the initialization phase of the application,
the message prefix might not occur in the error message. So it might occur as "64: Line
Continuation occurred in <FileName>".
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 751
Compiler Messages
...
LIBPATH=${LIBPATH}
...
Tips
Check the definition of the environment variable.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
752 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A function prototype declaration had formal parameter names, but no types were
provided for the parameters.
Example
int f(i);
Tips
Declare the types for the parameters.
Tips
Constant variables need only one const qualifier.
See also
• Qualifiers
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 753
Compiler Messages
Tips
Volatile variables need only one volatile qualifier.
[ERROR]
Description
The combination of qualifiers used in this declaration is illegal.
Example
Tips
Remove the illegal qualifiers.
[ERROR]
Description
A declaration contains more than one storage class.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
754 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Declare only one storage class per item.
[ERROR]
Description
A declaration contains an illegal storage class.
Example
Tips
Apply a correct combination of storage classes.
Seealso
• Storage Classes
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 755
Compiler Messages
[ERROR]
Description
The type declaration is wrong.
Example
int float i;
Tips
Do not use an illegal type chain.
[ERROR]
Description
A variable or a structure field has to be either one of the standard types (char, int, short,
float, ...) or a type declared with a typedef directive.
Example
struct A {
} A;
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
756 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
Classes, structures and unions may be declared only once. Function redeclarations must
have the same parameters and return values as the original declaration. In C++, data
objects cannot be redeclared (except with the extern specifier).
Example
struct A {
int i;
};
struct A { // error
int i;
};
Tips
Avoid redeclaration, e.g. guarding include files with ifndef.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 757
Compiler Messages
Description
An enumeration has been declared twice.
Example
enum A {
};
enum A { //error
};
Tips
Enums have to be declared only once.
[ERROR]
Description
Non-standard error!
Example
void main() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
758 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
struct A {
void f() {}
};
Tips
The function definitions must always be in the global scope.
void main(void) {
struct A {
void f();
};
void A::f(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 759
Compiler Messages
foo(a, b)
int a, long b;
...
Tips
Remove such old style declarations from your application:
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
760 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A non-integral value was assigned to a member of an enum or the enumeration value
does not fit into the size specified for the enum (in ANSI-C the enumeration type is int).
Example
enum E {
F="Hello"
};
Tips
Enum-members may only get int-values.
[ERROR]
Description
The given class or structure was declared as a member of itself. Recursive definition of
classes and structures are not allowed.
Example
struct A {
A a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 761
Compiler Messages
};
Tips
Use a pointer to the class being defined instead of the class itself.
[ERROR]
Description
A parameter object was declared with the same name as another parameter object of the
same function.
Example
Tips
Choose another name for the parameter object with the already used name.
[ERROR]
Description
A declaration cannot be empty.
Example
int;
Tips
There must be a name for an object.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
762 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The type was composed with an illegal combination. A typical example is
Example
void v[2];
Tips
Type compositions must not contain illegal combinations.
[ERROR]
Description
The specified identifier was already declared
Example
int i;
int i();
Tips
Choose another name for the identifier of the second object.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 763
Compiler Messages
int i;
int i();
Tips
Use the same type modifiers for the first declaration and the redeclaration.
[ERROR]
Description
Another type than 'int' was used for the bitfield declaration. Some Back Ends may
support non-int bitfields, but only if the Compiler switch -Ansi is not given.
Example
struct {
char b:1;
} S;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
764 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Use int type for bitfields or remove the -Ansi from the Compiler options.
See also
• C1106: Non-standard bitfield type
[ERROR]
Description
far, rom or uni has been specified for an array parameter where it is not legal to use it. In
ANSI C, passing an array to a function always means passing a pointer to the array,
because it is not possible to pass an array by value. To indicate that the pointer is a non-
standard pointer, non-standard keywords as near or far may be specified if supported.
Example
Tips
Remove the illegal modifier.
[ERROR]
Description
far, rom or uni has been specified for an array parameter where it is not legal to use it. In
ANSI C, passing an array to a function always means passing a pointer to the array,
because it is not possible to pass an array by value. To indicate that the pointer is a non-
standard pointer, non-standard keywords as near or far may be specified if supported.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 765
Compiler Messages
Example
Tips
Remove the illegal modifier.
[ERROR]
Description
The type of the bit field is too small for the number of bits specified.
Example
struct {
int b:1234;
} S;
Tips
Choose a smaller number of bits, or choose a larger type of the bitfield (if the backend
allows such a non-standard extension).
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
766 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Description
An open parameter list was declared without a ',' before the '...'.
Example
Tips
Insert a ',' before the '...'.
[ERROR]
Description
The specified identifier was declared as const but was not initialized.
Example
Tips
Initialize the constant object, or remove the const specifier from the declaration.
[ERROR]
Description
A reference was not initialized when it was declared.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 767
Compiler Messages
int j;
int& i // = j; missing
Tips
Initialize the reference with an object of the same type as the reference points to.
[ERROR]
Description
A member function of the specified class was initialized.
Tips
Do not initialize member functions in the initialization list for a class or structure.
[ERROR]
Description
A class is used which is not defined/declared.
Example
class A;
class B {
A::I i; // error
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
768 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
Tips
Define/declare a class before using it.
[ERROR]
Description
A pointer to a reference was declared.
Example
Tips
The variable must be dereferenced before a pointer to it can be declared.
[ERROR]
Description
A reference to a reference was declared.
Tips
This error can be avoided by using pointer syntax and declaring a reference to a pointer.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 769
Compiler Messages
Description
The argument expression of a function call in a Ctor-Init list was illegal.
Example
struct A {
A(int i);
};
struct B : A {
B();
};
Tips
In the argument expression of a Ctor-Init function call, there must be the same number of
( as ).
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
770 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
class A {
int i;
};
Tips
Only a member or base class can be in the initialization list for a class or structure.
[ERROR]
Description
The indicated linkage specifier was not legal. This error is caused by using a linkage
specifier that is not supported.
Example
Tips
Only the "C" linkage specifier is supported.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 771
Compiler Messages
[ERROR]
Description
The specified function was declared with the friend specifier outside of a class, structure
or union.
Example
Tips
Do not use the friend specifier outside of class, structure or union declarations.
[ERROR]
Description
A static member function was declared as virtual.
Example
class A {
};
Tips
Do not declare a static member function as virtual.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
772 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A variable with extern storage class cannot be initialized in a function.
Example
void f(void) {
extern int i= 1;
Tips
Initialize the variable, where it is defined.
class A {
};
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 773
Compiler Messages
Do not write a scope resolution to the same class for a friend of a class.
[ERROR]
Description
In the current context either a typedef name or a class name was expected.
Example
struct A {
int i;
};
void main() {
A *a;
a=new a; // error
Tips
Write the ident of a type or class/struct tag.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
774 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The specified identifier after a scope resolution was not a class, struct, or union.
Example
class B {
class A {
};
};
};
Tips
Use an identifier of an already declared class, struct, or union.
[ERROR]
Description
The specified base class had more than one access modifier.
Tips
Use only one access modifier (public, private or protected).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 775
Compiler Messages
[ERROR]
Description
The specified class (or structure) appeared more than once in a list of base classes for a
derived class.
Example
class A {};
class B: A, A {
};
Tips
Specify a direct base class only once.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
776 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A user-defined constructor should be defined. This error occurs when a constructor
should exist, but cannot be generated by the Compiler for the class.
Example
class A {
const int i;
};
The compiler can not generate a constructor because he does not know the value for i.
Tips
Define a constructor for the class.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 777
Compiler Messages
[ERROR]
Description
The Compiler could not generate a special member function (Copy Constructor, Default
Constructor, Destructor, Assignment operator) for the nameless class.
Example
class B {
public:
B();
};
class {
B b;
} A;
Tips
Give a name to nameless class.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
778 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Local class declarations would force the compiler to generate local special member
functions (Copy Constructor, Default Constructor, Destructor, Assignment operator). But
local functions are not supported.
Example
Tips
If you really want the compiler generated special member functions to be created, then
declare the class (or struct) in the global scope.
struct A {
A(void);
A(const A&);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 779
Compiler Messages
~A();
};
struct B : A {
};
Tips
If you do not want the compiler to generate the special member functions, then enable the
option -Cn=Ctr. The compiler only calls a compiler generated function if it is really
necessary. Often a compiler generated function is created, but then never called. Then the
smart linker does not waste code space for such functions.
[ERROR]
Description
Class member cannot have the storage class extern.
Example
class A {
};
Tips
Remove the extern specifier.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
780 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The friend specifier can only be used for classes (or structures or unions) and functions.
Example
typedef int I;
struct A {
friend I; // illegal
};
Tips
Use the friend specifier only for classes (or structures or unions) and functions.
[ERROR]
Description
The function body of a member function inside a class declaration is invalid.
Example
struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 781
Compiler Messages
};
Tips
The function body of a member function inside a class declaration must have the same
number of "{" as "}".
[ERROR]
Description
The specified union member was declared with a special member (Con/Destructor/
Assign-Operator).
Example
class A {
A(void);
};
union B {
A a;
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
782 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
The union member may contain only compiler generated special members. So try to
compile with the option -Cn=Ctr enabled.
[ERROR]
Description
A function was declared in a nameless class.
Example
class {
void f(void);
};
Tips
Name the nameless class, or remove all member functions of the nameless class.
[ERROR]
Description
A used type in a function, class, struct or union was not completely defined.
Tips
Define types before using them.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 783
Compiler Messages
[ERROR]
Description
Member redeclarations cannot have external linkage.
Example
struct A {
f();
}a;
Tips
Do not declare members as extern.
[ERROR]
Description
The friend specifier cannot be used for data declarations.
Example
class A {
friend int a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
784 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
Tips
Remove the friend specifier from the data declaration.
[ERROR]
Description
The declaration of a function of FunctionKind contained an illegal return type.
Tips
Depending on FunctionKind:
• operator -> must return a pointer or a reference or an instance of a class, structure or
union
• operator delete must return void
• operator new must return void *
[ERROR]
Description
Some special functions must have certain return types. An occurred function did have an
illegal return type.
Tips
Depending on FunctionKind:
• operator -> must return a pointer or a reference or an instance of a class, structure or
union
• operator delete must return void
• operator new must return void *
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 785
Compiler Messages
[ERROR]
Description
The declaration of a function of FunctionKind has a parameter of a wrong type.
Tips
Depending on FunctionKind:
• operator new parameter 1 must be unsigned int
• operator delete parameter 1 must be void *
• operator delete parameter 2 must be unsigned int
[ERROR]
Description
The declaration of a function of FunctionKind has a wrong number of parameters
Tips
Depending on FunctionKind: member operator delete must have one or two parameters
[ERROR]
Description
A user-defined conversion cannot specify a return type.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
786 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
class A {
public:
private:
int value;
Tips
Do not specify a return type before the operator keyword.
[ERROR]
Description
Global declarations/definitions of operator delete are allowed to have only one parameter.
Tips
Declare only one parameter for the global delete operator. Or declare the delete operator
as a class member, where it can have 2 parameters.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 787
Compiler Messages
[ERROR]
Description
The specified overloaded operator was declared without a class parameter.
Example
Tips
The first parameter must be of class type.
[ERROR]
Description
The specified constructor returned a value, or the class name is used for a member.
Example
struct C {
C(); // ok
};
Tips
Do not declare a return type for constructors.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
788 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The specified constructor has an illegal storage class (auto, register, static, extern,
virtual).
Tips
The only possible storage class for constructors is inline.
[ERROR]
Description
The specified destructor returned a value.
Tips
Do not declare a return type for destructors.
[ERROR]
Description
An object was declared without decl-specifiers (type, modifiers, ...). There is no error, if
compiling C-source without the -ANSI option.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 789
Compiler Messages
Tips
Apply decl-specifiers for the object, or compile without the options -ANSI and -C++.
[ERROR]
Description
The specified destructor has an illegal storage class (static, extern).
Tips
Do not use the storage classes static and extern for destructors.
[ERROR]
Description
The far/near/rom/uni/paged keyword has no effect in the local declaration of the given
identifier. far may be used to indicate a special addressing mode for a global variable
only. Note that such additional keywords are not ANSI compliant and not supported on
all targets.
Example
void foo(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
790 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Remove the far/near/rom/uni/paged qualifier, or declare the object in the global scope.
[ERROR]
Description
An Object with an undefined or not completely defined type was used.
Example
void f(struct A a) {
Tips
Check the spelling of the usage and the definition of this type. It is legal in C to pass a
pointer to a undefined structure, so examine if is possible to pass a pointer to this type
rather than the value itself.
[ERROR]
Description
An extern identifier was redefined as static.
Example
extern int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 791
Compiler Messages
Tips
Remove either the extern specifier of the first declaration, or the static specifier of the
second occurrence of the identifier.
extern int i;
Tips
Remove either the extern specifier of the first declaration, or the static specifier of the
second occurrence of the identifier.
[ERROR]
Description
The specified function was already declared with a different linkage specifier. This error
can be caused by different linkage specifiers found in include files.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
792 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Use the same linkage specification for the same function/variable.
[ERROR]
Description
The specified member function was not declared in the class/structure for the given
parameters.
Example
class A {
};
Tips
Check the parameter lists of the member function declarations in the class declaration and
the member function declarations/definitions outside the class declaration.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 793
Compiler Messages
[ERROR]
Description
The identifier was already used as tag. In C++, tags have the same namespace than
objects. So there would be no name conflict compiling in C.
Example
Tips
Compile without the option -C++, or choose another name for the typedef object id.
[ERROR]
Description
An access declaration was made for the specified identifier, but it is not a member of a
base class.
Example
struct A {
int i;
};
struct B {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
794 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
int j;
};
struct C : A {
A::i; // ok
B::j; // error
};
Tips
Put the owner class of the specified member into the base class list, or do without the
access declaration.
[ERROR]
Description
Parameters were declared where it is illegal.
Tips
Do not declare parameters for Destructors and Conversions.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 795
Compiler Messages
struct A {
int A;
};
Tips
Constructors, destructors, operators and conversion operators must be declared as
functions.
[ERROR]
Description
A redeclaration of a constructor/destructor is done without parenthesis.
Example
struct A {
~A();
};
A::~A; // error
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
796 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
A::~A(); // ok
Tips
Add parenthesis to the redeclaration of the constructor/destructor.
[ERROR]
Description
The specified identifier was not a static member of a class or structure.
Example
struct A {
int i;
};
void main() {
A::i=4; // error
Tips
Use a member access operator (. or ->) with a class or structure object; or declare the
member as static.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 797
Compiler Messages
[ERROR]
Description
The specified overloaded operator was not a member of a class, structure or union, and/or
was declared as static. FunctionKind can be a conversion or an operator =, -> or ().
Tips
Declare the function inside a class declaration without the static storage class.
[ERROR]
Description
An ident has been used which is not a member of a class or a struct field.
Tips
Check the struct/class declaration.
[ERROR]
Description
A nonmember of a structure or union was incorrectly used.
Example
struct A {
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
798 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
void main() {
A a;
a.r=3; // error
Tips
Using . or ->, specify a declared member.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Global member unary operator must have exactly one parameter.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 799
Compiler Messages
Tips
Static member unary operator must have exactly one parameter.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Member unary operator must have no parameters.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Global binary operator must have two parameters.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
800 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Binary operator must have one parameter.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Global unary/binary operator must have one or two parameters.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 801
Compiler Messages
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong number of
parameters.
Tips
Unary/binary operator must have no or one parameter.
[ERROR]
Description
The specified overloaded operator was incorrectly declared with the wrong type of
parameters.
Tips
Postfix ++/-- operator must have integer parameter.
[ERROR]
Description
The index value of an array declaration was equal or less than 0.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
802 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
The index value must be greater than 0. If the index value is a calculated one, use a 'u' to
make the calculation unsigned (e.g. 400*90u).
[ERROR]
Description
The non-first dimension of an array has no subscript value.
Example
int j[][4]; // ok
Tips
Specify a subscript value for the non-first dimensions of an array.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 803
Compiler Messages
Tips
Do not use modifiers on non-member or static member functions.
[ERROR]
Description
An illegal type specification was parsed.
Example
struct A {
int i;
};
Tips
Specify a correct type for the parameter.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
804 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Description
The specified identifier was declared as a reference to void.
Example
Tips
Don not declare references to a void type.
[ERROR]
Description
A reference to the specified bit field was declared.
Example
struct A {
};
Tips
Do not declare references to bitfields.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 805
Compiler Messages
Tips
Do not declare references to arrays.
[ERROR]
Description
More than one overloaded function was declared with C linkage.
Example
Tips
When using C linkage, only one form of a given function can be made external.
26.1.113 C1104: Bit field type is neither integral nor enum type
[ERROR]
Description
Bit fields must have an integral type (or enum type for C).
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
806 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
struct A {
double d:1;
};
Tips
Specify an integral type (int, long, short, ...) instead of the non-integral type.
[ERROR]
Description
Bit fields must be of integer type. Any other integral or non-integral type is illegal. Some
backends support non int bitfields, others do not. See the chapter backend for details.
Example
struct A {
char i:2;
Tips
Specify an integer-type (int, signed int or unsigned int) for the bitfield.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 807
Compiler Messages
struct bitfields {
};
Tips
If you want portable code, use an integer-type for bitfields.
[ERROR]
Description
Long long bit fields are not yet supported.
Example
struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
808 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
Tips
Do not use long long bit fields.
[ERROR]
Description
A constructor was declared with one parameter, and the parameter has the type of the
class itself.
Example
struct B {
};
Tips
Use a reference of the class instead of the class itself.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 809
Compiler Messages
struct A {
A(A &);
A();
};
void main(void) {
A a;
Tips
If conventional structure copying is desired, try to compile with the option -Cn=Ctr and
do not declare copy constructors manually.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
810 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The inline specifier was used for a data declaration.
Example
inline int i;
Tips
Do not use inline specifiers for data declarations.
[ERROR]
Description
A bitfield declaration must not contain a *. There are no pointer to bits in C. Use instead
a pointer to the structure containing the bitfield.
Example
struct bitfield {
int *i : 2; // error
};
Tips
Do not use pointers in bitfield declarations.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 811
Compiler Messages
[ERROR]
Description
The interrupt specifier was applied to a data declaration.
Example
Tips
Apply the interrupt specifier for functions only
[ERROR]
Description
The interrupt specifier was used twice for the same function.
Example
Tips
[ERROR]
Description
The specified vector entry number for the interrupt was illegal.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
812 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Check the backend for the range of legal interrupt numbers! The interrupt number is not
the same as the address of the interrupt vector table entry. The mapping from the interrupt
number to the vector address is backend specific.
[ERROR]
Description
A non-class/non-function was specified in a template declaration.
Example
Tips
Template declarations must be class or function
[ERROR]
Description
A template class was specified without a tag.
Example
A a;
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 813
Compiler Messages
Tips
Use tags for template classes.
[ERROR]
Description
An illegal template/non-template redeclaration was found.
Example
A a;
};
struct B { // error
A a;
};
Tips
Correct the source. Protect header files with from multiple inclusion.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
814 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
Because virtual functions are called only for objects of class types, you cannot declare
global functions or union member functions as 'virtual'.
Example
// virtual function.
union U {
// function
};
Tips
Do not declare a global function or a union member function as virtual.
[ERROR]
Description
The '=0' qualifier is used to declare a pure virtual function. Following example shows an
ill-formed declaration.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 815
Compiler Messages
class A{ // class
public:
// function declaration.
};
Tips
Correct the source.
[ERROR]
Description
Only a virtual function can be declared as pure. Following example shows an hill-formed
declaration.
Example
class A{ // class
public:
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
816 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Make the function virtual. For overloaded functions check if the parameters are identical
to the base virtual function.
class A{
public:
};
class B : public A{
public:
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 817
Compiler Messages
void main(void){
B b;
// no object is defined.
// B class.
Tips
Correct the source.
[ERROR]
Description
An abstract class is a class that can be used only as a base class of some other class; no
objects of an abstract class may be created except as objects representing a base class of a
class derived from it.
Example
class A{
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
818 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
public:
};
void main(void){
A a;
Tips
Use a pointer/reference to the object:
void main(void){
A *pa;
class B : public A{
public:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 819
Compiler Messages
void f(void){}
};
void main(void){
B b;
[ERROR]
Description
An abstract class may not be used as argument type
Example
class A{
public:
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
820 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void){
void fct(A);
Tips
Use a pointer/reference to the object:
void main(void){
class B : public A{
public:
void f(void){}
};
void main(void){
void fct(B);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 821
Compiler Messages
[ERROR]
Description
An abstract class may not be used as a function return type.
Example
class A{
public:
};
void main(void){
A fct(void);
Tips
Use a pointer/reference to the object
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
822 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void){
A *fct(void);
class B : public A{
public:
void f(void){}
};
void main(void){
B fct(void);
[ERROR]
Description
An abstract class may not be used as a type of an explicit conversion.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 823
Compiler Messages
Example
class A{
public:
};
class B : public A{
public:
void f(void){}
};
void main(void){
A *pa;
B b;
pa = &(A)b;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
824 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Use a pointer/reference to the object
void main(void){
A *pa;
B b;
pa = (A *)b;
class A{
public:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 825
Compiler Messages
};
class B : public A{
public:
void f(void){}
};
[INFORMATION]
Description
A pointer/reference to a constant void type was declared
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
826 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
A pointer to a constant type is a different thing than a constant pointer.
class A {
private:
int i;
};
Tips
You can never access any member of a class containing only private members!
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 827
Compiler Messages
The current declaration is neither the one of pointer to member nor the one of pointer to
member function. But something looking like melting of both.
Example
class A{
public:
int a;
};
Tips
Use the standard declaration: for a pointer to member 'type class::*ident' and for a pointer
to member function 'type (class::*ident)(param list)'
class A{
public:
int a;
void fct(void);
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
828 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
Either the Embedded C++ language (EC++) is enabled (option -C++e), or the compactC+
+ language (cC++) is enabled (option -C++c) plus the appropriate feature is disabled
(option -Cn). Following features could be disabled: virtual functions templates pointer to
member multiple inheritance and virtual base classes class parameters and class returns
Tips
If you really don't want to use this C++ feature, you have to find a workaround to the
problem. Otherwise change the C++ language configuration with the options -C++ and -
Cn, or use the advanced option dialog
[ERROR]
Description
The global variable address modifier was used for another object than a global variable.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 829
Compiler Messages
// points to "glob"
void f() {
Tips
Global variable address modifiers can only be used for global variables. They cannot be
used for functions or local variables. Global variable address modifiers are a not ANSI
standard. So the option -Ansi has to be disabled. To Put a function at a fixed address, use
a pragma CODE_SEG to specify a segment for a function. Then map the function in the
prm file with the linker. To call a function at a absolute address use a cast:
void main(void) {
f();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
830 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
An anonymous type was defined inside parentheses. This is illegal in C++.
Example
Tips
Define the type in the global scope.
[ERROR]
Description
A static CONST member of integral type may be initialized by a constant expression in
its member declaration within the class declaration.
Example
int e = 0;
class A{
public:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 831
Compiler Messages
// initializer
// ...
};
Tips
class A{
public:
// ...
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
832 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
class A{
public:
// ...
};
[ERROR]
Description
Static members of a local class have no linkage and cannot be defined outside the class
declaration. It follows that a local class cannot have static data members.
Example
void foo(void){
class A{
public:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 833
Compiler Messages
};
Tips
Remove the static specifier from the data member declarations of any local class.
void foo(void){
class A{
public:
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
834 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
static class A{
public:
int a;
};
Tips
Remove the Storage Class Specifier from the class definition and apply it to the
instances.
class A{
public:
int a;
};
static A myClassA;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 835
Compiler Messages
[ERROR]
Description
Error detected while parsing the scope resolution of a nested class.
Example
class A{
class B;
class A::C{};
Tips
Check that the scope resolution matches the nested class.
class A{
class B;
class A::B{};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
836 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A segment name used in a segment specifier was not defined with a segment pragma
before.
Example
#pragma DATA_SEG AA
int i @ "AA"; // OK
Tips
All segment names must be known before they are used to avoid tipping mistakes and to
specify a place to put segment modifiers.
See also
• pragma DATA_SEG
• pragma CONST_SEG
• pragma CODE_SEG
[ERROR]
Description
A segment name with an illegal type was specified. Functions can only be placed into
segments of type CODE_SEG, variable/constants can only be placed into segments of
type DATA_SEG or CONST_SEG.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 837
Compiler Messages
#pragma DATA_SEG AA
#pragma CODE_SEG BB
int i @ "AA"; // OK
Tips
Use different segment names for data and code. To place constants into rom, use
segments of type CONST_SEG.
See also
• pragma DATA_SEG
• pragma CONST_SEG
• pragma CODE_SEG
return 4;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
838 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
#pragma TRAP_PROC
class A{
public:
void myFctMbr(void);
};
Tips
Remove all return value and all parameter (even hidden, e.g. 'this' pointer for C++):
#pragma TRAP_PROC
void myFct2(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 839
Compiler Messages
class A{
public:
void myFctMbr(void);
};
void A::myFctMbr(void){ }
Tips
Check which one is correct and remove the other(s).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
840 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The global variable 'ident' cannot be allocated in the specified register. There are two
possible reasons: The type of the variable is not supported to be accessed in a register. or
The specified register number is not possible (e.g. used for parameter passing).
Example
Tips
Consider the ABI of the target processor.
[ERROR]
Description
The modified after the @ was not recognized.
Example
Tips
Check the spelling. Cosmic modifiers are only supported with the option -Ccx. Not all
backends do support all qualifiers. Consider using a pragma DATA_SEG with a qualifier
instead.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 841
Compiler Messages
[ERROR]
Description
Multiple cosmic modifiers where found for a single declaration. Use only one of them.
Example
Tips
Cosmic modifiers are only supported with the option -Ccx. Not all backends do support
all qualifiers. Only use one qualifier. Consider using a pragma DATA_SEG with a
qualifier instead.
Tips
Only specify restrict once.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
842 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
public:
//virtual function
};
public:
};
Example2:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 843
Compiler Messages
public:
//virtual function.
};
public:
//'virtual' is not
// necessary here
};
Example3:
public:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
844 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
//virtual function.
};
public:
};
Tips
A derived class's version of a virtual function must have the same parameter list and
return type as those of the base class. If these are different, the function is not considered
a redefinition of the virtual function. A redefined virtual function cannot differ from the
original only by the return type.
// member list
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 845
Compiler Messages
};
public:
// member list
};
public:
// member list
};
public:
// member list
};
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
846 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
According to this definition, an object 'd' would have the following memory layout:
A part
B part
------
A part
C part
------
D part
But the 'virtual' keyword makes the compiler to generate the following memory layout.
B part
------
C part
------
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 847
Compiler Messages
------
D part
In addition, a pointer to the PSEUDO BASE CLASS is included in each base class that
previously derived from virtual base class (here B and C classes).
[ERROR]
Description
If a virtual methods table of a class is forced to be allocated in code address space (only
possible with Harvard architecture), the pointers to the virtual methods table must be
qualified with a 'rom' attribute (i.e. rom pointer). This message currently appears only if
you specify the compiler option -Cc (allocate 'const' objects in rom). For Harvard targets
all virtual methods tables are put into code address space because the virtual methods
tables are always constant. In this case the compiler generated pointers to the virtual
methods table must be qualified with the rom or uni attribute (see under Tips).
Tips
Qualify virtual table pointers with 'rom' by setting the compiler option -Qvtprom.
See also
• Option -Qvtp
26.1.157 C1393: Delta value does not fit into range (option -Tvtd)
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
848 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
An option ' -Tvtd' is provided by the compiler to let the user specify the delta value size.
The delta value is used in virtual functions management in order to set up the value of the
THIS pointer. Delta value is stored in virtual tables. Letting the user specify the size of
the delta value can save memory space. But one can imagine that the specified size can
be too short, that is the aim of this error message.
Example
class A{
public:
long a[33]
};
class B{
public:
};
public:
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 849
Compiler Messages
C c;
c.fct2();
Tips
Specify a larger size for the delta value: -Tvtd2.
See also
• option -T
• C++ Front End
[ERROR]
Description
Pointer to member is defined to point on a class member, then classes (the one which
member belongs to and the one where the pointer to member points) have to be identical.
If the member is inherited from a base class then classes can be different.
Example
class A{
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
850 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
public:
int a;
void fct1(void){}
};
class B{
public:
int b;
void fct2(void){}
};
void main(void){
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 851
Compiler Messages
class A{
public:
int a;
void fct1(void){}
};
class B{
public:
int b;
void fct2(void){}
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
852 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
class A{
public:
int a;
void fct1(void){}
};
class B : public A{
public:
int b;
void fct2(void){}
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 853
Compiler Messages
[ERROR]
Description
Syntax of pointer to member cannot be used to point to a static member. Static member
have to be pointed in the classic way.
Example
int glob;
class A{
public:
static int a;
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
854 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Use the classic pointer to point static members
class A{
public:
static int a;
};
void main(void){
A aClass;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 855
Compiler Messages
[ERROR]
Description
A pointer to member can not point to a function member and a pointer to function
member can not point a member.
Example
class A{
public:
int b;
int c;
void fct(){}
void fct2(){}
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
856 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
pmi=&A::fct2;
pmf=&A::c;
Tips
class A{
public:
int b;
int c;
void fct(){}
void fct2(){}
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 857
Compiler Messages
pmf=&A::fct2;
pmi=&A::c;
26.1.161 C1398: Pointer to member offset does not fit into range
of given type (option -Tpmo)
[ERROR]
Description
An option -Tpmo is provided by the compiler to let the user specify the pointer to
member offset value size. Letting the user specify the size of the offset value can save
memory space. But one can imagine that the specified size is too short, that is the aim of
this message.
Example
class A{
public:
long a[33];
int b;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
858 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
A myA;
int A::*pmi;
pmi = &A::b;
myA.*pmi = 5;
Tips
Specify a larger size for the offset value: -Tpmo2.
See also
• option -T
• C++ Front End.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 859
Compiler Messages
Description
There was no identifier for a name of the parameter. Only the type was specified. In
function declarations, this is legal. But in function definitions, it's illegal.
Example
void f(int); // ok
Tips
Declare a name for the parameter. In C++ parameter names must not be specified.
26.1.163 C1401: This C++ feature has not been implemented yet
[ERROR]
Description
The C++ compiler does not support all C++ features yet.
Tips
Try to find a workaround of the problem or ask about the latest version of the compiler.
See also
• C++ section about features that are not implemented yet.
[ERROR]
Description
The C++ compiler does not support all C++ features yet. Here is the list of features
causing the error:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
860 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
The compiler wanted to allocate memory on the heap, but there was no space left.
Tips
Modify the memory management on your system.
Tips
Insert a return statement, if you want to return something, otherwise declare the function
as returning void type.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 861
Compiler Messages
[ERROR]
Description
A goto label was found, but the specified label did not exist in the same function.
Example
void main(void) {
goto label;
Tips
Insert a label in the function with the same name as specified in the goto statement.
[ERROR]
Description
A function prototype declaration had formal parameter names, but no types were
provided for the parameters.
Example
Tips
Declare the types for the parameters.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
862 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The function has already a function body, it has already been defined.
Example
void main(void) {}
void main(void) {}
Tips
Define a function only once.
[ERROR]
Description
The function definition is not correct or ill formed.
Tips
Correct the source.
[ERROR]
Description
The parameter declaration for a function does not match with the declaration.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 863
Compiler Messages
Tips
Correct the source. Maybe a wrong header file has been included.
[ERROR]
Description
The parameter declaration for a function does not match with the declaration.
Tips
Correct the source. Maybe a wrong header file has been included.
[ERROR]
Description
An old-style function parameter declaration was not compatible to a previous declaration.
Example
Tips
Declare the same parameters as in the previous declaration.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
864 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main() {
f; // warning
Tips
Write parenthesis (, ) with the arguments after the name of the function to be called.
[ERROR]
Description
The label was defined more than once.
Example
Label:
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 865
Compiler Messages
Tips
Choose another name for the label.
class A{} a;
class B{};
void main(void) {
B* b= (B*)&a;
Tips
Check if your code really does what you want it to.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
866 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Description
The compiler cannot resolve the type specified or no type was specified. This message
may also occur if no type is specified for a new operator.
Tips
Correct the source, add a type for the new operator.
[ERROR]
Description
An initializer was given for the specified array created with the new operator.
Tips
Initialize the elements of the array after the statement containing the new operator.
[ERROR]
Description
The new operator can only create non const and non volatile objects.
Example
void main() {
int *a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 867
Compiler Messages
a=new I; // error
Tips
Do not use const/volatile qualifiers for the type given to the new operator.
[ERROR]
Description
There was no ] found after the [ of a delete operator.
Example
delete [] MyArray; // ok
Tips
Add a ] after the [.
[ERROR]
Description
A pointer to a constant object was illegally deleted using the delete operator.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
868 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main() {
a=new int;
delete a; // error
Tips
The pointer to be deleted has to be non-constant.
int f(void);
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 869
Compiler Messages
Tips
Assign the function call to a variable, if you need the result afterwards. Otherwise cast
the result to void. E.g.:
int f(void);
void main(void) {
[ERROR]
Description
An undefined class, structure or union was used.
Example
void f(void) {
*p=*p1;
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
870 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
No default constructor was available for the specified class/struct. The compiler will
supply a default constructor only if user-defined constructors are not provided in the
same class/struct and there are default constructors provided in all base/member classes/
structs.
Example
class A {
public:
};
Tips
If you provide a constructor that takes a non-void parameter, then you must also provide
a default constructor. Otherwise, if you do not provide a default constructor, you must
call the constructor with parameters.
Example
class A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 871
Compiler Messages
public:
A(int i);
};
[ERROR]
Description
There are constant members in the class/struct, that are not initialized with an initializer
list in the object constructor.
Example
struct A {
A();
const int i;
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
872 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
If a const or reference member variable is not given a value when it is initialized, it must
be given a value in the object constructor.
[ERROR]
Description
The specified member of the class/struct could not be initialized, because it is an array.
Tips
Initialize the member inside the function body of the constructor.
[ERROR]
Description
Explicit Destructor calls inside member functions without using this are illegal.
Example
struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 873
Compiler Messages
void f();
~A();
};
void A::f() {
~A(); // illegal
this->~A(); // ok
Tips
Use the this pointer.
[ERROR]
Description
The specified global function did not have a this pointer to access.
Tips
Do not use this in global functions.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
874 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Do not specify the L before the character/string constant.
[ERROR]
Description
Another name than the name of the class was used to declare a destructor.
Tips
Use the same name for the destructor as the class name.
[ERROR]
Description
There was no destructor declared in the class/struct.
Example
struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 875
Compiler Messages
};
A::~A() {} // error
void main() {
A.a;
a.~A(); // legal
Tips
Declare a destructor in the class/struct.
[ERROR]
Description
This call to the destructor would require the destructor to be static. But destructors are
never static.
Example
class A {
public:
~A();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
876 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
A();
};
void main() {
A::~A(); // error
Tips
Do not make calls to static destructors, because there are no static destructors.
[ERROR]
Description
The specified identifier was not a class/structure or union.
Example
int i;
void main() {
i::f(); // error
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 877
Compiler Messages
Tips
Use a name of a class/struct/union.
[ERROR]
Description
An explicit constructor call was done for a specific object.
Example
struct A {
A();
void f();
};
void A::f() {
this->A(); // error
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
878 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main() {
A a;
a.A(); // error
Tips
Explicit constructor calls are only legal, if no object is specified, that means, a temporary
object is generated.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 879
Compiler Messages
The specified function was declared as returning a value, but the function definition did
not contain a return statement.
Example
int foo(void) {}
Tips
Write a return statement in this function or declare the function with a void return type.
class A {
// ...
~A();
};
class B {
// ...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
880 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
};
delete ap; // ok
delete[4] ap; // ok
delete bp; // ok
delete[] bp; // ok
delete[4] bp; // ok
Tips
Specify the number of elements at calling delete[].
[ERROR]
Description
A member address is expected to initialize the pointer to member. 0 value can also be
provide to set the pointer to member to NULL.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 881
Compiler Messages
class A{
public:
int a;
void fct(void){}
};
void main(void){
...
Tips
Use a member address
class A{
public:
int a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
882 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void fct(void){}
};
void main(void){
...
class A{
public:
int a;
void fct(void){}
};
void main(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 883
Compiler Messages
int A::*pmi = 0;
void (A::*pmf)() = 0;
...
[ERROR]
Description
Parsing ident is not a pointer to member as expected.
Example
int glob;
class A{
public:
int a;
void fct(void){}
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
884 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void){
A aClass;
...
aClass.*glob = 4;
(aclass.*glob)();
Tips
Use the pointer to member ident
class A{
public:
int a;
void fct(void){}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 885
Compiler Messages
};
void main(void){
A aClass;
...
aClass.*pmi = 4;
(aclass.*pmf)();
[ERROR]
Description
An ill formed __OPTION_ACTIVE__ expression was detected. The reason argument
gives a more concrete hint what actually is wrong.
Example
#if __OPTION_ACTIVE__("-dABS")
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
886 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
#endif
The __OPTION_ACTIVE__ expression only allows the option to be tested (here -d and
not the content of the option here ABS.
Tips
Only use the option. To check if a macro is defined as in the example above, use if
defined(ABS). Only options known to the compiler can be tested. This option can be
moved to an warning or less.
Seealso
• if __OPTION_ACTIVE__
void foo(void);
int foo(void) {}
int foo(void) {}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 887
Compiler Messages
void foo(void);
Tips
The problem location is either the one indicated by the previous message or the location
indicated by this message.
[ERROR]
Description
A constant expression which has to be an integral expression is not integral. A non-
integral expression is e.g. a floating constant expression.
Example
#endif
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
888 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Use a integral constant expression.
NOTE
If you move this message (to disable/information/warning), the
non-integral constant expression is transformed into an integral
expression (e.g. 2.3 => 2).
[ERROR]
Description
A typedef name was used for a function definition.
Example
Tips
Do not use a typedef name for a function definition.
[ERROR]
Description
There is a illegal wide character after a wide character designator (L).
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 889
Compiler Messages
Tips
After L there has to be a character constant (e.g. L'a') or a string (e.g. L"abc").
[ERROR]
Description
Initialization of a local variable is skipped by a 'case' label.
Example
void main(void){
int i;
switch(i){
int myVar = 5;
//...
break;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
890 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
//...
break;
Tips
Declare the local variable in the block where it is used.
void main(void){
int i;
switch(i){
case 0:
//...
break;
case 1:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 891
Compiler Messages
int myVar = 5;
//...
break;
[ERROR]
Description
Initialization of a local variable is skipped by a 'default' label.
Example
void main(void){
int i;
switch(i){
case 0:
//...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
892 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
break;
int myVar = 5;
//...
break;
Tips
Declare the local variable in the block where it is used.
void main(void){
int i;
switch(i){
case 0:
//...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 893
Compiler Messages
break;
default:
int myVar = 5;
//...
break;
[ERROR]
Description
A function was called without its prototype being declared before.
Example
void f(void) {
g();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
894 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Prototype the function before calling it. Use void to define a function with no parameters.
void g(void);
The C the declaration f does not define anything about the parameters of f. The first time
f is used, the parameters get defined implicitly. The function g is defined to have no
parameters.
The C the declaration f does not define anything about the parameters of f. The first time
f is used, the parameters get defined implicitly. The function g is defined to have no
parameters.
void f(void) {
g();
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 895
Compiler Messages
Prototype the function before calling it. Make sure that there is a prototype/declaration
for the function. E.g. for above example:
void f(void) {
g();
[ERROR]
Description
A non-static member has been accessed inside a static member function.
Example
struct A {
int i;
};
void A::f() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
896 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
i=3; // error
Tips
Remove the static specifier from the member function, or declare the member to be
accessed as static.
[ERROR]
Description
A function compiler with the pragma REG_PROTOTYPE was used in a unsafe way.
[ERROR]
Description
An identifier was expected.
Example
int ;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 897
Compiler Messages
baseSTR strDescriptor;
CmdPtrType myPtr;
void foo(void) {
myPtr=(CmdPtrType)(void*)&strDescriptor; //
message C1805
*/
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
898 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
There is no conversion for doing the desired cast.
Tips
The cast operator must specify a type, that can be converted to the type, which the
expression containing the cast operator would be converted to.
[ERROR]
Description
There is no conversion for doing the desired cast.
Tips
The cast \c operator must specify a type, that can be converted to the type, which the
expression containing the cast \c operator would be converted to.
[ERROR]
Description
There is no conversion from a class to another class that is not a base class of the first
class.
Example
struct A {
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 899
Compiler Messages
};
struct B : A {
int j;
};
void main() {
A a;
B b;
Tips
Remove this statement, or modify the class hierarchy.
[ERROR]
Description
The number of nested switches was too high.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
900 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
switch(i0) {
switch(i1) {
switch(i2) {
...
Tips
Use "if-else if" statements instead or reduce nesting level.
See also
• Limitations
[ERROR]
Description
The specified switch expression evaluated to an illegal type.
Example
float f;
void main(void) {
switch(f) {
case 1:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 901
Compiler Messages
f=2.1f;
break;
case 2:
f=2.1f;
break;
Tips
A switch expression must evaluate to an integral type, or a class type that has an
unambiguous conversion to an integral type.
[ERROR]
Description
The keyword case was used outside a switch.
Tips
The keyword case can appear only within a switch statement.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
902 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A switch statement must have no or one default label. Two default labels are indicated by
this error.
Example
switch (i) {
default: break;
Tips
Define the default label only once per switch-statement.
[ERROR]
Description
A case label value is already present.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 903
Compiler Messages
Define a case-label-value only once for each value. Use different values for different
labels.
[ERROR]
Description
A constant expression was evaluated and found to have a zero denominator.
Example
int i = 1/0;
Tips
mod or divide should never be by zero. Note that this error can be changed to a warning
or less. This way code like the following can be compiled:
[ERROR]
Description
The expression had an illegal type!.
Tips
Expressions after a ! operator and expressions in conditions must be of arithmetic or
pointer type.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
904 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The specified identifier was not declared.
Example
void main(void) {
i=2;
Tips
A variable's type must be specified in a declaration before it can be used. The parameters
that a function uses must be specified in a declaration before the function can be used.
This error can be caused, if an include file containing the required declaration was
omitted.
[ERROR]
Description
A nonmember of a structure or union was incorrectly used.
Example
struct A {
int i;
} a;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 905
Compiler Messages
void main(void) {
a.I=2;
Tips
On the right side of the ì->ì or . operator, there must be a member of the structure/union
specified on the left side. C is case sensitive.
[ERROR]
Description
A constant argument was specified for calling a function with a reference parameter to a
non-constant.
Example
void main() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
906 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
The parameter must be a reference to a constant, or pass a non-constant variable as
argument.
[ERROR]
Description
The number of arguments for the constructor call at a class object initialization was
wrong.
Example
struct A {
A();
};
void main() {
A a(3); // error
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 907
Compiler Messages
Specify the correct number of arguments for calling the constructor. Try to disable the
option -Cn=Ctr, so the compiler generates a copy constructor, which may be required in
your code.
[ERROR]
Description
A destructor call was specified with arguments.
Example
struct A {
~A();
};
void main() {
A a;
a.~A(3); // error
Tips
Destructor calls have no arguments!
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
908 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A function call was specified with the wrong number of formal parameters.
Example
struct A {
void f();
};
void main() {
A a;
a.f(3); // error
Tips
Specify the correct number of arguments.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 909
Compiler Messages
Description
There is no conversion between the two specified types.
Example
void main() {
int *p;
int j;
p=j; // error
Tips
Use types that can be converted.
void (*f)();
void g(long );
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
910 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void) {
f(1);
f=g;
f(2);
Tips
Avoid implicit parameter declarations whenever possible.
[ERROR]
Description
There are two pointers in the statement pointing to non-equal types.
Example
void main() {
int *i;
char *c;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 911
Compiler Messages
Tips
Both pointers must point to equal types. If the types only differ in the qualifiers (const,
volatile) try to compile with the option -ec.
void main() {
int *i;
char *c;
Tips
Both pointers should point to equal types.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
912 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The expression was not of integral type.
Example
void main() {
int *p;
p<<3;// error
Tips
The expression must be an integral type.
[ERROR]
Description
After certain operators as * or /, arithmetic types must follow.
Example
void main() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 913
Compiler Messages
int * p;
p*3; // error
Tips
* and / must have operands with arithmetic types.
[ERROR]
Description
A pointer was subtracted from an integral type.
Example
void main() {
int *p;
int i;
i-p; // error
Tips
Insert a cast operator from the pointer to the integral type.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
914 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
For + and - only compatible types on both sides can be used. In C++ own implementation
can be used with overloading.
Example
struct A {
int i;
};
void main() {
int i;
A a;
i=i+a; // error
Tips
Use compatible types on the left and on the right side of the +/- operator. Or use the
operator-overloading and define an own + or - operator!
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 915
Compiler Messages
[ERROR]
Description
An attempt was made to modify an item declared with const type.
Example
const i;
void main(void) {
i=2;
Tips
Do not modify this item, or declare the item without the const qualifier.
[ERROR]
Description
An unary operator has an operand of wrong or/and constant type.
Tips
The operand of the unary operator must be a non-const integral type or a non-const
pointer to a non-void type. Or use operator overloading!.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
916 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
Constant objects can not be changed.
Example
void main(void) {
*pi++;
Tips
Either do not declare the object as constant or use a different constant for the new value.
In the case above, use parenthesis to increment the value pi points to and to not increment
pi itself.
void main(void) {
(*pi)++;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 917
Compiler Messages
[ERROR]
Description
An attempt to take the address of an object without an address was made.
Example
void main() {
register i;
Tips
Specify the object you want to dereference in a manner that it has an address.
[ERROR]
Description
The indirection operator (*) was applied to a non-pointer value.
Example
void main(void) {
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
918 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
*i=2;
Tips
Apply the indirection operator only on pointer values.
[ERROR]
Description
The unary (-) operator was used with an illegal operand type.
Example
Tips
There must be an arithmetic operand for the unary (-) operator.
[ERROR]
Description
The unary (~) operator was used with an illegal operand type.
Example
float f= ~1.45;
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 919
Compiler Messages
There must be an operand of integer type for the unary (~) operator.
[ERROR]
Description
The conditional expression evaluated to an illegal type.
Tips
Conditional expressions must be of arithmetic type or pointer.
[ERROR]
Description
The type of the expression in the sizeof operand is incomplete.
Example
Tips
The type of the expression in the sizeof operand must be defined complete.
[ERROR]
Description
A variable of structure or union type was expected.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
920 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A pointer to a structure or union was expected.
struct A {
int j;
};
void main() {
A a;
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 921
Compiler Messages
int b[3];
i=a[a]; // ok
i=b[a]; // error
Tips
Use a type compatible to ì[ì. If there is no global operator for [, take an integer type.
[ERROR]
Description
Another type than an integer type was used in the switch expression.
Tips
Use an integer type in the switch expression.
[ERROR]
Description
A call was made to a function through an expression that did not evaluate to a function
pointer.
Example
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
922 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void) {
i();
Tips
The error is probably caused by attempting to call a non-function. In C++ classes can
overload the call operator, but basic types as pointers cannot.
[ERROR]
Description
The case expression was not an integral constant.
Example
int i;
void main(void) {
switch (i) {
case i+1:
i=1;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 923
Compiler Messages
Tips
Case expressions must be integral constants.
[ERROR]
Description
A continue was made outside of an iteration-statement.
Tips
The continue must be done inside an iteration-statement.
[ERROR]
Description
A break was made outside of an iteration-statement.
Example
int i;
void f(void) {
int res;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
924 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
res=f(-1);
if (res == -1)
break;
printf("%d\n", res);
Tips
The break must be done inside an iteration-statement. Check for the correct number of
open braces.
[ERROR]
Description
A return was made without an expression to be returned in a function with a non-void
return type.
Tips
The return statement must return an expression of the return-type of the function.
[ERROR]
Description
A return was made with an expression, though the function has void return type.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 925
Compiler Messages
Example
void f(void) {
return 1;
Tips
Do not return an expression in a function with void return type. Just write return, or write
nothing.
[ERROR]
Description
Pointer operands were incompatible.
Tips
Either change the source or explicitly cast the pointers.
[ERROR]
Description
Two operands of a binary operator did not have compatible types (there was no
conversion, or the overloaded version of the operand does not take the same types as the
formal parameters).
Tips
Both operands of the binary operator must have compatible types.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
926 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The sizeof operand was a bitfield.
Tips
Do not use bitfields as sizeof operands.
void main(void) {
unsigned char c;
Tips
An unsigned type never can become a negative value. So using the unary minus operator
may cause an unwanted behavior! Note that ANSI C treats -1 as negated value of 1.
Therefore 2147483648 is an unsigned int, if int is 32 bits large or an unsigned long if not.
The negation is a unary function as any other, so the result type is the argument type
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 927
Compiler Messages
propagated to int, if smaller. Note that the value -2147483648 is the negation of
2147483648 and therefore also of a unsigned type, even if the signed representation
contains this value.
int &f(void) {
int i;
return i; // warning
Tips
Either change the return type of the function to the type of the local variable returned, or
declare the variable to be returned as global (returning the reference of this global
variable)!
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
928 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Example
void f(void) {
void g(int i) {
if(i>0) {
Tips
Be sure there is no endless recursion. This would lead to a stack overflow.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 929
Compiler Messages
Example
int foo(void){
return;
void main(void){
int a;
...
a = foo();
Tips
#define ERROR_CASE_VALUE 0
int foo(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
930 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void){
int a;
...
a = foo();
...
} else {
...
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 931
Compiler Messages
p = &buf[3]; // no message!
buf[4] = 0; // message
[WARNING]
Description
A function was called without its prototype being totally declared before.
Example
void main(void) {
foo();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
932 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Prototype all arguments of the function before calling it.
[ERROR]
Description
It is illegal to apply indirection '*' operator to Pointer To Member operands.
Example
class A {
public:
void f(void) {}
};
void fct0(void){
ptrMbrFctType pmf;
*pmf=A::f; // ERROR
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 933
Compiler Messages
void fct1(void){
Tips
Remove the indirection operator.
class A {
public:
void f(void) {}
};
void fct0(void){
ptrMbrFctType pmf;
pmf=&A::f;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
934 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void fct1(void){
void (A::*pmf)(void)=&A::f;
[WARNING]
Description
Whenever there is a pointer conversion which may produce loss of data, this message is
produces. Loss of data can happen if a far (e.g. 3 byte pointer) is assigned to a pointer of
smaller type (e.g. a near 1 byte pointer).
Example
void foo(void) {
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 935
Compiler Messages
[WARNING]
Description
The compiler has detected an illegal usage of the void type. The compiler accepts this
because of historical reasons. Some other vendor compilers may not accept this at all, so
this may cause portability problems.
Example
...
Tips
Correct your code. E.g. replace in the above example the argument with 'void *buf'.
[ERROR]
Description
A constructor must be called, but none is available.
Tips
Define a constructor. No compiler defined default constructor is defined in some
situations, for example when the class has constant members.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
936 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
There is no conversion from type assigned to the type of the reference.
Example
int *i;
Tips
The type of the reference must be equal to the type assigned.
[ERROR]
Description
The reference type is not volatile, the assigned type is.
Example
volatile i;
Tips
Either both are volatile or both are not volatile.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 937
Compiler Messages
[ERROR]
Description
The reference type is not constant, the assigned type is.
Example
void main(void) {
int &p=i;
Tips
Either both are const or both are not const.
[ERROR]
Description
The initializer for a reference to a signed or unsigned char must be const for initialization
with a plain char.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
938 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
char i;
Tips
Either declare the reference type as const, or the type of the initializer must not be plain.
[ERROR]
Description
A member initializer for a reference was constant, though the member was non-constant
Example
struct A {
int &i;
A();
};
Tips
Initialize the reference with a non-constant variable.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 939
Compiler Messages
[ERROR]
Description
The member-initializer contains too many arguments.
Example
struct A {
const int i;
A();
};
Tips
Supply the correct number of arguments in the initializer list of a constructor.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
940 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
The ambiguity resolution mechanism did not find a function in the scope, where it
expected one.
Tips
Check, if the function called is declared in the correct scope.
[ERROR]
Description
The ambiguity resolution mechanism found an ambiguity. That means, more than one
object could be taken for the identifier Name. So the compiler does not know which one
is desired.
Example
struct A {
int i;
};
struct B : A {
};
struct C : A {
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 941
Compiler Messages
struct D : B, C {
};
void main() {
D d;
d.B::i=4; // ok
d.C::i=5; // ok
Tips
Specify a path, how to get to the desired object. Or use virtual base classes in multiple
inheritance. The compiler can handle a most 10'000 different numbers for a compilation
unit. Internally for each number a descriptor exists. If an internal number descriptor
already exists for a given number value with a given type, the existing one is used. But if
e.g. more than 10'000 different numbers are used, this message will appear.
[ERROR]
Description
There is no access to the object specified by the identifier.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
942 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
struct A {
private:
int i;
protected:
int j;
public:
int k;
void g();
};
struct B : public A {
void h();
};
void A::g() {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 943
Compiler Messages
this->i=3; // ok
this->j=4; // ok
this->k=5; // ok
void B::h() {
this->i=3; // error
this->j=4; // ok
this->k=5; // ok
void f() {
A a;
a.i=3; // error
a.j=4; // error
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
944 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
a.k=5; // ok
Tips
Change the access specifiers in the class declaration, if you really need access to the
object. Or use the friend-mechanism.
See also
• Limitations
[ERROR]
Description
An overloaded function was called with non-exact matching arguments.
Tips
Supply exact matching parameters.
See also
• Limitations
[WARNING]
Description
The special member (Constructor, destructor or assignment operator) could not be
accessed.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 945
Compiler Messages
struct A {
private:
A();
};
struct B : A {
};
void main() {
B b; // error
Tips
Change the access specifier for the special member.
See also
• Limitations
[WARNING]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
946 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
struct A {
private:
A();
};
struct B {
A a;
};
void main() {
B b; // error
Tips
Change the access specifier for the special member.
See also
• Limitations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 947
Compiler Messages
[ERROR]
Description
A template was instantiated with the wrong number of template arguments.
Example
S s;
};
Tips
The instantiation of a template type must have the same number of parameters as the
template specification.
[ERROR]
Description
A template was instantiated with the wrong type template arguments.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
948 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
S s;
};
A<4> a; // error
Tips
The instantiation of a template type must have the same argument type as the ones
template specification.
[ERROR]
Description
A template was instantiated from an incomplete class.
Example
Tips
The template to be instantiated must be of a defined class.
Example
S s;
};
A<int> a; // information
// ...
};
void main(void) {
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
950 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
char ch;
f(4); // generate
f(ch); // generate
Tips
The fewer functions are instantiated from a template, the less code is produced. So try to
use already generated template functions instead of letting the compiler generate new
ones.
[ERROR]
Description
A template parameter didn't occur in the parameter list of the template function.
Example
// ...
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 951
Compiler Messages
Tips
The parameter list of the template function must contain the template parameters.
class A {
};
class B : public A{
};
void main() {
A *ap;
B *bp;
ap=bp; // warning
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
952 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Try to avoid operations with pointers to different, but related classes.
[ERROR]
Description
Pure virtual functions can be called from a constructor of an abstract class; the effect of
calling a pure virtual function directly or indirectly for the object being created from such
a constructor is an error.
Example
class A{
public:
A(){
f();
};
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 953
Compiler Messages
Tips
A pure virtual can be defined. It can be called using explicit qualification only.
class A{
public:
A(){
A::f();
};
//...
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
954 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
All subsequent parameters of a default parameter must be default, too.
See also
• Overloading.
[ERROR]
Description
An overloaded operator was specified with default arguments.
Example
struct A{
// ...
};
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 955
Compiler Messages
Overloaded operators cannot have default arguments. Declare several versions of the
operator with different numbers of arguments.
See also
• Overloading.
[ERROR]
Description
A local object or non-static class member was used in the expression for a default
argument.
Example
struct A {
int t;
};
Tips
Only use static or global objects or constants in expressions for default arguments.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
956 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
If a reference is initialized by a constant, the reference has to be constant as well
Example
Tips
Declare the reference as constant.
See also
• Limitations
[ERROR]
Description
An initialization of an array of class objects with constructor call arguments was having
more opening braces than dimensions of the array.
Example
struct A {
A(int);
};
void main() {
A a[3]={{3,4},4}; // errors
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 957
Compiler Messages
A a[3]={3,4,4}; // ok
Tips
Provide the same number of opening braces in an initialization of an array of class
objects.
See also
• Limitations
[ERROR]
Description
An initialization of a global array of class objects with constructor call arguments was
having more arguments than elements in the array.
Example
struct A {
A(int);
};
A a[3]={3,4,5,6}; // errors
A a[3]={3,4,5}; // ok
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
958 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Provide the same number of arguments than number of elements in the global array of
class objects. If you want to make calls to constructors with more than one argument, use
explicit calls of constructors.
See also
• Limitations
[ERROR]
Description
An initialization of an array of class objects with constructor call arguments was having
more arguments than elements in the array.
Example
struct A {
A(int);
};
void main() {
A a[3]={3,4,5,6}; // errors
A a[3]={3,4,5}; // ok
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 959
Compiler Messages
Provide the same number of arguments than number of elements in the array of class
objects. If you want to make calls to constructors with more than one argument, use
explicit calls of constructors.
struct A {
A(int);
A();
A(int,int);
};
void main() {
A a[3]={A(3,4),5,A()};
See also
• Limitations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
960 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The variable was initialized more than once.
Example
Tips
A variable must be initialized at most once.
See also
• Limitations
[ERROR]
Description
Incomplete struct/union, object can not be initialized
Example
struct A;
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 961
Compiler Messages
Do not initialize incomplete struct/union. Declare first the struct/union, then initialize it.
See also
• Limitations
[ERROR]
Description
An aggregate type (array or structure/class) was initialized the wrong way.
Tips
Use the braces correctly.
See also
• Limitations
[ERROR]
Description
A global variable was initialized with a non-constant.
Example
int i;
or
void function(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
962 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
int local;
Tips
In C, global variables can only be initialized by constants. If you need non-constant
initialization values for your global variables, create an InitModule() function in your
compilation unit, where you can assign any expression to your globals. This function
should be called at the beginning of the execution of your program. If you compile your
code with C++, this error won't occur anymore! In C, initialization of a static variables is
done only once. Initializer is not required to be constant by ANSI-C, but this behavior
will avoid troubles hard to debug.
See also
• Limitations
[ERROR]
Description
A reference was initialized with a braced {, } initializer.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 963
Compiler Messages
struct A {
int i;
};
A a = {4}; // ok
A &ref2 = a; // ok
Tips
References must be initialized with non-braced expressions.
Seealso
• Limitations
[ERROR]
Description
A class without a constructor and with non-public members was initialized.
Tips
Classes with non-public members can only be initialized by constructors.
See also
• Limitations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
964 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
A function was initialized.
Example
void f()=3;
Tips
Functions cannot be initialized. But function pointers can.
See also
• Limitations
[ERROR]
Description
A global variable was initialized with a non-constant.
Example
int i;
or
void function(void){
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 965
Compiler Messages
int local;
Tips
In C, global variables can only be initialized by constants. If you need non-constant
initialization values for your global variables, create an InitModule() function in your
compilation unit, where you can assign any expression to your globals. This function
should be called at the beginning of the execution of your program. If you compile your
code with C++, this error won't occur anymore! In C, initialization of a static variables is
done only once. Initializer is not required to be constant by ANSI-C, but this behavior
will avoid troubles hard to debug. You can disable this error if your initialization turns
out to be constant
See also
• Limitations
[WARNING]
Description
A single pragma was found.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
966 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
#pragma
Tips
Probably this is a bug. Correct it.
#pragma INTO_ROM
const int i;
Tips
Be careful with the pragmas INTO_ROM and pragma FAR. They are only valid for one
single variable. In the following code the pragma INTO_ROM puts var_rom into the
rom, but var_ram not.
#pragma INTO_ROM
Note that pragma INTO_ROM is only for the HIWARE Object file format.
[]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 967
Compiler Messages
C2450: Expected:
[ERROR]
Description
An unexpected token was found.
Example
void f(void);
void main(void) {
Tips
Use a token listed in the error message. Check if you are using the right compiler
language option. E.g. you may compile a file with C++ keywords, but are not compiling
the file with C++ option set. Too many nested scopes
[FATAL]
Description
Too many scopes are open at the same time. For the actual limitation number, please see
chapter Limitations
Example
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
968 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
....
Tips
Use less scopes.
See also
• Limitations
[FATAL]
Description
Too many different numbers were used in one compilation unit. For the actual limitation
number, please see chapter Limitations
Example
int main(void) {
return 1+2+3+4+5+6+.....
Tips
Split up very large compilation units.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 969
Compiler Messages
See also
• Limitations
[WARNING]
Description
An illegal floating point number has been specified or the exponent specified is to large
for floating number.
Example
float f = 3.e345689;
Tips
Correct the floating point number.
See also
• Number Formats
• header file "float.h"
[ERROR]
Description
A float number larger than the maximum value for a float has been specified.
Example
float f = 3.402823466E+300F;
Tips
Correct the number.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
970 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
See also
• Number Formats
• header file "float.h"
[ERROR]
Description
The floating number contains an illegal character. Legal characters in floating numbers
are the postfixes 'f' and 'F' (for float) or 'l' and 'L' (for long double). Valid characters for
exponential numbers are 'e' and 'E'.
Example
float f = 3.x4;
Tips
Correct the number.
See also
• Number Formats
[ERROR]
Description
An illegal immediate number has been specified.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 971
Compiler Messages
Tips
Correct the number. For floating point numbers, specify a dot.
See also
• Number Formats
[WARNING]
Description
The compiler generates this message if a constant is used which exceeds the value for a
type. Another reason for this message is if a object (e.g. long) is assigned to an object
with smaller size (e.g. char). Another example is to pass an actual argument too large for
a given formal argument, e.g. passing a 32bit value to a function which expects a 8bit
value.
Example
char c;
long L;
void foo(short);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
972 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void) {
Tips
Usually this is a programming error.
See also
• Header file "limits.h"
[WARNING]
Description
An octal number was parsed.
Example
int f(void) {
Tips
If you want to have a decimal number, don't write a '0' at the beginning.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 973
Compiler Messages
[ERROR]
Description
While reading a numerical constant, the compiler has detected the number is too large for
a data type.
Example
x: REAL;
x := 300e51234;
Tips
Reduce the numerical constant value, or choose another data type.
[ERROR]
Description
While reading a numerical constant, an illegal digit has been found.
Example
x: REAL;
x := 123e4a;
Tips
Check your numerical constant for correctness.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
974 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
While reading a numerical constant, an illegal exponent has been found.
Example
x = 123e;
Tips
Check your numerical constant for correctness. After the exponent, there has to be an
optional '+' or '-' sign followed by a sequence of digits.
[ERROR]
Description
An illegal operator has been found. This could be caused by an illegal usage of saturation
operators, e.g. the using saturation operators without enabling them with a compiler
switch if available. Note that not all compiler backends support saturation operators.
Example
Tips
Enable the usage of Saturation operators if available.
See also
• Saturation Operator
• Compiler Backend Chapter
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 975
Compiler Messages
[ERROR]
Description
There is a missing symbol for the Compiler to complete a parsing rule. Normally this is
just a closing parenthesis or a missing semicolon.
Example
void main(void) {
// '}' missing
other example
void f() {
int i
Tips
Usually this is a programming error. Correct your source code.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
976 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
In the source there is a character which does not match with the name rules for C/C++.
As an example it is not legal to have '$' in identifiers. Note: The pragma MESSAGE does
not apply to this message because it is issued in the preprocessing phase.
Example
int $j;
Tips
Usually this is a programming error. Replace the illegal character with a legal one. Some
E-MAIL programs set the most significant bit of two immediately following spaces. In a
hex editor, such files then contain "a0 a0 a0 20" for four spaces instead of "20 20 20 20".
When this occurs in your E-Mail configuration, send sources as attachment.
[ERROR]
Description
The parser was going out of synchronization. This is caused by complex code with many
blocks, gotos and labels.
Example
Tips
Try to simplify your code!
See also
• Limitations
[WARNING]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 977
Compiler Messages
Description
A constant loop condition has been found and the loop is never executed. No code is
produced for such a loop. Normally, such a constant loop condition may be a
programming error.
Example
Tips
If it is a programming error, correct the loop condition.
See also
• Loop Unrolling
Tips
If it is a programming error, correct the loop condition.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
978 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
• Loop Unrolling
[FATAL]
Description
There are more than 256 file includes in one chain or a possible recursion during an
include sequence. Maybe the included header files are not guarded with ifndef
Example
// foo.c
#include "foo.c"
Tips
Use ifndef to break a possible recursion during include:
// foo.h
#ifndef FOO_H
#define FOO_H
#endif
Simplify the include complexity to less than 256 include files in one include chain.
See also
• Limitations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 979
Compiler Messages
[WARNING]
Description
There were too many flags used at the same time. This message occurs for Modula-2
versions of the compiler only. It does not occur for C/C++ compilers.
[FATAL]
Description
The compiler can handle about 400'000 lexical source tokens. A source token is either a
number or an ident, e.g. 'int a[2] = {0,1};' contains the 12 tokens 'int', 'a', '[', '2', ']', '=', '{',
'0', '1', '}' and ';'.
Example
A source file with more than 400'000 lexical tokens.
Tips
Split up the source file into parts with less then 400'000 lexical tokens.
See also
• Limitations
[WARNING]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
980 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
On a PC, the usual 'newline' sequence is a carriage return (CR) followed by a line feed
(LF). With this message the compiler warns that there is a CR without a LF. The reason
could be a not correctly transformed UNIX source file. However, the compiler can handle
correct UNIX source files (LF only). Note: The pragma MESSAGE does not apply to this
message because it is issued in the preprocessing phase.
Tips
Maybe the source file is corrupted or the source file is not properly converted from a
UNIX source file. Try to load the source file into an editor and to save the source file,
because most of the editors will correct this.
[FATAL]
Description
An identifier was longer than allowed. The compiler supports identifiers with up to 16000
characters. Note that the limits of the linker/debugger may be smaller. The 16000
characters are in respect of the length of the identifier in the source. A name mangled C+
+ identifier is only limited by available memory.
Tips
Do not use such extremely large names!
[FATAL]
Description
The compiler can handle a maximum of about 10'000 strings in a compilation unit. If the
compilation unit contains too many strings, this message will appear.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 981
Compiler Messages
Tips
Split up the source file into parts with less then 10'000 strings.
See also
• Limitations
[FATAL]
Description
The compiler cannot handle an implicit string concatenation with a total of more than
8192 characters.
Example
Implicit string concatenation of two strings with each more than 4096 characters:
Tips
Do not use implicit string concatenation, write the string in one piece:
See also
• Limitations
• C3303: Implicit concatenation of strings
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
982 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
This message may occur during preprocessing if there are too many numbers to handle
for the compiler in a compilation unit. The compiler can handle a most 10'000 different
numbers for a compilation unit. Internally for each number a descriptor exists. If an
internal number descriptor already exists for a given number value with a given type, the
existing one is used. But if e.g. more than 10'000 different numbers are used, this
message will appear.
Example
Tips
Splitting up the source file into smaller parts until this message disappears.
See also
• Limitations
[WARNING]
Description
ANSI-C allows the implicit concatenation of strings: Two strings are merged by the
preprocessor if there is no other preprocessor token between them. This is a useful feature
if two long strings should be one entity and you do want to write a very long line:
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 983
Compiler Messages
This feature may be dangerous if there is just a missing comma (see example below!). If
intention was to allocate a array of char pointers with two elements, the compiler only
will allocate one pointer to the string "abcdef" instead two pointers if there is a comma
between the two strings. Note: The pragma MESSAGE does not apply to this message
because it is issued in the preprocessing phase.
Example
Tips
If it is a programming error, correct it.
[FATAL]
Description
The compiler internally maintains some internal id's for artificial local variables. The
number of such internal id's is limited to 256 for a single compilation unit.
Tips
Split up the compilation unit.
See also
• Limitations
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
984 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
An object cannot been initialized, because the destination is too small, e.g. because the
pointer is too small to hold the address. The message typically occurs if the programmer
tries to initialize a near pointer (e.g. 16bit) with a far pointer (e.g. 24bit).
Example
char Array[10];
char *p = Array;
Tips
Increase the type size for the destination (e.g. with using the far keyword if supported)
See also
• Limitations
[WARNING]
Description
The compiler issues this message if a the resulting string is not terminated with a zero
byte. Thus if such a string is used for printf or strcpy, the operation may fail. In C it is
legal to initialize an array with a string if the string fits without the zero byte.
Example
void main(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 985
Compiler Messages
Tips
For array initialization it is always better to use [] instead to specify the size:
[FATAL]
Description
A fixup type not supported by the ELF Object file writer occurred. This message
indicates an internal compiler error because all necessary fixup types must be supported.
This message also can occur if in HLI (High Level Inline) Assembler an unsupported
relocation/fixup type is used.
Tips
Report this error to your support.
[FATAL]
Description
The ELF generation module reports an error. Possible causes are when the object file to
be generated is locked by another application or the disk is full.
Tips
Check if the output file exists and is locked. Close all applications which might lock it.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
986 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
It is an error when a function is really empty because such a function can not be
represented in the memory and it does not have an address. Because all C functions have
at least a return instruction, this error can only occur with the pragma NO_EXIT. Remark
that not all targets support NO_EXIT.
Example
#pragma NO_EXIT
void main(void) {}
Tips
Remove the function. It is not possible to use an empty function.
[ERROR]
Description
The condition tested with a pragma TEST_CODE was false.
Example
#pragma TEST_CODE == 0
void main(void) {}
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 987
Compiler Messages
Tips
There are many reasons why the generated code may have been changed. Check why the
pragma was added and which code is now generated. If the code is correct, adapt the
pragma. Otherwise change the code.
See also
• pragma TEST_CODE
[WARNING]
Description
A static function was used, but not defined. As static functions can only be defined in this
compilation unit, the function using the undefined static cannot successfully link.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
988 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void) {
f();
Tips
Define the static function, remove its usage or declare it as external.
static int i;
Tips
Remove the static object, comment it out or do not compile it with conditional
compilation. Not referenced static functions often exist because the were used sometime
ago but no longer or because the usage is present but not compiled because of conditional
compilation.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 989
Compiler Messages
By default this message is disabled. This message may be enabled to report every runtime
object used. Runtime objects (or calls) are used if the target CPU itself does not support a
specific operation, e.g. a 32bit division or if the usage of such a runtime function is better
than directly to inline it. The message is issued at the end of a function and reports the
name and the PC where the object is used.
Example
void foo(void) {
// IEEE64 multiplication
Tips
Set this message to an error if you have to ensure that no runtime calls are made.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
990 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void foo(void) {
int k = 3; // no message!
Tips
Set this message to an error if you have to ensure that no additional global initialization is
necessary for a copy down during startup of the application.
[FATAL]
Description
An internal buffer overflow in the ELF/DWARF 2 debug information output. This error
indicates an internal error. It should not be possible to generate this error with legal input.
[FATAL]
Description
The ELF/DWARF 2 debug information output supports 128*128-128 different DWARF
tags. This error indicates an internal error. It should not be possible to generate this error
with legal input because similar objects use the same tag and there much less possible
combinations.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 991
Compiler Messages
[ERROR]
Description
The same segment name was used for different segment type.
Example
Tips
Use different names for different types. If the two segments must be linked to the same
area, this could be done in the link parameter file.
[WARNING]
Description
A segment was used several times with different attributes.
Example
..
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
992 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
..
Tips
Use the same attributes with one segment. Keep variables of the same segment together
to avoid inconsistencies.
[WARNING]
Description
A section pragma was used with incorrect attributes or an incorrect name.
Example
Tips
Take care about not using keywords as names segment names. Note that you can use e.g.
the __FAR_SEG instead FAR.
Example
[WARNING]
Description
A Segment attribute was recognized, but this attribute is not applicable to this segment.
Code segments may only be FAR, NEAR and SHORT. The DIRECT attribute is allowed
for data segments only. The actual available segment attributes and their semantic
depends on the target processor.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 993
Compiler Messages
Example
Tips
Correct the attribute. Do not use segment attribute specifiers as segment names. Note that
you can use the 'safe' qualifiers as well, e.g. __FAR_SEG.
[WARNING]
Description
A Segment name was recognized which is a predefined one. Predefined segment names
are FUNCS, STRINGS, ROM_VAR, COPY, STARTUP, _PRESTART, SSTACK,
DEFAULT_RAM, DEFAULT_ROM and _OVERLAP. If you use such segment names,
this may raise conflicts during linking.
Example
Tips
Use another name. Do not use predefined segment names.
[ERROR]
Description
The return type of the function is too large for this compiler.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
994 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
typedef struct A {
int i,j,k,l,m,n,o,p;
}A;
A f();
Tips
In C++, instead of a class/struct type, return a reference to it! In C, allocate the structure
at the caller and pass a pointer/reference as additional parameter.
See also
• Compiler Backend
unsigned int i= 2;
...
if (i >= 0) i = 1;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 995
Compiler Messages
Example
void test(void) {
while (1) {
work();
Tips
If it is a programming error, correct the statement. For endless loops, use for (;;) ...
instead of while (1).
void test(void) {
for (;;) {
work();
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
996 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
unsigned int i;
Tips
If it is a programming error, correct the statement
[WARNING]
Description
The result of an expression outside a condition is not used. In ANSI-C it is legal to write
code as in the example below. Some programmers are using such a statement to enforce
only a read access to a variable without write access, but in most cases the compiler will
optimize such statements away.
Example
int i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 997
Compiler Messages
Tips
If it is a programming error, correct the statement.
int j, i;
In the above example, both 'i' and 'j' have type 'int', but the compile can safely replace the
'int' shift count 'j' with a 'unsigned char' type.
Tips
None, because it is a hint of compiler optimizations.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
998 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
The compiler has detected a shift count larger than 8bit used for a bitset/bitclear
operation. Because it makes no sense to use a shift count larger than 256, the compiler
optimizes the shift count to a character type. Reducing the shift count may reduce the
code size and improve the code speed (e.g. a 32bit shift compared with a 8bit shift).
Example
int j; long L;
Tips
None, because it is a hint of compiler optimizations.
[FATAL]
Description
The compiler cannot handle an expression which has more than 32 recursion levels.
Example
typedef struct S {
struct S *n;
} S;
S *s;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 999
Compiler Messages
void foo(void) {
Tips
Try to simplify the expression, e.g. use temporary variables to hold expression results.
See also
• Limitations
[ERROR]
Description
The dereferencing operator cannot be applied. For some back-ends, pointer types that do
not support this operation may exist (for instance, __linear pointers for HCS08).
[WARNING]
Description
A signed bitfield entry of size 1 can only have the values 0 and -1. The compiler did find
a comparison of such a value with 1. The compiler did use -1 instead to generate the
expected code.
Example
struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1000 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
int i:1;
} a;
void f(void);
void main(void) {
if (a.i == 1) {
f();
Tips
Correct the source code. Either use an unsigned bitfield entry or compare the value to -1.
[ERROR]
Description
The address of a bitfield was taken.
Example
typedef struct A {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1001
Compiler Messages
int bf1:1;
} A;
void f() {
A a;
if(&a.bf1);
Tips
Use a "normal" integral member type, if you really need to have the address.
[WARNING]
Description
A object (variable or function) was declared with inconsistent segments.
Example
#pragma DATA_SEG A
extern int i;
#pragma DATA_SEG B
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1002 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
int i;
Tips
Change the segment pragmas in a way that all declarations and the definition of one
object are in the same segment. Otherwise wrong optimizations could happen.
[WARNING]
Description
A pragma was not used by the compiler. This may have different reasons: the pragma is
intended for a different compiler by a typing mistake, the compiler did not recognize a
pragma. Note that pragma names are case sensitive. there was no context, a specific
pragma could take some action The segment pragma DATA_SEG, CODE_SEG,
CONST_SEG and their aliases never issue this warning, even if they are not used.
Example
#pragma TRAP_PROG
void Inter(void) {
...
Tips
Investigate this warning carefully. This warning can be mapped to an error if only
pragmas are used which are known.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1003
Compiler Messages
[ERROR]
Description
A ill formed pragma OPTION was found or the given options were not valid. The
description says more precisely what is the problem with a specific pragma OPTION.
Example
Tips
When the format was illegal, correct it. You can add comments, but they must follow the
usual C rules. Be careful which options are given by the command line when adding
options. It is not possible to add options which contradicts to command line options.
Notice the limitations of the pragma OPTION.
See also
• pragma OPTION
[WARNING]
Description
A ill formed pragma MESSAGE was found or the given message number cannot be
moved. The description says more precisely what is the problem with a specific pragma
MESSAGE.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1004 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Write instead:
Tips
When the format was illegal, correct it. You can add comments, but they must follow the
usual C rules. The same message can be moved at different code positions to a different
state. Be careful not to specify the same message with a option or with graphical user
interface and with this pragma. If this is done, it is not defined which definition is
actually taken.
See also
• pragma MESSAGE
[ERROR]
Description
The pragma REALLOC_OBJ was used in a ill formed way.
See also
• pragma REALLOC_OBJ
• Linker Manual
[WARNING]
Description
The pragma LINK_INFO was used in a ill formed way.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1005
Compiler Messages
See also
• pragma LINK_INFO
[ERROR]
Description
A pragma pop was found, but there was no corresponding pragma push.
See also
• pragma pop
• pragma push
[WARNING]
Description
The pragma pop was used in a ill formed way.
See also
• pragma pop
• pragma push
[WARNING]
Description
The pragma push was used in a ill formed way.
See also
• pragma pop
• pragma push
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1006 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[WARNING]
Description
The pragma align was not used together with on or off.
See also
• pragma align
[INFORMATION]
Description
If the option -Oi is enabled, calls of empty functions are removed.
Example
void f() {
void main() {
Tips
If for any reason you need a call of an empty function, disable the option -Oi.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1007
Compiler Messages
See also
• Option -Oi
return i+1;
void main() {
Tips
To force the compiler to inline function calls use the keyword "inline".
See also
• Option -Oi
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1008 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
if(i>10) return 0;
return f(i+1);
void main() {
Tips
To have the same effect as inlining the function, replace the call with the code of the
function manually.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1009
Compiler Messages
[WARNING]
Description
An parsing error was found inside of the given pragma.
Example
void foo(void) {
Tips
• Check the exact definition of this pragma.
• Use comments to add text behind a pragma.
[FATAL]
Description
The preprocessor has found a comment which has not been closed.
Example
/*
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1010 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[WARNING]
Description
A recursive comment has been found (a comment with inside a comment).
Example
/* /* nested comment */
Tips
Either correct the comment, use
'#if 0'
...
'#endif'
#if 0
/* nested comment */
#endif
\\ /* /* nested comment */
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1011
Compiler Messages
[FATAL]
Description
It is not allowed to redefine a macro.
Example
#define ABC 10
#define ABC 20
Tips
Correct the macro (e.g. using another name).
[FATAL]
Description
There are more than 10'000 macros in a single compilation unit.
Example
#define macro0
#define macro1
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1012 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
#define macro10000
Tips
Simplify the compilation unit to reduce the amount of macro definitions.
See also
• Limitations
[FATAL]
Description
In a usage of a macro with parameters, the closing parenthesis is not present.
Example
int i = cat(12,34;
Tips
Add a closing ')'.
[FATAL]
Description
After an include directive, there is an illegal symbol (not a file name in double quotes or
within '<' and '>'.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1013
Compiler Messages
Tips
Correct the include directive.
[FATAL]
Description
There is a missing closing '>' for the include directive.
Example
#include <string.h
Tips
Correct the include directive.
[FATAL]
Description
Either there is a non-printable character (as control characters) inside the file name for the
include directive or the file name is not enclosed with '<' and '>'.
Example
Tips
If there are non-printable characters inside the file name, remove them. If there is a
missing '>', add a '>' to the end of the file name.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1014 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
A include file name longer than 2048 characters has been specified.
Example
#include <VeryLongFilename.....>
Tips
Shorten the file name, e.g. using a relative path or setting up the include file path in the
default.env environment file.
See also
• Limitations
[WARNING]
Description
The concatenation operator ## is used to concatenate symbols. If the resulting symbol is
not a legal one, this message is issued. Note: The pragma MESSAGE does not apply to
this message because it is issued in the preprocessing phase.
Example
#define concat(a,b) a ## b
void foo(int a) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1015
Compiler Messages
Tips
Check your macro definition. Generate a preprocessor output (option -Lp) to find the
problem.
[FATAL]
Description
The number of opening parentheses '(' and the number of closing parentheses ')' does not
match.
Tips
Check your macro definition. Generate a preprocessor output (option -Lp) to find the
problem.
[FATAL]
Description
The compiler has reached the limit for the number of macro arguments for a macro
invocation.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1016 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void foo(void) {
Tips
Try to avoid such a huge number of macro parameters, use simpler macros instead.
See also
• Limitations
[FATAL]
Description
The compiler has reached the limit for recursive macro expansion. A recursive macro is if
a macro depends on another macro. The compiler also stops macro expansion with this
message if it seems to be an endless macro expansion.
Example
#define A0 0
#define A1 A0
#define A2 A1
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1017
Compiler Messages
...
Tips
Try to reduce huge dependency list of macros.
See also
• Limitations
[FATAL]
Description
This is a compiler internal error message only. It happens if during macro expansion the
macro definition position is not the same as during the initial macro scanning.
Tips
If you encounter this message, please send us a preprocessor output (option -Lp).
[FATAL]
Description
The preprocessor tries to resolve a macro expansion. However, there is no macro
argument given after the comma separating the different macro arguments.
Example
#define Macro(a,b)
void foo(void) {
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1018 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Macro(,);
Tips
Check your macro definition or usage. Generate a preprocessor output (option -Lp) to
find the problem.
[FATAL]
Description
The preprocessor expects a closing parenthesis. This may happen if a preprocessor macro
has been called more argument than previously declared.
Example
void main(void) {
Tips
Use the same number of arguments as declared in the macro.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1019
Compiler Messages
[FATAL]
Description
The preprocessor expects a comma at the given position.
Tips
Check your macro definition or usage.
[FATAL]
Description
A preprocessor macro has been called with a different number of argument than
previously declared.
Example
void main(void) {
Tips
Use the same number of arguments as declared in the macro.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1020 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Description
An illegal escape sequence occurred. A set of escape sequences is well defined in ANSI
C. Additionally there are two forms of numerical escape sequences. The compiler has
detected an escape sequence which is not covered by ANSI. Note: The pragma
MESSAGE does not apply to this message because it is issued in the preprocessing
phase.
Example
char c= '\\p';
Tips
Remove the escape character if you just want the character. When this message is
ignored, the compiler issued just the character without considering the escape character.
So '\p' gives just a 'p' when this message is ignored. To specify and additional character
use the either the octal or hexadecimal form of numerical escape sequences.
\encode
\code
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1021
Compiler Messages
See also
• List of Escape Sequences
[FATAL]
Description
There is a string which is not terminated by a double quote. This message is also issued if
the not closed string is at the end of the compilation unit file.
[FATAL]
Description
A string contains either an illegal character or is not terminated by a closing double
quote.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1022 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Check your strings for illegal characters or if they are terminated by a double quote.
[FATAL]
Description
Strings in the preprocessor are actually limited to 8192 characters.
Tips
Use a smaller string or try to split it up.
See also
• Limitations
[FATAL]
Description
To define a character, it has to be surrounded by single quotes (').
Example
Tips
Add a single quote at the end of the character constant.
[FATAL]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1023
Compiler Messages
Description
During preprocessing, the maximum length for a number has been reached. Actually this
length is limited to 8192 characters.
Example
Tips
Probably there is a typing error or the number is just too big.
See also
• Limitations
[FATAL]
Description
There is a problem with the '#' operator during preprocessing, because there is no legal
name as formal parameter specified.
Example
#define cat(a,b) a #
void foo(void) {
i = cat(3,3);
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1024 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Check your macro definition or usage. Generate a preprocessor output (option -Lp) to
find the problem.
[FATAL]
Description
There is a problem with the string concatenation ## operator during preprocessing,
because there is no legal name as formal parameter specified.
Example
#define cat(a,b) a ##
void foo(void) {
i = cat(3,3);
Tips
Check your macro definition or usage. Generate a preprocessor output (option -Lp) to
find the problem.
[FATAL]
Description
There has to be a legal C/C++ ident to be used as a macro name. An ident has to be start
with a normal letter (e.g. 'a'..'Z') or any legal ident symbol.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1025
Compiler Messages
Example
#define "abc"
Tips
Use a legal macro name, e.g. not a string or a digit.
[FATAL]
Description
The preprocessor expects a name for preprocessor macros with parameters.
Example
Tips
Do not use numbers or anything else than a name as macro parameter names.
[FATAL]
Description
The preprocessor has reached the maximum number of arguments allowed for a macro
declaration.
Example
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1026 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
The preprocessor expects macro name for the undef directive.
Example
#undef #xyz
Tips
Use only a legal macro name for the undef directive.
[FATAL]
Description
The file name specified is not a legal string. A legal file name has to be surrounded with
double quotes '"'.
Example
#define file 3
#include file
Tips
Specify a legal file name.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1027
Compiler Messages
[FATAL]
Description
There is no legal file name for a include directive specified. A file name has to be non-
empty and surrounded either by '<' and '>' or by double quotes '"'.
Example
#include <>
Tips
Specify a legal file name.
[FATAL]
Description
While expanding macros, the preprocessor expects here an opening parenthesis to
continue with macro expansion.
Tips
Check your macro definition or usage. Generate a preprocessor output (option -Lp) to
find the problem.
[FATAL]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1028 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Using 'defined', it can be checked if a macro is defined or not. However, there has to be a
name used as argument for defined.
Example
#if defined()
#endif
Tips
Specify a name for the defined directive, e.g. if defined(abc).
[FATAL]
Description
During macro expansion, the preprocessor expects a closing parenthesis to continue.
Tips
Check your macro definition or usage. Generate a preprocessor output (option -Lp) to
find the problem.
[FATAL]
Description
There is an illegal conditional expression used in a if or elif directive.
Example
#if (3*)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1029
Compiler Messages
#endif
Tips
Check the conditional expression.
[FATAL]
Description
The preprocessor expects a name for the ifdef and ifndef directive.
Example
#define 3333_H
#endif
Tips
Check if a legal name is used, e.g. it is not legal to start a name with a digit.
[ERROR]
Description
The preprocessor stops with this message if he encounters an error directive. Note: The
pragma MESSAGE does not apply to this message because it is issued in the
preprocessing phase.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1030 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
Check why the preprocessor evaluates to this error directive. Maybe you have forgotten
to define a macro which has caused this error directive.
[FATAL]
Description
All if or ifdef directives need a endif at the end. If the compiler does not find one, this
message is issued.
Example
#if 1
Tips
Check where the endif is missing. Generate a preprocessor output (option -Lp) to find the
problem.
[FATAL]
Description
The compiler did not found the source file to be used for preprocessing.
Tips
Check why the compiler was not able to open the indicated file. Maybe the file is not
accessible any more or locked by another application.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1031
Compiler Messages
[FATAL]
Description
The preprocessor has detected a directive which is unknown and which cannot be
handled.
Example
#notadirective
Tips
Check the directive. Maybe it is a non-ANSI directive supported by another compiler.
[FATAL]
Description
The compiler was not able to open the preprocessor output file. The preprocessor file is
generated if the option -Lp is specified.
Tips
Check your macro definition or usage. Check the option -Lp: the format specified may be
illegal.
[FATAL]
Description
The asm directive needs a endasm at the end. If the compiler does not find one, this
message is issued.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1032 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Example
#asm
Tips
Check where the endasm is missing. Generate a preprocessor output (option -Lp) to find
the problem.
[WARNING]
Description
Whenever the preprocessor evaluates a condition and finds a identifier which was not
defined before, he implicitly takes its value to be the integral value 0. This C style
behavior may arise in hard to find bug. So when the header file, which actually defines
the value is not included or when the macro name was entered incorrectly, for example
with a different case, then the preprocessor "#if" and "#elif" instructions wont behave as
expected. Note: The pragma MESSAGE does not apply to this message because it is
issued in the preprocessing phase.
Example
#define _Debug_Me 1
...
void main(int i) {
assert(i!=0);
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1033
Compiler Messages
#endif
#define _Debug_Me
...
void main(int i) {
#ifndef(Debug_Me)
#endif
assert(i!=0);
#endif
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1034 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
The checking of macros with "#ifdef" and "#ifndef" cannot detect if the header file, a
macro should define is really included or not. Note that using a undefined macro in C
source will treat the macro as C identifier and so usually be remarked by the compiler.
Also note a undefined macro has the value 0 inside of preprocessor conditions, while a
defined macro with nothing as second argument of a "#define" replaces to nothing. E.g.
#define DEFINED_MACRO
#endif
#endif
26.1.420 C4444: Line number for line directive must be > 0 and
<= 32767
[WARNING]
Description
ANSI requires that the line number for the line directive is greater zero or smaller-equal
than 32767. If this message occurs and it is currently mapped to an error, the compiler
sets the line number to 1.
Example
#line 0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1035
Compiler Messages
Tips
Specify a line number greater zero and smaller 32768. For automatically generated code,
which has such illegal line directives, you can move this error to a warning.
[ERROR]
Description
ANSI requires that after the line directive a number has to follow.
Example
Tips
Specify a line number greater zero and smaller 32768.
[WARNING]
Description
In a macro 'call', one or more arguments are missing. The pre-processor replaces the
parameter string with nothing. Note: The pragma MESSAGE does not apply to this
message because it is issued in the preprocessing phase.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1036 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
void main(void){
// by the pre-processor.
Tips
Be careful with empty macro arguments, because the behavior is undefined in ANSI-C.
So avoid it if possible.
[WARNING]
Description
The compiler has detected that after a directive there was something unexpected.
Directives are normally line oriented, thus the unexpected tokens are just ignored. Note:
The pragma MESSAGE does not apply to this message because it is issued in the
preprocessing phase.
Example
Tips
Remove the unexpected tokens.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1037
Compiler Messages
[WARNING]
Description
The preprocessor stops with this message if he encounters an warning directive. Note that
this directive is only support if -Ansi is not set. Note: The pragma MESSAGE does not
apply to this message because it is issued in the preprocessing phase.
Example
Tips
Check why the preprocessor evaluates to this warning directive. Maybe you have
forgotten to define a macro which has caused this directive.
[ERROR]
Description
The preprocessor does by default only allow 4092 concurrently open if directives. If more
do happen, this message is printed. Usually this message does only happen because of a
programming error.
Example
#if 1 // 0
#if 2 // 0
#if 3 // 0
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1038 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
.....
#if 4092 // 0
Tips
Check why there are that many open preprocessor if's. Are the endif's missing?
[WARNING]
Description
This warning is issued by the compiler to indicate that the source code contains a multi-
character character constant.
Example
[WARNING]
Description
The pragma TEST_ERROR is for internal use only. It is used to test the message
management and also to test error cases in the compiler.
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1039
Compiler Messages
Description
The pragma TEST_ERROR is for internal use only. It is used to test the message
management and also to test error cases in the compiler.
[WARNING]
Description
An assignment requiring an implicit cast was made.
Tips
Check, if the casting results in correct behavior.
[ERROR]
Description
The braced initialization has too many members.
Example
char name[4]={'n','a','m','e',0};
Tips
Write the correct number of members in the braced initializer.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1040 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The overloaded function has the same parameters, but not the same return type.
Example
void f(int);
void f();
Tips
A function redeclaration with the same parameters must have the same return type than
the first declaration.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1041
Compiler Messages
Type sizes has been set to illegal sizes. For compliance with the ANSI-C rules, the type
sizes of char, short, int, long and long long has to in a increasing order, e.g. setting char to
a size of two and int to a size of one will violate this ANSI rule.
Example
-Tc2i1
Tips
Change the -T option.
[ERROR]
Description
Your settings of the Standard Types are wrong!
Example
-Tf4d2
Tips
Set your Standard Types correctly
See also
• Change the -T option.
[ERROR]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1042 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
A unknown or illegal type occurred. This error may happen as consequence of another
error creating the illegal type.
Tips
Check for other errors happening before.
[ERROR]
Description
A compiler internal error happened!
Tips
Please contact your support.
[ERROR]
Description
A compiler internal error happened!
Tips
Please contact your support.
[ERROR]
Description
A compiler internal error happened!
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1043
Compiler Messages
[ERROR]
Description
For HIWARE object file format (option -Fh, -F7 and default if no other object file format
is selected) the char type must always be of size 1. This limitation is because there may
not be any new types introduced in this format and 1 byte types are used internally in the
compiler ever if the user only need multibyte characters. For the strict HIWARE object
file format (option -F7) the additional limitation that the enum type has the size 2 bytes,
and must be signed, is checked with this message. The HIWARE Object File Format (-
Fh) has following limitations: The type char is limited to a size of 1 byte Symbolic
debugging for enumerations is limited to 16bit signed enumerations No symbolic
debugging for enumerations No zero bytes in strings allowed (zero byte marks the end of
the string) The strict HIWARE V2.7 Object File Format (option -F7) has some
limitations: The type char is limited to a size of 1 byte Enumerations are limited to a size
of 2 and has to be signed No symbolic debugging for enumerations The standard type
'short' is encoded as 'int' in the object file format No zero bytes in strings allowed (zero
byte marks the end of the string)
Example
Tips
Use -Fh HIWARE object file format to change the enum type. To change the char type,
only the ELF object file format can be used (if supported). Note that not all backends
allow the change of all types.
See also
• Option for object file format -Fh, -F7, -F1, -F2
• Option for Type Setting -T
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1044 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The code size is too large for this compiler.
Example
Tips
Split up your source into several compilation units!
See also
• Limitations
[ERROR]
Description
The specified source file was not found.
Example
#include "notexisting.h"
Tips
Specify the correct path and name of your source file!
See also
• Input Files
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1045
Compiler Messages
[ERROR]
Description
There is an inconsistent state in the type option settings. E.g. it is illegal to have the 'char'
size larger than the size for the type 'short'.
Tips
Check the -T option in your configuration files. Check if the option is valid.
See also
• Option -T
[ERROR]
Description
You have a limited version of the compiler or reached the limitation specified in the
license file. The actual demo limitation is 1024 bytes of code for 8/16bit targets and
3KByte for 32bit targets (without a license file). Depending on the license configuration,
the code size limit may be specified in the license file too.
Tips
Check if you have enough licenses if you are using a floating license configuration.
Check for the correct location of the license file. Get a license for a full version of the
compiler, or for a code size upgrade.
[FATAL]
Description
The compiler cannot open the object file for writing.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1046 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Check if there is already an object file with the same name but used by another
application. Check if the object file is marked as read-only or locked by another
application. Check if the output path does actually exist.
[FATAL]
Description
The compiler cannot open the logfile file for writing.
Tips
Check if there is already a file with the same name but used by another application.
Check if the file is marked as read-only or locked by another application.
See also
• Option -Ll
[FATAL]
Description
The compiler cannot read an encrypted file because the encrypted file magic value is
wrong.
Tips
Check if the file is a valid encrypted file.
See also
• Option -Eencrypt
• Option -Ekey
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1047
Compiler Messages
[FATAL]
Description
The compiler cannot read the encrypted file because the encryption version does not
match.
Tips
Check if you have a valid license for the given encryption version. Check if you use the
same license configuration for encryption and encrypted file usage.
See also
• Option -Eencrypt
• Option -Ekey
[FATAL]
Description
Building the encryption destination file name using the 'FileSpec' was not possible.
Tips
Check your FileSpec if it is legal.
See also
• Option -Eencrypt
• Option -Ekey
[FATAL]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1048 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
The compiler was not able to write to the encryption destination file.
Tips
Check if you have read/write access to the destination file. Check if the destination file
name is a valid one. Check if the destination file is locked by another application.
See also
• Option -Eencrypt
• Option -Ekey
[FATAL]
Description
The encryption source file and the destination file are the same. Because it is not possible
to overwrite the source file with the destination file, encryption is aborted.
Tips
Change the encryption destination file name specification.
See also
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1049
Compiler Messages
• Option -Eencrypt
• Option -Ekey
[FATAL]
Description
It was not possible to check out the license for encryption support.
Tips
Check your license configuration. Check if you have a valid encryption license.
See also
• Option -Lic
[ERROR]
Description
The internal data structure (Static Single Assignment form) of the compiler is wrong.
Please extract the problem and send it to support. This error can be converted to a
warning, because in most cases the inconsistency does not lead to wrong target code.
Example
Tips
Try to find a different formulation as workaround. Contact support about this problem.
See also
• Limitations
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1050 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The optimized internal data structure (Static Single Assignment form) of the compiler is
wrong. Please extract the problem and send it to your support. This error can be
converted to a warning, because in most cases the inconsistency does not lead to wrong
target code. This is a internal error which should not occur.
Tips
Try to find a different formulation as workaround.
See also
• Limitations
[ERROR]
Description
The compiler tries to take the address of a register which is not possible.
Example
void main(void) {
int a, b;
int *p;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1051
Compiler Messages
Tips
Do not use the address operator for temporary results.
See also
• Limitations
[WARNING]
Description
Two pointers of different sizes are subtracted (pointer difference).
Example
void main(void) {
int *p;
int *far q;
*(p-q) = 0; (Error)
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1052 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
The internal data structure of the compiler blows up. One of your functions is too large.
Tips
Split up the function that causes the message.
See also
• Limitations
[WARNING]
Description
The compiler issues this warning if no dominant definition is found for a local variable
when it is referenced. Ignore this message if the local variable is defined implicitly (e.g.
by inline assembly statements).
Example
int local_i;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1053
Compiler Messages
if(param_i == 0) {
Tips
Review the code and initialize local variables at their declaration (e.g. local_i = 0).
[WARNING]
Description
The compiler has optimized some unused code away.
Tips
Sometimes these compiler message shows some problem in the C code.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1054 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[FATAL]
Description
The Compiler is in an internal error state. Please report this type of error as described in
the chapter Bug Report This message is used while the compiler is not investigating a
specific function.
Example
no example known.
Tips
Sometimes these compiler bugs occur in wrong C Code. So look in your code for
incorrect statements. Simplify the code as long as the bug exists. With a simpler example,
it is often clear what is going wrong and how to avoid this situation. Try to avoid
compiler optimization by using the volatile keyword. Please report errors for which you
do have a work around.
See also
• Chapter Bug Report
[FATAL]
Description
The Compiler is in an internal error state. Please report this type of error as described in
the chapter Bug Report. This message is used while the compiler is investigating a
specific function.
Example
no example known.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1055
Compiler Messages
Sometimes these compiler bugs occur in wrong C Code. So look in your code for
incorrect statements. Simplify the code as long as the bug exists. With a simpler example,
it is often clear what is going wrong and how to avoid this situation. Try to avoid
compiler optimization by using the volatile keyword. Please report errors for which you
do have a work around.
See also
• Chapter Bug Report
void main(void) {
int i;
Tips
Remove the variable if it is never used. If it is used in some situations with conditional
compilation, use the same conditions in the declaration as in the usages.
[INFORMATION]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1056 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
The Compiler has detected a named parameter which is not used. In C parameters in
function definitions must have names. In C++ parameters may have a name. If it has no
name, this warning is not issued. This warning may occur in cases where the interface of
a function is given, but not all parameters of all functions are really used.
Example
void main(int i) {
Tips
If you are using C++, remove the name in the parameter list. If you are using C, use a
name which makes clear that this parameter is intentionally not used as, for example
"dummy".
[ERROR]
Description
This message is used when the user presses the stop button in the graphical user interface.
Also when the compiler is closed during a compilation, this message is issued.
Tips
By moving this message to a warning or less, the stop functionality can be disabled.
[WARNING]
Description
The Compiler has detected operation which results in zero and is optimized. This
message may be generated during tree optimizations (Option -Ont to switch it off).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1057
Compiler Messages
Example
i = j-j; // optimized to i = 0;
Tips
If it is a programming error, correct the statement.
[WARNING]
Description
The Compiler has detected an operation which results in one. This operation is optimized.
This message may be generated during tree optimizations (Option -Ont to switch it off).
Example
i = j/j; // optimized to i = 1;
Tips
If it is a programming error, correct the statement.
[WARNING]
Description
The Compiler has detected an operation which results in a shift count of zero. The
operation is optimized. This message may be generated during tree optimizations (Option
-Ont to switch it off).
Example
i = j<<(j-j); // optimized to i = j;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1058 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Tips
If it is a programming error, correct the statement.
[WARNING]
Description
The Compiler has detected a % operation with zero. Because the modulus operation
implies also a division (division by zero), the compiler issues a warning. This message
may be generated during tree optimizations (Option -Ont to switch it off).
Example
i = j%0; // error
Tips
Correct the statement.
[WARNING]
Description
The Compiler has detected a division by one which is optimized. This message may be
generated during tree optimizations (Option -Ont to switch it off).
Example
i = j/1; // optimized to i = j;
Tips
If it is a programming error, correct the statement.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1059
Compiler Messages
[WARNING]
Description
The Compiler has detected a multiplication with one which is optimized. This message
may be generated during tree optimizations (Option -Ont to switch it off).
Example
i = j*1; // optimized to i = j;
Tips
If it is a programming error, correct the statement.
[WARNING]
Description
The Compiler has detected a subtraction with zero which is optimized. This message may
be generated during tree optimizations (Option -Ont to switch it off).
Example
i = j-(j-j); // optimized to i = j;
Tips
If it is a programming error, correct the statement.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1060 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Description
The Compiler has detected a addition with same left and right expression which is
optimized and replaced with a shift operation. This message may be generated during tree
optimizations (Option -Ont to switch it off).
Example
Tips
If it is a programming error, correct the statement.
[WARNING]
Description
The Compiler has detected a constant switch expression. The compiler optimizes and
reduces such a switch expression This message may be generated during tree
optimizations (Option -Ont to switch it off).
Example
switch(2){
case 1: break;
case 2: i = 0; break;
case 3: i = 7; break;
}; // optimized to i = 0;
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1061
Compiler Messages
[WARNING]
Description
The Compiler has detected an assignment in a condition. Such an assignment may result
from a missing '=' which is normally a programming error. This message may be
generated during tree optimizations (Option -Ont to switch it off).
Example
Tips
If it is a programming error, correct the statement.
switch(i) {
...
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1062 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
if (cond) {
...
} else {
Tips
Do not use normal labels in switch statements. If it is a switch case label, do not forget to
add the 'case' keyword.
[WARNING]
Description
The Compiler has detected zero division. This is not necessarily an error (see below).
This message may be generated during tree optimizations (Option -Ont to switch it off).
Example
void RaiseDivByZero(void) {
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1063
Compiler Messages
Maybe the zero value the divisor results from other compiler optimizations or because a
macro evaluates to zero. It is a good idea to map this warning to an error (see Option -
WmsgSe ).
26.1.477 C5912: Code in 'if' and 'else' part are the same
} else {
Tips
Check your code why both parts are the same. Maybe different macros are used in both
parts which evaluates to the same values.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1064 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
26.1.478 C5913: Conditions of 'if' and 'else if' are the same
...;
...
Tips
Check your code why both conditions are the same. Maybe different macros are used in
both conditions which evaluates to the same values.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1065
Compiler Messages
The Compiler has detected that the condition in an 'if' and a following 'else if' expression
are just inverted. If the first condition is true, the second one is never evaluated (FALSE).
If the first one is FALSE, the second one is TRUE, so the compiler replaces the second
condition with 'TRUE' if the condition does not have any side effects. There is always a
couple of this message, one for the 'if' condition and one for the 'if else' condition. This
message may be generated during tree optimizations (Option -Ont to switch it off).
Example
...;
...
Tips
Check your code why both conditions are inverted. Maybe different macros are used in
both parts which evaluates to the same values.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1066 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Example
...
Tips
Check your code why both conditions are the same. Maybe different macros are used in
both parts which evaluates to the same values.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1067
Compiler Messages
...
Tips
Check your code why both conditions are the same. Maybe different macros are used in
both parts which evaluates to the same values.
[WARNING]
Description
The Compiler has detected that there is an assignment to a (local) variable which is not
used afterwards. This message may be generated during tree optimizations (Option -Ont
to switch it off).
Example
int a;
...
} // end of function
Tips
If you want to avoid this optimization, you can declare the variable as volatile.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1068 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[WARNING]
Description
The Compiler has detected that there is goto jumping to a just following label. This
message may be generated during tree optimizations (Option -Ont to switch it off).
Example
Label:
...
Tips
If you want to avoid this optimization, you can declare the variable as volatile.
[WARNING]
Description
In ANSI-C the result of a conversion operation of a (signed) floating type to a unsigned
integral type is undefined. One implementation may return 0, another the maximum value
of the unsigned integral type or even something else. Because such behavior may cause
porting problems to other compilers, a warning message is issued for this.
Example
float f = -2.0;
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1069
Compiler Messages
Tips
To avoid the undefined behavior, first assign/cast the floating type to a signed integral
type and then to a unsigned integral type.
See also
• ISO/IEC 9899:1990 (E), page 35, chapter 6.2.1.3 Floating and integral: "When a
value of floating type is converted to integral type, the fractional part is discarded.
The value of the integral part cannot be represented by the integral type, the behavior
is undefined."
[WARNING]
Description
The compiler has detected that there is a shift count exceeding the object size of the
object to be shifted. This is normally not a problem, but can be optimized by the
compiler. For right shifts (>>), the compiler will replace the shift count with
(sizeOfObjectInBits-1), that is a shift of a 16bit object (e.g. a short value) with a right
shift by twenty is replaced with a right shift by 15. This message may be generated
during tree optimizations (Option -Ont to switch it off).
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1070 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Example
See also
• Option -Ont
[WARNING]
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1071
Compiler Messages
The Assembler Include file could not be opened. As reason either occurs the file name,
which was tried to open or another description of the problem.
Tips
Try to specify the name directly. Check the usage of the file name modifiers. Check of
the file exists and is locked by another application
See also
• Option -La
• Create Assembler Include Files
• pragma CREATE_ASM_LISTING
[ERROR]
Description
The pragma CREATE_ASM_LISTING was used in a ill formed way.
Tips
After the pragma, the may only be a ON or OFF. ON and OFF are case sensitive and
must not be surrounded by double quotes.
Example
#pragma CREATE_ASM_LISTING ON
See also
• Option -La
• Create Assembler Include Files
• pragma CREATE_ASM_LISTING
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1072 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Messages of HC08 Back End The following sections contains message descriptions
specific for the HC08 compiler. All messages specific for the HC08 have a number of the
form C18XXX, where XXX is a different number for every message. Up to the compiler
version 5.0.7, there is also a set of messages with numbers C20XXX (ICG based
technology).
[ERROR]
Description
The HLI assembler assumes every unknown symbol to be a label. But if this symbol/label
is not defined, this message will occur.
Example
Tips
Check if this label exists or if there is a misspelling. If it is a C/C++ object, check if there
is a declaration of it.
[ERROR]
Description
The derivative you generate code for does not support code banking.
Tips
Chose a derivative that supports code banking or change the memory model to small or
tiny.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1073
Compiler Messages
[ERROR]
Description
An unsupported pointer conversion was encountered. For some back-ends, such
unsupported conversions may exist (between pointers qualified with non-ANSI
keywords).
[WARNING
Description
A linear pointer is initialized with the address of an object defined in a segment that is not
qualified with __LINEAR_SEG.
Example
const int i;
[ERROR]
Description
The HLI assembler expects a number. This is either constant expression or a single
number.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1074 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
Example
Tips
Do not use objects in constant expressions.
ERROR]
Description
This error message is issued if the -MMU option is used without the -Cs08 option when
passing arguments to the compiler.
Example
chc08.exe-MMU /* Error */
[ERROR]
Description
A function pointer may have a qualifier that specifies the calling convention and one that
specifies the pointer size. For example, consider the following function pointer: int __far
(* __far f)(void). The leftmost qualifier specifies the calling convention, while the other
qualifier indicates the pointer size. The HC(S)08 backend only accepts far pointers to far
functions and near pointers to near functions. Any other combination (e.g. int __far (*
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1075
Compiler Messages
__near f)(void)) will result in a compiler error. The compiler also checks the memory
model (on banked memory model, all functions are __far by default if not specified
otherwise).
Example
Tips
Do not use near pointers to far functions or far pointers to near functions.
ERROR]
Description
The HLI assembler expects a structure's field or a class member on the right side of the
"." assembly operator.
Example
_str port;
/*correct use*/
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1076 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
ERROR]
Description
The HLI assembler expects a struct / class type on the left side of the "." assembly
operator.
Example
int port;
[ERROR]
Description
The HLI assembler expects a factor. A factor is a sequence starting with
• left parenthesis '('
• cross '#'
• minus '-'
• address operator '@'
• star '*'
• type
• label
• object (parameter, function, local variable, global variable)
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1077
Compiler Messages
Example
[ERROR]
Description
This error occurs if an asm block (assembly code enclosed between braces) was not
correctly marked as closed using }.
Example
[ERROR]
Description
The "@" assembly operator can be used only with global variables. Applied in front of a
variable it will refer to the address of that variable.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1078 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR]
Description
The inline assembly instruction operands do not match any of the instruction's addressing
modes.
Example
asm JSR X
[ERROR]
Description
This error message is issued if the assembler is set on to reject assembly instructions with
indexed addressing mode.
Example
asm LDA ,X
[ERROR]
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1079
Compiler Messages
Description
The HLI assembler expects an exclamation mark inline assembly operator.
Example
[ERROR]
Description
A comma that delimits the operands of the assembly instruction was omitted.
Example
[ERROR]
Description
The assembly instruction used accepts only constant(s) as parameter(s). Local or global
objects/variables cannot be used even if they are declared as const.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1080 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR
Description
One of the instruction's parameters is out of range.
Example
Tips
Consult the architecture manual for the instruction operands to check if there are
constraints related to accepted values.
[ERROR]
Description
The HLI assembler expects a bit number.
Example
Tips
Do not use labels or objects for bit numbers.
[ERROR
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1081
Compiler Messages
Description
The HLI assembler expects one of the following registers: A, H, X or HX.
[ERROR
Description
The left brace of the one of the register lists was omitted.
Example
[ERROR
Description
The right brace of one of the register lists was omitted, or an incorrect register has been
passed.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1082 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR
Description
The immediate addressing mode can be used only with global variables or integer values.
This error is issued if #label, #register or #local_var are used.
Example
[ERROR
Description
The HLI assembler expects a label or global variable operand.
Example
asm{
label:
......
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1083
Compiler Messages
[ERROR
Description
Illegal use of the ":" operator.
Example
label:
LDA label:MSB
[ERROR
Description
This message occurs if an assembly operator is misused.
Example
The PAGE operator is not allowed in this context, hence C18120 occurs.
[ERROR
Description
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1084 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
The message occurs for code such as: LDA @var,SP. Thus, the only register allowed
here is X. For example: LDA @var, X. If any other register name (A, H, SP) else is used,
then you get an error message.
[ERROR
Description
The HLI assembler expects a label/global variable or an immediate operand.
Example
void foo{}
[ERROR
Description
The HLI assembler issues this error message when the assembler block or the assembly
instruction has incorrect syntax.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1085
Compiler Messages
[ERROR
Description
The HLI assembler expects an immediate operand.
Example
[ERROR
Description
The HLI assembler expects an instruction mnemonic or a label definition.
Tips
Check if the instruction/directive mnemonic is correctly typed or if the label definition is
followed by a colon character.
[ERROR
Description
Two or more labels have been defined using the same name.
Example
asm{
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1086 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
label:
.....
JMP label
.....
label:
[ERROR
Description
The HLI assembler expects an instruction mnemonic, a label definition or a directive.
Example
Tips
Check if the instruction/directive mnemonic is correctly typed or if the label definition is
followed by a colon character.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1087
Compiler Messages
[ERROR
Description
The inline assembly instruction uses a jump address that is too large: the value of the
address cannot fit in the bits reserved for this purpose in the instruction machine code.
Example
[ERROR]
Description
There is an illegal combination of HC08 instruction mnemonic and src/dst operands. This
is normally the case if using HLI an illegal addressing mode is used
Tips
Check the addressing modes if they are illegal, e.g some instructions work only with
direct addressing mode.
[ERROR
Description
The mnemonic is not recognised as a valid one.
Tip
Check if the instruction mnemonic was correctly typed.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1088 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR
Description
The bitfield's size is greater than the size of the base type.
Example
typedef struct bf
}bf;
[WARNING]
Description
The low level debug information generator detected unreachable code, that has not been
optimized by higher level parts of the compiler.
Tips
Check the C or HLI sources if they are really necessary.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1089
Compiler Messages
[WARNING]
Description
The values of the stack pointer do not match at a joining point of the code. The reason for
this serious warning may be
• inline assembly code the stack pointer cannot be traced
• the compiler may generated wrong code
Tips
Check your sources for a HLI code sequence from which the stack pointer value cannot
be calculated at compile time. Check the listing file for correctness of the compiler.
Please report bugs to your support. If you do not use HLI, map this warning to an error.
[WARNING]
Description
This directive is accepted but not handled by the inline assembler.
[ERROR
Description
The operand is not recognized as a valid value for the assembly instruction.
Example
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1090 Freescale Semiconductor, Inc.
Chapter 26 Compiler Messages
[ERROR
Description
The inline assembler operator "-" can not be used with operators of address type.
Example
[ERROR]
Description
This error is issued for code having extremely many temporary locations active at one
point. This limit is not reached by normal code.
Tips
Recode this part of the application. Use less ? operators.
[WARNING]
Description
The low level debug information generator detected a stack pointer relative indirect
memory access with an offset <= 0. Accesses below the stack pointer do not make any
sense. This message may also come from HLI code, from which the stack pointer cannot
be properly calculated at compile time, or from wrong code generated by the compiler.
Tips
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
Freescale Semiconductor, Inc. 1091
Compiler Messages
Check your sources for a HLI code sequence from which the stack pointer value cannot
be calculated at compile time. Check the listing file for correctness of the compiler.
Please report bugs to your support. If you do not use HLI, map this warning to an error.
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual, Rev.
10.6, 01/2014
1092 Freescale Semiconductor, Inc.
Index
Index
-F1 214
__alignof__ 407 -F1o 214
__asm 409 -F2 214
__far 400–405 -F2o,-F6 214
__near 406 --F6 214
__OPTION_ACTIVE__ 886 -F7 214
__SHORT_SEG 453, 484 -Fd 216
__va_sizeof__ 408 -Fh 214
_asm 650 -H 217
_linear 1074 -I 218
.inc 225 -La 219, 441
(un)signed 938 -Lasm 220
@address 396 -Lasmc 222
@bool 648 -Ldf 223
@far 648 -Li 225
@interrupt 644, 651 -Lic 226
@tiny 648 -LicA 227
*.prm 646 -LicBorrow 228
#include 153 -LicWait 229
#pragma 357, 360, 362, 364, 366, 368–371, -Ll 231
373–376, 378–383, 385, 387, 389 -Lm 232, 233
#warning 395 -LmCfg 233
-AddIncl 175 -Lo 236
-Ansi 176 -Lp 237
-ANSI 841 -LpCfg 238
-ArgFile 177 -LpX 239
-Asr 178 -Mb 240
-BfaB 180 -MMU 242
-BfaGapLimitBits 182 -Ms 240
-BfaTSR 183 -Mt 240
-C[s08|08] 198 -N 242
-C++ 185 -NoBeep 244
-C++c 185 -NoClrVol 244
-C++e 185 -NoDebugInfo 245
-C++f 185 -NoEnv 246
-Cc 186 -NoPath 247
-Ccx 188 -O0 249
-Ci 190 -Obfv 249
-Cn[={Vf|Tpl|Ptm...}] 193 -ObjN 251
-Cni 194 -Oc 252
-Cppc 196 -OdocF 254
-Cq 197 -Of 256
-Cs08 476 -Oi 260, 452
-CswMaxLF 199 -Oilib 262
-CswMinLB 201 -Ol 264
-CswMinLF 202 -Ona 266
-CswMinSLB 204 -OnB 267
-Cu 205 -Onbf 269
-Cx 207 -Onbt 270
-D 208 -Onca 272
-Ec 209 -Oncn 273
-Eencrypt 211 -OnCopyDown 275
-Ekey 212 -OnCstVar 276
-Env 213 -One 278
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1093
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1094 Freescale Semiconductor, Inc.
Index
Append 236 B
Appendices 637
application 670 Back 1072
Application 78, 306, 659, 663, 666 Backend 465, 807
Application. 670 banked 1073
Application's 667 Banked 465, 735
Applications 668 Banking 467
applied 918, 922, 927 Bar 117, 677
applies 834 base 770, 776, 866, 945
are 174, 673, 674, 833, 856, 1049, 1064, 1065 Base 776, 845
area 674 bases 814
argument 769, 820, 948, 956, 1036 Batch 112, 163, 314, 319
Argument 475, 476, 1018 because 1071, 1072
arguments 907, 909, 940, 948, 955, 958, 959, 1016, been 860
1026 Beep 244
Arithmetic 415, 904, 913, 919, 920 beginning 673
array 868, 880 Behavior 411
Array 803, 805 being 761
arrays 867, 873 big 980
Arrays 401, 649 Bigraph 190, 707
array-size 1043 binary 800
asctime() 539 Binary 395, 704, 801
asin() 539 bit 766, 808, 998, 1000
asinf() 539 Bit 764, 806
Asked 668 bitfield 805, 808, 1001
Asm 1071 Bitfield 180, 182, 183, 348, 350, 811, 1089
Assembler 219, 362, 437, 439–441, 487 bitfields 807
Assembly 456, 489, 494, 641, 643–645 Bitfields 249, 269, 351, 423, 424, 459, 471, 482,
assert.h 531 647
assert() 540 Bitno 1081
assertion 674 BitSet/BitClr 998
Assertion 1018 block 772
Assertions 495 Block 514
assigned 937 Blocks 645
assignment 1040, 1068 board 675
Assignment 1062 body 781
Assignments 289, 432 Boolean 458
Associated 137 Borrow 228
Associativity 681 bounds 803
Assumed 178 Box 121, 128, 129, 131, 132, 134, 135, 138, 242
atan() 541 Brackets 677
atan2() 542 Branch 101, 267, 270, 430, 482
atan2f() 542 Break 924
atanf() 541 breakpoint 672, 674
atexit() 508, 542 bsearch() 546
atof() 543 buffer 981, 983
atoi() 544 Bug 675
atol() 545 build 1048
Attribute 993 Build 78, 80, 81
attributes 991, 992 Byte 180
automatically 672 bytes 1046
available 871, 873, 936
Available 229
avoid 672
C
C++ 103, 107, 185, 196, 403, 404, 701, 829, 860,
879
C1 747
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1095
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1096 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1097
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1098 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1099
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1100 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1101
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1102 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1103
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1104 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1105
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1106 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1107
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1108 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1109
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1110 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1111
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1112 Freescale Semiconductor, Inc.
Index
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
Freescale Semiconductor, Inc. 1113
Index
with 126
Wizard 57
Words 492
work. 670
Working 140
write 674
Write 231, 337
Written 178
wrong 671, 786, 907, 948
Wrong 785, 790, 793, 876, 909, 916, 948, 1047,
1048
X
XXX_Compiler 684, 693
Y
yet 808, 860, 879, 945
your 829
Z
zero 904, 985, 1057, 1058, 1060, 1063
Zero 275, 1059
CodeWarrior Development Studio for Microcontrollers V10.x HC(S)08 Build Tools Reference Manual
1114 Freescale Semiconductor, Inc.
How to Reach Us: Information in this document is provided solely to enable system and
software implementers to use Freescale products. There are no express
Home Page:
or implied copyright licenses granted hereunder to design or fabricate
freescale.com
any integrated circuits based on the information in this document.
Web Support: Freescale reserves the right to make changes without further notice to
freescale.com/support any products herein.
Freescale makes no warranty, representation, or guarantee regarding
the suitability of its products for any particular purpose, nor does
Freescale assume any liability arising out of the application or use of
any product or circuit, and specifically disclaims any and all liability,
including without limitation consequential or incidental damages.
“Typical” parameters that may be provided in Freescale data sheets
and/or specifications can and do vary in different applications, and
actual performance may vary over time. All operating parameters,
including “typicals,” must be validated for each customer application by
customer's technical experts. Freescale does not convey any license
under its patent rights nor the rights of others. Freescale sells products
pursuant to standard terms and conditions of sale, which can be found
at the following address: freescale.com/SalesTermsandConditions.
Freescale, and the Freescale logo are trademarks of Freescale
Semiconductor, Inc., Reg. U.S. Pat. & Tm. Off. All other product or
service names are the property of their respective owners.
© 2010–2016 Freescale Semiconductor, Inc.