Home
HI-TECH C for PIC10/12/16 User's Guide
Contents
1. 2010 Microchip Technology Inc DS51865B page 135 HI TECH C for PIC10 12 16 User s Guide 4 3 10 1 COND Any conditional code will be included in the listing output See also the NOCOND control in Section 4 3 10 5 NOCOND 4 3 10 2 EXPAND When EXPAND Is in effect the code generated by macro expansions will appear in the listing output See also the NOEXPAND control in Section 4 3 10 6 NOEXPAND 4 3 10 3 INCLUDE This control causes the file specified by pat hname to be textually included at that point in the assembly file The INCLUDE control must be the last control keyword on the line for example OPT INCLUDE options A The driver does not pass any search paths to the assembler so if the include file is not located in the working directory the pathname must specify the exact location See also the driver option P in Section 2 7 11 P Preprocess Assembly Files which forces the C preprocessor to preprocess assembly file thus allowing use of pre processor directives such as include see Section 3 15 1 Preprocessor Direc tives 4 3 10 4 LIST If the listing was previously turned off using the NOLIST control the LIST control on its own will turn the listing on Alternatively the LIST control may includes options to control the assembly and the listing The options are listed in Table 4 8 TABLE 4 8 LIST CONTROL OPTIONS n f Settne page Le column width n NNN nmn I
2. Maybe you meant something like pragma printf_check sprintf Pragmas for all the standard printf like function are already contained in lt stdio h gt 220 exponent expected Parser A floating point constant must have at least one digit after the e or E e g float f f 1 234e Jk oops what is the exponent 221 hexadecimal digit expected Parser After 0x should follow at least one of the HEX digits 0 9 and A F or a f e g a 0xg6 oops was that meant to be a Oxf6 222 binary digit expected Parser A binary digit was expected following the 0b format specifier e g i Obf000 oops 000 is not a base two value 223 digit out of range Parser Assembler A digit in this number is out of range of the radix for the number e g using the digit 8 in an octal number or HEX digits A F in a decimal number An octal number is denoted by the digit string commencing with a zero while a HEX number starts with 0X or Ox For example int a 058 je leading 0 implies octal which has digits xt 37 224 illegal directive Parser An illegal preprocessor has been detected Likely a directive has been misspelt in your code somewhere 225 missing character in character constant Parser The character inside the single quotes is missing e g char sS e the character valve of whats 226 char const too long Parser A character constant enclosed in single quotes may
3. overlaps segment Linker The named segments have overlapping code or data Check the addresses being assigned by the P linker option 599 No psect classes given for COFF write Cromwell Cromwell requires that the program memory psect classes be specified to produce a COFF file Ensure that you are using the N option as per Section 6 5 2 N 600 No chip arch given for COFF write Cromwell Cromwell requires that the chip architecture be specified to produce a COFF file Ensure that you are using the P option as per Table 6 7 601 Unknown chip arch for COFF write Cromwell The chip architecture specified for producing a COFF file isn t recognized by Cromwell Ensure that you are using the P option as per Section 6 5 1 Pname architecture and that the architecture specified matches one of those in Table 6 7 602 null file format name Cromwell The I or oO option to Cromwell must specify a file format IERT 603 ambiguous file format name Cromwell The input or output format specified to Cromwell is ambiguous These formats are specified with the i key and o key options respectively 604 unknown file format name Cromwell The output format specified to CROMWELL is unknown e g cromwell m P16F877 main HEX main sym ocot and output file type of cot did you mean cof 605 did not recognize format of input file Cromwell The input file to Cromwell is r
4. 2010 Microchip Technology Inc DS51865B page 123 HI TECH C for PIC10 12 16 User s Guide 4 3 7 Expressions The operands to instructions and directives are comprised of expressions Expressions can be made up of numbers identifiers strings and operators Operators can be unary one operand e g not or binary two operands e g The operators allowable in expressions are listed in Table 4 4 TABLE 4 4 ASPIC OPERATORS opne O Ess TE O C Jo Tooo weon fow imen mooo i omen O Jos inp oO a o omeri dB inp ror E ee eg The usual rules governing the syntax of expressions apply The operators listed may all be freely combined in both constant and relocatable expressions The HI TECH linker permits relocation of complex expressions so the results of expressions involving relocatable identifiers may not be resolved until link time DS51865B page 124 2010 Microchip Technology Inc Macro Assembler 4 3 8 Program Sections Program sections or psects are simply a section of code or data They are a way of grouping together parts of a program via the psect s name even though the source code may not be physically adjacent in the source file or even where spread over several modules A psect is identified by a name and has several attributes The PSECT assembler direc tive is used to define a psect It takes as arguments a name and an optional comma separated list of flags See Section 3 10 1 Compiler g
5. 372 expected Parser A comma was expected here This could mean you have left out the comma between two identifiers in a declaration list It may also mean that the immediately preceding type name is misspelled and has thus been interpreted as an identifier e g unsigned char a thinks chat amp b are unsigned but where is the comma DS51865B page 274 2010 Microchip Technology Inc unsigned chat b 373 implicit signed to unsigned conversion Parser An unsigned type was expected where a signed type was given and was implicitly cast to unsigned g unsigned int foo 13 the above initialization is implicitly treated as unsToned ink foo unsigned ker 374 missing basic type int assumed Parser The basic type of a cast to a qualified basic type was missing and assumed to be int e g int i signed 2 signed assumed to be signed int 375 unknown FNREC type Linker This is an internal compiler error Contact HI TECH Software technical support with details 376 bad non zero node in call graph Linker The linker has encountered a top level node in the call graph that is referenced from lower down in the call graph This probably means the program has indirect recursion which is not allowed when using a compiled stack TP aT 378 can t create file Hexmate This type of file could not be created Is the file or a file by this name already in use 379
6. IDE name Set development environment LANG language Specify language MEMMAP t ype Display memory map MODE mode Choose operating mode MSGDISABLE list Disable warning messages MSGFORMAT specification Set advisory message format NODEL Do not remove temporary files NOEXEC Do not execute compiler applications OBJDIR path Set object files directory OPT optimizations Control optimization OUTDIR path Set output directory OUTPUT path Set output formats PASS1 Produce HI TECH intermediate p code file and stop PRE Produce preprocessed source files and stop PROTO Generate function prototypes RAM ranges Adjust RAM ranges ROM ranges Adjust ROM ranges RUNTIME 0options Specify runtime options SCANDEP Scan for dependencies SERIAL specification Insert a hexadecimal code or serial number SETOPTION argument Set advanced options SETUP specification Setup the compiler SHROUD Shroud obfuscate generated p code files STRICT Use strict ANSI keywords SUMMARY type Summary options TIME Report compilation times VER Show version information WARN number Set warning threshold level WARNFORMAT specifica Set warning format tion 2 7 0 1 OPTION FORMATS All single letter options are identified by a leading dash character eg C Some single letter options specify an additional data field which follows the option name immediately and without any whitespace e g Ddebug
7. Note Initialized auto variables can impact on code performance particularly if the objects are large in size Consider using global or st atic objects instead Variables whose contents should be preserved over a reset or even power off should be qualified with the persistent qualifier see Section 3 4 7 1 Persistent Type Qualifier Such variables are linked at a different area of memory and are not altered by the runtime startup code in any way If this action is required the code executed will destroy the contents of the STATUS reg ister If the contents of this register particularly the TO and PD bits are required to determine the cause of reset you can choose to have a copy of this register taken so that it can later be examined See Section 3 11 1 3 STATUS Register Preservation for more information 3 11 1 2 CLEARING OBJECTS Those non auto objects which are not initialized must be cleared before execution of the program begins This task is also performed by the runtime startup code Uninitialized variables are those which are not auto objects and which are not assigned a value in their definition for example output in the following example Te OU Ue void main void Such uninitialized objects will only require space to be reserved in RAM where they will reside and be accessed during program execution runtime The psects used for storing these components are described in Section 3 10 1 Compiler ge
8. int i i 3 error 1 2 d i See Also Spraner L Return Value The printf and vprintf functions return the number of characters written to stdout a aaa El DS51865B page 214 2010 Microchip Technology Inc Library Functions PUTCHAR Synopsis include lt stdio h gt ine pu utehar ane c Description The putchar function calls putch to print one character to stdout and is defined IN stdio h Example include lt stdio h gt echar 53X M ace E e EA void main void char Cp cp Ni while x putchar x putchar n See Also putc getc freopen fclose Return Value The character passed as argument or EOF if an error occurred PUTS Synopsis e Een lt stdio h gt ine puts Const char C S Description The puts function writes the string s to the stdout stream appending a newline The null character terminating the string is not copied Example include lt stdio h gt void main void puts world 2010 Microchip Technology Inc DS51865B page 215 HI TECH C for PIC10 12 16 User s Guide QSORT See Also fputs gets freopen fclose Return Value EOF is returned on error zero otherwise Synopsis include lt stdlib h gt void qsort void base size_t nel size_t width int func const void const void Description The qsort function is an implementat
9. puts buf See Also fgets freopen puts Return Value lt returns its argument or NULL on end of file GET CAL DATA Synopsis include lt htc h gt double oer call data const unsigned char code_ptr Description This function returns the 32 bit floating point calibration data from the PIC MCU 14000 calibration space Only use this function to access KREF KBG VATHERM and KTC that is the 32 bit floating point parameters FOSC and TWDT can be accessed directly as they are bytes DS51865B page 198 2010 Microchip Technology Inc Library Functions GMTIME Example include lt htc h gt void main void double x unsigned char y j Get the s lops reference ratio SE x get_cal_data KREF Get the WDT time out y TWDT Return Value The value of the calibration parameter Note This function can only be used on the PIC14000 Synopsis include lt time h gt struct tm gmtime time_t t Description This function converts the time pointed to by t which is in seconds since 00 00 00 on Jan 1 1970 into a broken down time stored in a structure as defined in time h The structure is defined in the Data Types section Example include lt stdio h gt include lt time h gt void main void time_t clock struct tm tp time amp clock tp gmtime amp clock Printr s 2d ad Londonin tp tm years 900 See Also ct
10. 2010 Microchip Technology Inc INTGNMINY Ae EE 92 intermediate les 7 9 11 35 36 SET lei 14 interrupt FUNCTIONS cceceecceesceceesseeeeceeeeeesesnaeees 87 context retrieval ccceccssseeccseeeeeceeeeeesseaaeees 88 CONTEXT SAWING BEE 88 110 midrange processors cseeceeccseseeeeesseeeeeeees 87 MOVIN E 30 84 ESINGEN 87 interrupt service roueg 86 interrupt Vector eege 87 88 interrupt_level pragma directive cece 108 interrupts ale Te E 88 enabling EE 88 EELER 87 NEE eg eeh tee Ee SE 30 Eelere 133 JEE 133 isaiNunm TUNGO EE 200 P Wein El Lee esai tee watce ate cetaeal 200 SANV UNCION EE 201 ISCIGIETUINCHOM BE 200 islower FUNCTION cceccceeeceeceeceeceeeeeseeeeesaaeeeesaaees 200 Jet RTE Leide ME 201 J leie TAOS OC EE 92 K keyword e GE 73 Da O A A 69 DANK WEE 69 EE El ATE E EAE ee A E E AEAT 69 Dano EE 69 DANK EE 29 CONS sree Eeer 78 Juri d ie 87 PAN EE 69 DersiSlenl ee 69 95 keywords disabling non ANSI Ce 41 L constant SUTIN E 66 Biere 145 label Tie enn a T 120 labels IER 123 ABS TUNCHON Sez dscns wiedios sas aag ene Sate iotensn deta ncnnceans 202 language SUPDOM EE 19 ISX TCH Le WE 202 Ee TUG HERE 203 length of identifiers ccccccseseeecssseeeeceeeeeeeseneees 27 NID GME CION EE 15 26 96 LIBR ADDI ON EE 16 112 155 OVA EE 112 155 COMMANG E 157 command SE 156 error Messages coinein eee aes 157 leie HR ut 157 leie e 155 WI SAG
11. OO page boundaries and 129 Sa KEE 30 placing IN memon ss snssneneeesnnneennneeennnnn 128 145 reset VEC PSCC ere 92 placing with others csseeeeeeeseeeeeeseeeeeeeens 129 Ge reset WIAD Bn e EEN 92 Specifying address ranges s nnnnneneeeneenna 146 specifying addresses 142 145 TESEI G SE e RUNTIME suboption cccsccscessseceeseeseeseeseeseee 95 D s SCH 3 E E ae RETLW instruction a oa 77 p p retu valut S EE 85 assemble EE 125 roie operator 81 pure PSEC MT TAG EE 128 A EE RRE E 215 rouna function EC 217 RE runtime environment cccecececcccccecececececececeeaenens 39 2010 Microchip Technology Inc DS51865B page 361 HI TECH C for PIC10 12 16 User s Guide runtime startup code ccccceeeeeeeees 16 92 93 149 assembly Ietmg 29 preserving variables nnnnoannnaannnannnnnnnnnnne 69 variable initialization cccceccccceeeeeeeeeeseeeeeeeees 94 runtime startup module 39 S scale Valle mersis a aa 127 search path header EE 25 segment SEICCHON ccccseeceecssseeeeeeseeeceeeeeeeeseees 144 SOGIMCMI heen 144 serial numbere 40 171 embedding nnnnsnssennnnsrnnnnnnsnrnnrenesenrnnnenene 171 We re 120 130 SEH eich oxide ee 218 IES EE 49 ACCESSING IN assembly cecccsseeeeeeeeeseeeeees 101 accessing in inline assembhv 101 RE leet 88 shifting sign extension RE 345 short int types orient t a ea E 54 SIGNAT d
12. Printi Sain strien burrer gt printi si n butter Return Value The number of characters preceding the null terminator Synopsis include lt string h gt char strncat char s1 const char s2 size t n Description This function appends concatenates string s2 to the end of string s1 At most n char acters will be copied and the result will be null terminated si must point to a character array big enough to hold the resultant string DS51865B page 226 2010 Microchip Technology Inc Library Functions Example include lt string h gt include lt stdio h gt void main void char buffer 256 char 641 lt a2 Stropy burrer oF lane sl buffer S2 Yose TEN of laine strncat sl s2 D5 printf m gdn strlen buffer DEIET T en purren See Also strcpy stremp streat strlen Return Value The value of s1 is returned STRNCMP STRNICMP Synopsis include lt string h gt Mie Sericme Conse char Silly Gonse Char 625 Ga 4et t m int SEernwemp Cons Char 615 const Char s27 SIze t 1 Description The strncemp function compares its two null terminated string arguments up to a maximum of n characters and returns a signed integer to indicate whether s1 is less than equal to or greater than s2 The comparison is done with the standard collating sequence which is that of the ASCII character
13. The inline delay sequence _delay has been used but the number of instruction cycles requested is too large Use this routine multiple times to achieve the desired delay length include lt htc h gt void main void delay 0x400000 oops cannot delay by this number of cycles 1356 fixup overflow referencing 0x into byte at 0x 0x gt Ox 0x Linker See also message 477 This form of the message precalculates the address of the offending instruction taking into account the delta value of the psect which contains the instruction 1357 fixup overflow storing 0x in byte at 0x 0x gt 0x 0x Linker See also message 477 This form of the message precalculates the address of the offending instruction taking into account the delta value of the psect which contains the instruction 1358 no space for temps Code Generator The code generator was unable to find a space large enough to hold the temporary variables scratch variables for this program 1359 no space for parameters Code Generator The code generator was unable to find a space large enough to hold the parameter variables for a particular function 1360 no space for auto param Code Generator The code generator was unable to find a space large enough to hold the auto variables for a particular function Some parameters passed in registers may need to be allo cated space in this auto area as w
14. conflicts with Driver The compiler has encountered more than one source file with the same basename This can only be the case if the files are contained in different directories As the com piler and IDEs based the names of intermediate files on the basenames of source files and intermediate files are always stored in the same location this situation is illegal Ensure the bsaename of all source files are unique 1297 option not available in Lite mode Driver Some options are not available when the compiler operates in Lite mode The options disabled are typically related to how the compiler is executed e g GETOPTION and SETOPTION and do not control compiler features related to code generation 1298 use of outside macros is illegal Assembler some assembler directives e g EXITM can only be used inside macro definitions 2010 Microchip Technology Inc DS51865B page 333 HI TECH C for PIC10 12 16 User s Guide IERT 1299 non standard modifier use instead Parser A printf placeholder modifier has been used which is non standard Use the indicated modifier instead For example the standard hh modifier should be used in preference to b to indicate that the value should be printed as a char type 1300 maximum number of program classes reached List may be truncated Cromwell Cromwell is passed a list of class names on the command line If the number of number of class names passe
15. generator J debug file N cromwell hexmate hex linker 2S objtohex hex file absolute object file relocatable j S object object files libraries Table 2 2 lists the compiler applications The names shown are the names of the exe cutables which can be found in the bin directory under the compiler s installation directory TABLE 2 2 COMPILER APPLICATION NAMES Description PICC Command line driver the interface to the compiler Cicer Text file formatter CPP The C preprocessor Pl C code parser CGPIC Code generator ASPIC Assembler HLINK Linker OBJTOHEX Conversion utility to create HEX files CROMWELL Debug file converter OBJTOHEX Conversion utility to create HEX files HEXMATE HEX file utility LIBR Librarian DUMP Object file viewer CREF Cross reference utility DS51865B page 10 2010 Microchip Technology Inc PICC Command line Driver For example C source files c files are first passed to the C preprocessor CPP The output of this application are pre files These files are then passed to the parser appli cation P1 which produces a p code file output with extension p1 The applications are executed in the order specified and temporary files are used to pass the output of one application to the next The compiler can accept more than just C source files Table 2 1 lists all the possible input file types and these files can be seen in this diagram on the top and
16. ignored Parser Some qualifiers are valid but may not be implemented on some compilers or target devices This warning indicates that the qualifier will be ignored 1325 no such CP register select Code Generator A variable has been qualifier as co0 but no corresponding co processor register exists at the address specified with the variable cpO volatile unsigned int mycpvar 0x7000 ZZ COPS Ae did your mean 0x700 Cryss 47 cpO volatile unsigned int mycpvar __REGADDR 7 0 1326 qualified variable missing address Code Generator A variable has been qualifier as cpO but the co processor register address was not specified cp0 volatile unsigned int mycpvar oops what address TP a WW 1327 interrupt function redefined by Code Generator An interrupt function has been written that is linked to a vector location that already has an interrupt function lined to it vord Interrupt Cimer asa vold TIMER LVOTR D keen void interrupt timer2_isr void TIMER_1_VCTR F7 EEN er did you mean that to be TIMER_2_ VCTR 1328 coproccessor registers cannot be accessed from code Code Generator Code in the indicated instruction set has illegally attempted to access the coprocessor registers Ensure the correct instruction set is used to encode the enclosing function 1329 can only modify RAM type interrupt vectors Code Generator The SETVECTOR macro has been used
17. An integer has been assigned to or otherwise converted to a pointer type This will usu ally mean you have used the wrong variable but if this is genuinely what you want to do use a typecast to inform the compiler that you want the conversion and the warning will be suppressed This may also mean you have forgotten the address operator e g InG cee Ine siz ip i ZZ Oops did you mean ip St If you do intend to use an expression like this then indicate that this is so by a cast IO Ine Sii 2010 Microchip Technology Inc DS51865B page 271 HI TECH C for PIC10 12 16 User s Guide 358 illegal conversion of pointer to integer Parser A pointer has been assigned to or otherwise converted to a integral type This will usu ally mean you have used the wrong variable but if this is genuinely what you want to do use a typecast to inform the compiler that you want the conversion and the warning will be suppressed This may also mean you have forgotten the dereference operator e g rnt apy int i i ip 7 4 oops did you mean a ip 7 7 If you do intend to use an expression like this then indicate that this is so by a cast ne e Ee 359 illegal conversion between pointer types Parser A pointer of one type i e pointing to a particular kind of object has been converted into a pointer of a different type This will usually mean you have used the wrong variable but if this is genuinely
18. If the qualifiers are encountered an error will be immediately generated For example the option ADDRQUAL request 2 7 19 CHECKSUM Calculate a checksum The CHECKSUM option indicates that the compiler should try to honor the bankx and near qualifiers if present in C source code but if they cannot be met e g if near is used and there is no common memory or a bank x qualifier is used and the indicated bank is full then they are silently ignored This option will perform a checksum over the address range specified and store the result at the destination address specified Additional specifications can be appended as a comma separated list to this option Such specifications are 2010 Microchip Technology Inc DS51865B page 29 HI TECH C for PIC10 12 16 User s Guide width n selects the width of the checksum result in bytes A negative width will store the result in little endian byte order Result widths from one to four bytes are permitted offset nnnn specifies an initial value or offset to be added to this checksum algorithm n select one of the checksum algorithms implemented in HEXMATE The selectable algorithms are described in Table 6 9 code nn is a hexadecimal code that will trail each byte in the checksum result This can allow each byte of the checksum result to be embedded within an instruction The start endand destination attributes can be entered as word addresses as this is the nativ
19. Improper usage of the command line linker If you are invoking the linker directly then please refer to Section Section 5 2 Operation for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical sup port with details 398 output file can t be also an input file Linker The linker has detected an attempt to write its output file over one of its input files This cannot be done because it needs to simultaneously read and write input and output files DS51865B page 276 2010 Microchip Technology Inc 400 bad object code format Linker This is an internal compiler error The object code format of an object file is invalid Ensure it is a valid HI TECH object file Contact HI TECH Software technical support with details 402 bad argument to F Objtohex The F option for ob jt ohex has been supplied an invalid argument If you are invok ing this command line tool directly then please refer to Section 6 3 Objtohex for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical support with details 403 bad E option Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 404 bad maximum length value to lt digits gt Objtohex The first value to the OBJTOHEX n m HEX length rounding option is invalid 405 bad record size rounding value t
20. The SUBTITLE control defines a subtitle to appear at the top of every listing page but under the title The string should be enclosed in single or double quotes See also the TITLE control in Section 4 3 10 12 TITLE 4 3 10 12 TITLE This control keyword defines a title to appear at the top of every listing page The string should be enclosed in single or double quotes See also the SUBTITLE control in Section 4 3 10 11 SUBTITLE 4 3 10 13 XREF The XREF control is equivalent to the driver command line option CR see Section 2 7 23 CR Generate Cross Reference Listing It causes the assembler to produce a raw cross reference file The utility CREF should be used to actually generate the formatted cross reference listing 4 4 ASSEMBLY LIST FILES The assembler will produce an assembly list file if instructed The PICC driver option ASMLIST is typically used to request generation of such a file see Section 2 7 17 ASMLIST Generate Assembler List Files The assembly list file shows the assembly output produced by the compiler for both C and assembly source code If the assembler optimizers are enabled the assembly output may be different to assembly source code and so is still useful for assembly programming The list file is in a human readable form and cannot take any further part in the compi lation sequence It differs from an assembly output file in that it contains address and op code data In
21. nodes marking the top of a call tree and which are called spontaneously e The functions that the linker deemed were called or may have been called during program execution e The program s hierarchy of function calls e The size of the auto and parameter areas within each function s APB e The offset of each function s APB within the compiled stack e The estimated call tree depth These features are discussed below A typical call graph may look that shown inFigure 4 2 FIGURE 4 2 CALL GRAPH FORM Call graph Base Space Used Autos Args Refs Density _main 10 24 0 00 4 COMMO 6 16 BANK 4 8 BANKO BANKO COMMO 8 BANKO gt rv2 BANKO Estimated maximum call depth 2 The graph starts with the function main Note that the function name will always be shown in the assembly form thus the function main appears as the symbol main main Is always a root of a call tree Interrupt functions will form separate trees All the functions that main calls or may call are shown below These have been grouped in the orange box in the figure A function s inclusion into the call graph does not imply the function was actually called but there is a possibility that the function was called For example code such as int test int a if a foo 3 else bar will list foo and bar under test as either may be called If a is always true then the function bar will never be c
22. 159 Cross relerence Wetmgs 31 excluding header symbols A 160 excluding evmbols A 160 161 MO ale EH 160 ai Weit t ie ur 160 page leng 160 page WIG DEE 160 cross referencing ADDIICANON BEE 159 GIS A DINAG HE 137 SAD O nerean ERN 137 Ee DSCC eene 74 93 ENEE eeh EE 188 D DABS ee 131 Ga GIN CIORY sor ee AE ed 18 data MOMOLY c ccccccccceeeceeceeeeeeeeeeeeeeees 70 128 129 data pointers a nnnnonninnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnneni 61 data PSEC EE 71 93 109 e EE 54 58 data LY EE 54 ISS MDV sau ioe ost anise e mance E tenes 122 MOA DOM E 56 Ree 130 debug information ccccccceceeeeeceseseeeceeeeeeeeseeeeees 25 assembler care 118 alle HE 117 debugger file formats cccccccccceeeeeeesseeeeeeeeeeees 162 Sie lele GC 31 162 al ge e EE 125 default SUDOPTION cccccceeeeeseeeeeeeeeeeeeeseeeeseeeeeeeeas 23 Gelee FOI eeschte 174 delta PSECT Tag 98 128 143 dependencies sssennnnnenennnensserrnrrenrrrnrrenrsrnrenen 40 dependency AT 40 destination operandS cccccceceseeeeeeeeeseeseeeeeeseneas 120 device Memory SPACES 0cccccccessseeeceeseeeeeeeeeesaaees 70 device selechon 30 device SUDDON E 47 device_id_read function ccceeeeeeeeeeeeeeeeeeeeees 189 DEMAG O sei tenon te eerteet caine eee 190 al Leister e TEE 17 directives GEMET arosinda a EE Ee 125 directives see assembler drechves 125 disabling interrupts cccceeeeee
23. 4 2 20 VER Print Version Number This option printed information relating to the version and build of the assembler The assembler will terminate after processing this option even if other options and files are present on the command line HI TECH C ASSEMBLY LANGUAGE The source language accepted by the macro assembler ASPIC is described below All opcode mnemonics and operand syntax are specific to the PIC10 PIC12 PIC14000 PIC16 and PIC17 devices include the enhanced mid range devices Although the PIC17 family instruction set is supported at the assembler level the code generator cannot produce code for these devices so no C projects can target these devices Additional mnemonics and assembler directives are documented in this section 4 3 1 Assembler Format Deviations The HI TECH PICC assembler uses a slightly modified form of assembly language to that specified by the Microchip data sheets 2010 Microchip Technology Inc DS51865B page 119 HI TECH C for PIC10 12 16 User s Guide 4 3 1 1 DESTINATION LOCATION Certain PIC instructions use the operands 0 or 1 to specify the destination for the result of that operation ASPIC uses the more readable operands w and to specify the destination register The w register is selected as the destination when using the w operand and the file register is selected when using the operand or if no destination operand is spec
24. 4 4 1 General Format The format of the main listing has the form as shown in Section Figure 4 1 General form of assembly listing file The line numbers purely relate to the assembly list file and are not associated with the lines numbers in the C or assembly source files Any assembly that begins with a semi colon indicates it is a comment added by the code generator Such comments contain either the original source code which corresponds to the generated assembly or is a comment inserted by the code generator to explain some action taken Before the output for each function there is detailed information regarding that function summarized by the code generator This information relates to register usage local variable information functions called and the calling function FIGURE 4 1 GENERAL FORM OF ASSEMBLY LISTING FILE sp2_inpADC c 120 _ADC_start p Regs used in _ADC_start regQ reg3 d line number instruction operands gt sp2_inpADC c 121 chan amp 0x07 address Oe sro 119 void ADC_startCunsigned char chan instruction operands instruction operands op code _inpADC c 128 instruction source comment function _ADC_start ends assembly 4 4 2 Pointer Reference Graph Other important information contained in the assembly list file is the pointer reference graph look for pointer list with targets in the list file This is a list of each and every pointer contained in the program and
25. 6 4 8 EDF message file Set Message File Path This option is mainly used by the command line driver PICC to specify the path of the message description file The default file is located in the dat directory in the compiler s installation directory See Section 2 6 Compiler Messages for full information about the compiler s messaging system 6 4 9 EMAX number Specify Maximum Number of Errors This option is mainly used by the command line driver PICC to specify the maximum number of errors that can be encountered before CREF terminates The default number is 10 errors This option is applied if compiling using PICC the command line driver and the ERRORS driver option see Section 2 7 28 ERRORS Maximum Number of Errors See Section 2 6 Compiler Messages for full information about the compiler s messaging system 6 4 10 MSGDISABLE message numbers Disable Messages This option is mainly used by the command line driver PICC to disable particular message numbers It takes a comma separate list of message numbers that will be disabled during compilation This option is applied if compiling using PICC the command line driver and the MSGDISABLE driver option see Section 2 7 37 MSGDISABLE Disable Warn ing Messages See Section 2 6 Compiler Messages for full information about the compiler s messaging system 6 4 11 VER Print Version Number This option prints information
26. 908 exit status Driver One of the subcomponents being executed encountered a problem and returned an error code Other messages should have been reported by the subcomponent to explain the problem that was encountered 913 option may cause compiler errors in some standard header files Driver Using this option will invalidate some of the qualifiers used in the standard header files resulting in errors This issue and its solution are detailed in the section of this manual that specifically discusses this option 2010 Microchip Technology Inc DS51865B page 315 HI TECH C for PIC10 12 16 User s Guide 915 no room for arguments Preprocessor Parser Code Generator Linker Objtohex The code generator could not allocate any more memory 917 argument too long Preprocessor Parser This is an internal compiler error Contact HI TECH Software technical support with details 918 no match Preprocessor Parser This is an internal compiler error Contact HI TECH Software technical support with details 919 in chipinfo file at line Driver The specified parameter in the chip configuration file is illegal 920 empty chipinfo file Driver Assembler The chip configuration file was able to be opened but it was empty Try re installing the compiler 922 chip not present in chipinfo file Driver The chip selected does not appear in the compiler s chip configuration file You ma
27. BECHER 2010 Microchip Technology Inc DS51865B page 189 HI TECH C for PIC10 12 16 User s Guide DI El Synopsis Finc lUude lt htc h gt void ei void void di void Description The di and ei routines disable and re enable interrupts respectively These are implemented as macros The example shows the use of ei and di around access to a long variable that is modified during an interrupt If this was not done it would be possible to return an incorrect value if the interrupt occurred between accesses to successive words of the count value The ei macro should never be called in an interrupt function and there is no need to call ai in an interrupt function Example include lt htc h gt Long count void interrupt Crok void count t long getticks void long val Disable interrupts around access to Count Lo ensure consistency 7 Gi val count el return val DIV Synopsis include lt stdlib h gt div_t div int numer int demon Description The div function computes the quotient and remainder of the numerator divided by the denominator DS51865B page 190 2010 Microchip Technology Inc Library Functions Example include lt stdlib h gt include lt stdio h gt void main void div_t x x div 12345 66 printf d remainder d n x quot x rem See Also udiv E Lary kh uldir v Return Value Returns the quotient
28. Const VoL e ker 1nt val SIze E rengti Description The memchr function is similar to st rchr except that instead of searching null ter minated strings it Searches a block of memory specified by length for a particular byte Its arguments are a to the memory to be searched the value of the byte to be searched for and the length of the block A to the first occurrence of that byte in the block is returned Example include lt string h gt include lt stdio h gt unsigned int aryl 1z Sy U60799 OxZS void main void char cp cp memchr ary Ox89 sizeof ary it CLC EECHER Founda else printi at offset su n ep echar ary s See Also Serene 2010 Microchip Technology Inc DS51865B page 207 HI TECH C for PIC10 12 16 User s Guide MEMCMP Return Value A to the first byte matching the argument if one exists NULL otherwise Synopsis include lt string h gt Lot mencono CONS void sl sonst vold SZ Size E 1 Description The memcmp function compares two blocks of memory of length n and returns a signed value similar to st rncmp Unlike strncmp the comparison does not stop on a null character Example include lt stdio h gt include lt string h gt void main void ine burto ly COn Lol 33 l buf buf cow cow buf 1 4 1 5 3 3 1 memcmp buf cow 3 sizeof int qe ay lt
29. Contact HI TECH Software technical support with details 1096 type should be unqualified Code Generator This is an internal compiler error Contact HI TECH Software technical support with details WW 1097 unknown type string Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1098 conflicting declarations for variable Parser Code Generator Differing type information has been detected in the declarations for a variable or between a declaration and the definition of a variable e g extern long int test int test d er Oops whieh is verbe int or one int 2 57 1104 unqualified error Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1118 bad string in getexpr J Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 325 HI TECH C for PIC10 12 16 User s Guide 1119 bad string in getexpr LRN Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1121 expression error Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1137 match error Code Generator This is an internal compiler error Contact HI TECH Software technical support with
30. HI TECH C also searches assembly derived object files for symbols which are undefined These will be symbols that are used but not defined in assembly code The code generator is informed of these symbols and if they are encountered in the C code the variable is automatically marked as being volatile This action has the same effect as qualifying the variable volatile in the source code see Section 3 4 6 2 Volatile Type Qualifier Variables qualified as volatile will never be removed by the code generator even if they appear to be unused throughout the program For example if a C program defines a global variable as follows int input but this variable is only ever used in assembly code The assembly module s can simply declare this symbol using the GLOBAL assembler directive and then use it GLOBAL _input _raster PSECT text local class CODE delta 2 _raster MOVE _input w The compiler knows of the mapping between the C symbol input and the corre sponding assembly symbol _input see Section 3 13 3 1 Equivalent Assembly Symbols In this instance the C variable input will not be removed and be treated as if it was qualified volatile 3 14 OPTIMIZATIONS The optimizations in HI TECH C compiler can broadly be broadly grouped into C level optimizations performed on the source code before conversion into assem bly and Assembly level optimizations performed on the assembly code generated by the compiler Of th
31. If the width is left unspecified the result will be 2 bytes wide and stored in little endian byte order e Code is a hexadecimal code that will trail each byte in the checksum result This can allow each byte of the checksum result to be embedded within an instruction e Algorithm is an integer to select which HEXMATE algorithm to use to calculate the checksum result A list of selectable algorithms are given in Table 6 9 If unspecified the default checksum algorithm used is 8 bit addition 1 A typical example of the use of the checksum option is CK 0 1FFF 2FFE 2100w2 2010 Microchip Technology Inc DS51865B page 167 HI TECH C for PIC10 12 16 User s Guide This will calculate a checksum over the range 0 1FFFh and program the checksum result at address 2FFEh The checksum value will be offset by 2100h The result will be two bytes wide TABLE 6 9 HEXMATE CHECKSUM ALGORITHM SELECTION O Selector Aerm description 2 ooo aodion 0 6 it vals fom ntl value BY Adtion of 24 it vals fom nal value eooo ooi thers checksum 16 bi 6 6 1 6 FILL The FILL option is used for filling unused memory locations with a known value The usage of this option is FILL Code Start End data where e Code Is the opcode that will be assigned to unused locations in memory Multi byte codes should be entered in little endian order e Start and End specify the address range over which this fill will apply e The data fl
32. The exact behavior of the HI TECH C compiler is detailed throughout this manual and is fully summarized in Appendix A Implementation Defined Behavior 3 3 PROCESSOR RELATED FEATURES HI TECH C has several features which relate directly to the PIC10 12 16 architectures and instruction sets These detailed in the following sections 3 3 1 Device Support HI TECH C Compiler for PIC10 12 16 MCUs aims to support all Baseline and Mid Range devices However new devices in these families are frequently released There are several ways you can check if the compiler you are using supports a partic ular device From MPLAB IDE open the Build Options dialog Select the Driver tab In the Available Drivers field select the compiler you wish to use A list of all devices supported by that compiler will be shown in the Selected Driver Information and Supported Device area towards the center of the dialog See Figure 3 1 for the relevant fields in this dialog 2010 Microchip Technology Inc DS51865B page 47 HI TECH C for PIC10 12 16 User s Guide FIGURE 3 1 SHOWING SUPPORTED DEVICES Build Options For Project petit _16lf mcp Directories Custom Build Trace Driver Compiler Linker Global Available drivers Compiler for PIC107 12 16 MCUs PRO Model 3 80 Compiler for PIC10712716 MCUs PRO Model VO la Compiler for PIC10712716 MCUs PRO Model V9 70 Compiler for PIC10712716 MCUs PRO Model VO OPL Move down
33. The ato1 function scans the character string passed to it skipping leading blanks It then converts an ASCII representation of a decimal number to a long integer DS51865B page 182 2010 Microchip Technology Inc Library Functions BSEARCH Example include lt stdlib h gt include lt stdio h gt void main void char buf 80 Longa gets buf Is Oe SEET sss Converte to e beet bur 137 See Also atoi atof Return Value A long integer If no number is found in the string O will be returned Synopsis include lt stdlib h gt void bsearch const void key void base size_t n_memb gize t SiLZe int tceompar COnSse VoO1d GCOnst void SEI Description The bsearch function searches a sorted array for an element matching a particular key It uses a binary search algorithm calling the function pointed to by compar to compare elements in the array Example include lt stdlib h gt include lt stdio h gt include lt string h gt struct value char name 40 int value values 100 int val cmp Icons t void EE const vord p2 return strcmp const struct value pl gt name const struct value p2 gt name void main void char inbuf 80 int i U a e a a u O U O a au au aul 88 2010 Microchip Technology Inc DS51865B page 183 HI TECH C for PIC10 12 16 User s Guide CEIL struct value vp i 0 while gets
34. The option has no effect for all other val ues This option also controls the length of identifiers used by the preprocessor such as macro names The default length is also 31 and can be adjusted to a maximum of 255 see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 10 O Specify Output File This option allows the basename of the output file s to be specified If no o option is given the base name of output file s will be the same as the project name see Section 2 3 The Compilation Sequence The files whose names are affected by this option are those files that are not directly associated with any particular source file such as the HEX file MAP file and SYM file The 0 option can also change the directory in which the output file is located by includ ing the required path before the filename This will then also specify the output directory for any files produced by the linker or subsequently run applications Any relative paths specified are with respect to the current working directory For example if the option Oc project output first is used the MAP and HEX file etc will use the base name first and will be placed in the directory EE EES Any extension supplied with the filename will be ignored The options that specify MAP file creation M see Section 2 7 8 M Generate Map File and SYM file creation G see Section 2 7 4 G Generate S
35. Use of this option prevents the linker applying fixups to the assembly list file produced by the assembler This option is normally using by the command line driver PICC when performing pre link stages but is omitted when performing the final link step so that the list file shows the final absolute addresses If you are attempting to resolve fixup errors this option should be disabled so as to fixup the assembly list file and allow absolute addresses to be calculated for this file If the compiler driver detects the presence of a preprocessor macro __ DEBUG which is equated to 1 then this option will be disabled when building This macro is set when choosing a Debug build in MPLAB IDE so always have this selected if you encounter such errors 5 2 31 VER Print Version Number This option printed information relating to the version and build of the linker The linker will terminate after processing this option even if other options and files are present on the command line 5 3 RELOCATION AND PSECTS This section looks at the input files that the linker has to work with The linker can read both relocatable object files and object file libraries 1ib exten sion The library files are a collection of object files packaged into a single unit so essentially we only need consider the format of object files Each object file consists of a number of records Each record has a type that indicates what sort of information it holds Some r
36. char gtr T 18 de Staion H while str NULL PrINCI ov Sir cb str strrchr str 1 e See Also SE EE EE E remo e EE EEN Ja SCCA Return Value A to the character or NULL if none is found Synopsis include lt string h gt SIze t SGrspm Const char sly const char i624 Description The strspn function returns the length of the initial segment of the string pointed to by si which consists entirely of characters from the string pointed to by s2 Example include lt stdio h gt include lt string h gt void main void Printi Tax SErson is a string de EE E e strspn is a Serine AE See Also EE Return Value The length of the segment DS51865B page 230 2010 Microchip Technology Inc Library Functions STRSTR STRISTR STRTOD Synopsis include lt string h gt char strstr const char s1 const char s2 char stristr const char s1 const char s2 Description The strstr function locates the first occurrence of the sequence of characters in the string pointed to by s2 in the string pointed to by s1 The stristr routine is the case insensitive version of this function Example include lt stdio h gt include lt string h gt void main void ENEE CANS strstr IS et ing TEs Return Value to the located string or a null if the string was not found Synopsis include lt stdlib h gt double strtok
37. const char cp const char inputData 1000 0x900 cp amp inputData ce is incremented over inputData and used to read values there In this case the compiler can determine the size of the target and the memory space The array size and type indicates the size of the pointer target the const qualifier on the object not the pointer indicates the target is located in program memory space Note that the const array does not need initial values to be specified in this instance see Section 3 4 6 1 Const Type Qualifier and can reside over the top of other objects at these addresses If the pointer has to access objects in data memory you need to define a different object to act as a dummy target For example if the checksum was to be calculated over 10 bytes starting at address 0x90 in data memory the following code could be used const char cp Char inputData 1l0 0x907 cp amp inputData cp is incremented over inputData and used to read values there User defined absolute objects will not be cleared by the runtime startup code and can be placed over the top of other absolute variables Take care when comparing subtracting pointers For example 1 COs El take appropriate action DS51865B page 64 2010 Microchip Technology Inc C Language Features The ANSI C standard only allows pointer comparisons when the two pointer targets are the same object The address may extend to one element past th
38. const struct 4 int number IAE VEEE record 0x55 amp i ks In this case the entire structure will be placed into the program space and each mem ber will be read only Remember that all members are usually initialized if a structure is const as they cannot be initialized at runtime If the members of the structure were individually qualified const but the structure was not then the structure would be positioned into RAM but each member would be read only Compare the following structure with the above struct const int number int Const ptr record 0x55 amp 1i 3 4 3 2 BIT FIELDS IN STRUCTURES HI TECH C Compiler for PIC10 12 16 MCUs fully supports bit fields in structures Bit fields are always allocated within 8 bit words even though it is usual to use the type unsigned int in the definition The first bit defined will be the Least Significant bit of the word in which it will be stored When a bit field is declared it is allocated within the current 8 bit unit if it will fit other wise a new byte is allocated within the structure Bit fields can never cross the bound ary between 8 bit allocation units For example the declaration struct unsigned Oog ly unsigned dummy 6 unsigned Hisi ay foo will produce a structure occupying 1 byte If foo was ultimately linked at address 10H the field 10 will be bit O of address 10H hi will be bit 7 of address 10H The Least Sig nificant bit of dumm
39. details 1157 W register must be W9 Assembler The working register required here has to be W9 but an other working register was selected 1159 W register must be W11 Assembler The working register required here has to be W11 but an other working register was selected 1178 the option has been removed and has no effect Driver This option no longer exists in this version of the compiler and has been ignored Use the compiler s he p option or refer to the manual to find a replacement option 1179 interrupt level for function may not exceed Code Generator The interrupt level for the function specified is too high Each interrupt function is assigned a unique interrupt level This level is considered when analyzing the call graph and reentrantly called functions If using the interrupt_level pragma check the value specified 1180 directory does not exist Driver The directory specified in the setup option does not exist Create the directory and try again 1182 near variables must be global or static Code Generator A variable qualified as near must also be qualified with static or made global An auto variable cannot be qualified as near 1183 invalid version number Activation During activation no matching version number was found on the HI TECH activation server database for the serial number specified 1184 activation limit reached Activation The number of activations of the se
40. in two volatile qualititers 7y volatile vint very_vol 259 can t be qualified both far and near Parser lt is illegal to qualify a type as both far and near e g far near int spooky oops choose far or near not both 260 undefined enum tag Parser This enum tag has not been defined e g enum WHAT what a definition for WHAT was never seen WW 261 struct union member redefined Parser This name of this member of the struct or union has already been used in this struct or union GO SELUCE d inta inte ek intar J Oops different name 1s reowired here k Aput WW 262 struct union redefined Parser A structure or union has been defined more than once e g struct int a ms struct Int a ms was this meant to be the same name as above 263 members can t be functions Parser A member of a structure or a union may not be a function It may be a pointer to a func tion e g struct int a ine getint should bs a p interi int eget rnc 47 object 264 bad bitfield type Parser A bitfield may only have a type of int signed or unsigned e g struct FREG char b0 1 IA Eeer Must be part Of an int TOt Ohar char SE char le Treg DS51865B page 260 2010 Microchip Technology Inc 265 integer constant expected Parser A colon appearing after a member name in a structure declaration indicates that the membe
41. memory a byte is reserved in all RAM banks for the storage location for w register Other registers to be saved are done so in the interrupt function s auto area and thus look like ordinary auto variables 3 9 3 2 CONTEXT RESTORATION Any objects saved by software are automatically restored by software before the inter rupt function returns The order of restoration is the reverse to that used when context is saved 3 9 4 Enabling Interrupts Two macros are available once you have included lt htc h gt which control the mask ing of all available interrupts These macros are ei which enable or unmask all interrupts and di which disable or mask all interrupts 1 The BTEMP register is a memory location allocated by the compiler but which is treated like a register for code generation purposes It is not used by all devices DS51865B page 88 2010 Microchip Technology Inc C Language Features On all Mid Range PIC devices they affect the GIE bit in the INTCON register These macros should be used once the appropriate interrupt enable bits for the interrupts that are required in a program have been enabled For example ADIE 1 A D interrupts will be used PEIE 1 all peripheral interrupts are enabled ei enable all interrupts SE disable all interrupts Note Never use this macro to re enable interrupts inside the interrupt function itself Interrupts are automatically re enabled
42. no floating point placeholders are required and omit these from being included in the printf function output As the arguments after the format string are non prototyped parameters their type must match that of the placeholders No aspect of this operation is user controllable other than by adjusting the calls to printf however the actual printf code used by a program can be observed If compiling a program using print f the driver will leave behind the pre processed version of doprnt c This module called doprnt pre in your working directory will show the C code that will actually be contained in the printf routine As this code has been pre processed indentation and comments will have been stripped out as part of the normal actions taken by the C pre processor 3 13 MIXING C AND ASSEMBLY CODE Assembly language code can be mixed with C code using two different techniques writing assembly code and placing it into a separate assembler module or including it as in line assembly in a C module For the latter there are two formats in which this can be done described below Note The more assembly code a project contains the more difficult and time con suming will be its maintenance As the project is developed the compiler may work in different ways as some optimizations look at the entire pro gram The assembly code is more likely to fail if the compiler is updated due to differences in the way the updated compiler m
43. placed into an assembly file and added to your project The GLOBAL and SIGNAT direc tives do not generator code and hence do not need to be inside the mytext psect although you can place them there if you prefer The BANKSEL directive and BANKMASK macro have been used to ensure that the correct bank was selected and that all addresses are masked to the appropriate size include lt aspic h gt GLOBAL _add make _add globally accessible SIGNAT _add 4217 tell the linker how it should be called everything following will be placed into the mytext psect psect mytext local class CODE delta 2 S our routine to add to ints and return the result _ add W is loaded by the calling function BANKSEL PORTB select the bank of this object ADDWF BANKMASK PORTB w add parameter to port the result is already in the required location W so we can gt just return immediately RETURN To compile this the assembly file must be preprocessed as we have used the C pre processor include directive See Section 2 7 11 P Preprocess Assembly Files To call an assembly routine from C code a declaration for the routine must be provided This ensures that the compiler knows how to encode the function call in terms of parameters and return values Here is a C code snippet that declares the operation of the assembler routine then calls the routine declare the assembly routine so it can be correctly called extern unsigned c
44. previous operator is Preprocessor A colon operator has been encountered in a i expression that does not match up with a corresponding operator e g 1 XXX 2 YYY did you mean FIEL COND T XXX YYY ey DS51865B page 244 2010 Microchip Technology Inc 124 illegal character in if Preprocessor There is a character in a i expression that has no business being there Valid char acters are the letters digits and those comprising the acceptable operators e g if YYY what are these characters doing here int m endif 125 illegal character decimal in if Preprocessor There is a non printable character in a i expression that has no business being there Valid characters are the letters digits and those comprising the acceptable oper ators e g LE S YYY er what is this control characters doing here SS int m endif 126 strings can t be used in if Preprocessor The preprocessor does not allow the use of strings in i expressions e g no string operations allowed by the preprocessor if MESSAGE gt hello define DEBUG endif 127 bad syntax for defined in el if Preprocessor The defined pseudo function in a preprocessor expression requires its argument to be a single name The name must start with a letter and should be enclosed in paren theses e g oops defined expects a name not an expression if defined a amp b inp
45. return 35 the function F4 will always appear in the call graph even though it is conditionally executed in the actual source code Thus the call graph indicates all functions that might be called In the diagram there is also an interrupt function isr and it too has a separate graph generated The term main line code is often used and refers to any code that is executed as a result of the main function being executed In the above figure F1 F2 F3 and F4 are only ever called by main line code The term interrupt code refers to any code that is executed as a result of an interrupt being generated in the above figure F5 and F6 are called by interrupt code Figure 3 3 graphically shows an example of how the compiled stack is formed 2010 Microchip Technology Inc DS51865B page 75 HI TECH C for PIC10 12 16 User s Guide FIGURE 3 3 FORMATION OF THE COMPILED STACK g o magn of auto parameter block APB for function F2 Analysis of call graph main F1 F4 F2 F3 compiled stack F5 F6 Overlap of non concurrently active APBs to form compiled stack Each function in the program is allocated a block of memory for its parameter auto and temporary variables Each block is referred to as an auto parameter block APB The figure shows the APB being formed for function F2 which has two parameters a and b and one auto variable c The parameters to the function a
46. see Section 5 2 18 Pspec The ORG directive is not commonly required in programs The argument to ORG must be either an absolute value or a value referencing the cur rent psect In either case the current location counter is set to the value determined by the argument It is not possible to move the location counter backward For example ORG 100h will move the location counter to the beginning of the current psect plus 100h The actual location will not be known until link time In order to use the ORG directive to set the location counter to an absolute value the directive must be used from within an absolute overlaid psect For example PSEC e E abs ovrid ORG 50h this is guaranteed to reside at address 50h 2010 Microchip Technology Inc DS51865B page 129 HI TECH C for PIC10 12 16 User s Guide 4 3 9 5 EQU This pseudo op defines a symbol and equates its value to an expression For example thomas EQU 123h The identifier thomas will be given the value 123h EQU is legal only when the symbol has not previously been defined See also Section 4 3 9 6 SET which allows for redefinition of values This directive performs a similar function to the preprocessor s define directive see Section 3 15 1 Preprocessor Directives 4 3 9 6 GEI This pseudo op is equivalent to EQU Section 4 3 9 5 EQU except that allows a symbol to be re defined without error For example thomas SET Oh Thi
47. startup module The code generator handles initialization of the C environment such as clearing uninitialized C variables and copying initialized C variables This code is output along with the rest of the C program The runtime startup code is generated automatically every time you build a project The file created by the driver may be deleted after compilation and this operation can be controlled with the keep suboption to the RUNTIME option The default operation of the driver is to keep the start up module however if using MPLAB IDE to build it uses options that will delete the file unless you indicate otherwise in the Build Options dialog If the startup module is kept it will be called startup as and will be located in the current working directory If you are using an IDE to perform the compilation the destination directory may be dictated by the IDE itself Generation of the runtime startup code is an automatic process which does not require any user interaction however some aspects of the runtime code can be controlled if required using the RUNTIME option Section 2 7 50 RUNTIME Specify Run time Environment describes the use of this option See Section 3 11 1 Runtime Startup Code which describes the functional aspects of the code contained in this module and its effect on program operation The runtime startup code is executed before main but If you require any special ini tialization to be performed immed
48. type Specify Output File Type Interrupt options Not applicable Summary Options These checkboxes control which summaries are printed after compilation See Section 2 7 56 SUMMARY Select Memory Summary DS51865B page 45 HI TECH C for PIC10 12 16 User s Guide Output Type 2 8 4 Global Tab The options in this dialog control aspects of compilation that are applicable throughout code generation and link steps the second stage of compilation See Figure 2 8 in conjunction with the following command line option equivalents FIGURE 2 8 THE GLOBAL TAB i Build Options For Project astest mcp Directories Custom Build Trace Driver Compiler Linker Global OG and data Memory model Code pointer size A bit gt Double float bit External memory Wwordvarite DS Ory Instruction set e H Use strict call O gt HAM ranges FROM ranges M Additional command line options link timne only O 1 Memory model Not applicable 2 Double float This selector allows the size of the double type to be selected See Section 2 7 25 DOUBLE Select kind of Double Types 3 Printf Not applicable Use strict calls Not applicable RAM ranges This field allows the default RAM data space memory used to be adjusted See Section 2 7 48 RAM Adjust RAM Ranges Code pointer size Not applicable External memory Not applicable Instruction set Not a
49. 0 tick_count return process other interrupt sources here if required Code generated by the compiler will be placed at the interrupt vector address which will execute this function after any context switch that is required Notice that the code in the interrupt function checks for the source of the interrupt in this case a timer by looking at the interrupt flag bit TOTE and the interrupt flag bit TOLF Checking the interrupt enable flag is required since interrupt flags associated with a peripheral may be asserted even if the peripheral is not configured to generate an interrupt 2010 Microchip Technology Inc DS51865B page 87 HI TECH C for PIC10 12 16 User s Guide 3 9 2 Specifying the Interrupt Vector As there is only one vector location the interrupt specifier used with a function def inition is all that is required to link that function to the interrupt Although the interrupt function can have any valid C identifier as its name the interrupt function cannot be changed at runtime That is you cannot have more than one interrupt function and select which will be the active interrupt function once the program is running 3 9 3 Context Switching 3 9 3 1 CONTEXT SAVING ON INTERRUPTS some registers are automatically saved by the hardware when an interrupt occurs Any registers or compiler temporary objects used by the interrupt function other than those saved by the hardware must be saved in so
50. 1 Directories Tab The options in this dialog control the output and search directories for some files See Figure 2 5 in conjunction with the following command line option equivalents E DS51865B page 42 2010 Microchip Technology Inc PICC Command line Driver FIGURE 2 5 THE DIRECTORIES TAB Build Options For Project astest mcp Directories Custom Build Trace Driver Compiler Linker Global Directores and Search Paths Show directores for Output Directory sl Output Directory New Include Search Path SERENE Suite Defaults M Build Directory Policy f Acsemble Compile in source file directory link in output directory f Assemble Compile Link in the project directory OF Cancel Apply Help 1 The output directory This selection uses the buttons and fields grouped in the bracket to specify an output directory for files output by the compiler This selec tion is handled internally by MPLAB IDE and does not use a driver option how ever it is functionally equivalent to the OUTDIR driver option see Section 2 7 43 OUTDIR Specify a directory for output files 2 Include Search path This selection uses the buttons and fields grouped in the bracket to specify include header file search directories See Section 2 7 5 I Include Search Path 2 8 2 Compiler Tab The options in this dialog control the aspects of compilation up to code generation See Figure 2 6 in c
51. 1 ib extension P code libraries 1pp extension are always passed to the code generator application and cannot be passed to the linker The options recognized by the linker are listed in Table 5 1 and discussed in the following paragraphs TABLE 5 1 LINKER COMMAND LINE OPTIONS Option et re E segmentoffset address form G spec Specify calculation for segment selectors H symfile Generate symbol file H symfile Generate enhanced symbol file Ignore undefined symbols Produce obj file with only symbol records Shum 2010 Microchip Technology Inc DS51865B page 141 HI TECH C for PIC10 12 16 User s Guide TABLE 5 1 LINKER COMMAND LINE OPTIONS CONTINUED Option et Sclass limit bound Specify address limit and start boundary for a class of psects Pre enter symbol in table as undefined Use file avmap to generate an Avocet format symbol file Print version number and stop If the standard input is a file then this file is assumed to contain the command line argument Lines may be broken by leaving a backslash at the end of the preceding line In this fashion HLINK commands of almost unlimited length may be issued For example a link command file called x 1nk and containing the following text Z ON OB MX MAP Ptext 0 data 0 bss nvram bss X OBJ Y OBJ Z OBJ may be passed to the linker by one of the following hlink x lnk hlink lt x lnk Several linker op
52. 16 User s Guide the function block must follow not a semicolon int get_value a b 314 expected Parser A semicolon is missing from a statement A close brace or keyword was found following a statement with no terminating semicolon e g while a b a oops where is the semicolon error is flagged here Note Omitting a semicolon from statements not preceding a close brace or keyword typically results in some other error being issued for the following code which the parser assumes to be part of the original statement 315 expected Parser An opening brace was expected here This error may be the result of a function defini tion missing the opening brace e g oops no opening brace after the prototype void process char c return maxo 10 23 7 error flagged here SC 316 VU expected Parser A closing brace was expected here This error may be the result of a initialized array missing the closing brace e g char carray 4 1 2 3 43 cops no closing brace 317 expected Parser An opening parenthesis was expected here This must be the first token after a while for if do or asm keyword e g if tee b f should bes f a by 47 b 0 318 string expected Parser The operand to an asm statement must be a string enclosed in parentheses e g asm nop that should De asm nop J3 319 while expected Parser Th
53. 16 User s Guide 2 2 1 1 LONG COMMAND LINES The PICC driver is capable of processing command lines exceeding any operating sys tem limitation To do this the driver may be passed options via a command file The command file is specified by using the symbol which should be immediately followed i e no intermediate space character by the name of the file containing the command line arguments intended for the driver Each command line argument must be separated by one or more spaces and may be placed over several lines by using a space and backslash character to separate lines The file may contain blank lines which are simply skipped by the driver The use of a command file means that compiler options and project filenames can be stored along with the project making them more easily accessible and permanently recorded for future use but without involving the complexity of creating a make utility For example a command file xyz cma is constructed in any text editor and contains both the options and file names that are required to compile your project as follows chip 16F877A m opt all g ive E aes haecih aaa After it is saved the compiler may be invoked with the command PICC xyz cmd 2 22 Environment Variables When hosted on a Windows environment the compiler uses the registry to store infor mation relating to the compiler installation directory and activation details along with other configuration
54. 34 int status buf ftoa input amp status Prini iburter holds s Duf See Also SE EE EK Deed ECK ter aler E Return Value This routine returns a reference to the buffer into which the result is written Synopsis include lt stdio h gt ine getchar void Description The getchar routine is a getc stdin operation It is a macro defined in stdio h Note that under normal circumstances getchar will NOT return unless a carriage return has been typed on the console To get a single character immediately from the console use the function getch Example include lt stdio h gt void main void IAG C while c getchar EOF putchar c U a e a a O O U O a au au aual O aMMa M all 2010 Microchip Technology Inc DS51865B page 197 HI TECH C for PIC10 12 16 User s Guide GETS See Also getc fgetc freopen fclose Note This routine is not usable in a ROM based system Synopsis include lt stdio h gt char gets char s Description The gets function reads a line from standard input into the buffer at s deleting the newline c f fgets The buffer is null terminated In an embedded system gets is equivalent to cgets and results in getche being called repeatedly to get characters Editing with backspace is available Example include lt stdio h gt void main void char buf 80 EE S e ines My if gets buf
55. 40 47 60 65 81 268 271 302 CONMTOMMANGCE hex saccetucretoccescusiceeeneenie Montel 41 47 len 47 implementation defined behaviour 47 343 application names ssoooeneoneennnserresnnrensnrenerenrenne 10 E 72 MAXIMUM S ZE Of EE 72 ASCII Characters ccccccesseeeeeececeeeeeeeeeeeeeeeeees 55 121 asctime TUNCHON EE 178 ASIN TUNG Olt EE 179 ASM C directives S 99 aspic h header ne 101 assembler disabling messages ccsssseeeceeceeeseeeeeeeeeeees 118 maximum number Of CrrOrs cccceeeeeeeeeeeees 119 supported COVICES ccccccsssseeeeeeeceeseeeeeeeenens 119 assembler applcatnon 115 assembler controls cccsccccseseeeccesseeeceeeeeeeeseees 135 assembler drechves reen 125 assembler files preprocessing E 36 assembler MACIOS cccceeeecceceeeeeeeeeeeeeeaeeeeesaees 131 disabling in listing cccceeeeeeeeeeceeeeeeeeeeseeeees 136 expanding in Ietngs 117 136 repeat with argument 133 repeating geseis teeteia aes 133 suppressing Comments 132 Diaen ME 133 assembler optmzatons 104 assembler optimizer Si lei Te EE 35 117 stack GEOL EE 140 assembler option A a a nt 116 KEE 116 159 CGONIDINIO EE 117 CRIP EE 118 BE 118 Fetes cate E EE E A ecu AE 117 EDPren a ath sealed alan 119 EMAX EE 119 ee ee 117 SE 117 ME 117 ae 117 E DEE 117 QO US EEN 118 RE 118 EE 118 UE 119 Ee 118 assembler OPTIONS ccccceeseeececeeeeeeceeeeeecssaeeess 116 a
56. 6 Utilities 6 1 INTRODUCTION This chapters discusses some of the utility applications that are bundled with the compiler some of these applications may not be normally invoked when building but can be manually executed to perform certain tasks 6 2 LIBRARIAN The librarian program LIBR has the function of combining several files into a single file known as a library The reasons you might want to use a library in a project are e there will be fewer files to link e the file content will be accessed faster e libraries uses less disk space The librarian can build p code libraries 1pp extension from p code files p1 exten sion or object code libraries 1ib extension from object files obj extension P code libraries should be only created if all the library source code is written in C Object code libraries should be used for assembly code that is to be built into a library With both library types only those modules required by a program will be extracted and included in the program output 6 2 1 The Library Format The modules in a library are simply concatenated but a directory of the modules and symbols in the library is maintained at the beginning of a library file Since this directory is smaller than the sum of the modules on the first pass the linker can perform faster searches just reading the directory and not all the modules On the second pass it need read only those modules which are required see
57. A psect s class is specified via a flag as in the following psect text class CODE Look for other psect definitions that specify a different class name 874 a psect may only have one with option Assembler A psect can only be placed with one other psect A psect s with option is specified via a flag as in the following psect bss with data Look for other psect definitions that specify a different with psect name 875 bad character constant in expression Assembler The character constant was expected to consist of only one character but was found to be greater than one character or none at all An assembler specific example MOV r0 get ale 12 specifies two characters 876 syntax error Assembler A syntax error has been detected This could be caused a number of things 877 yacc stack overflow Assembler This is an internal compiler error Contact HI TECH Software technical support with details 878 S option used ignored Driver The indicated assembly file has been supplied to the driver in conjunction with the s option The driver really has nothing to do since the file is already an assembly file 2010 Microchip Technology Inc DS51865B page 313 HI TECH C for PIC10 12 16 User s Guide 880 invalid number of parameters Use HELP for help Driver Improper command line usage of the of the compiler s driver 881 setup succeeded Driver The compiler has been succ
58. AENTRY 0 0FFhxfh 449 syntax error in A spec Linker The a spec is invalid A valid A spec should be something like AROM 1000h 1FFFh 450 psect was never defined Linker This psect has been listed in a P option but is not defined in any module within the program 451 bad psect origin format in P option Linker The origin format in a p option is not a validly formed decimal octal or HEX number nor is it the name of an existing psect A HEX number must have a trailing H e g pbss f000 Did you forget the radix pbss f000h 452 bad minimum address format in P option Linker The minimum address specification in the linker s p option is badly formatted e g pbss data f000 Did you forget the radix pbss data f000h 2010 Microchip Technology Inc DS51865B page 281 HI TECH C for PIC10 12 16 User s Guide 453 missing number after in P option Linker The operator in a p option for rounding boundaries must have a number after it 454 link and load address can t both be setto in P option Linker The link and load address of a psect have both been specified with a dot character Only one of these addresses may be specified in this manner e g Pmypsect 1000h Pmypsect 1000h Both of these options are valid and equivalent however the following usage is ambig UOUS Pmypsect What is the link or load address of this psect 455 psect
59. Age Application Maestro CodeGuard dsPICDEM dsPICDEM net dsPICworks dsSPEAK ECAN ECONOMONITOR FanSense HI TIDE In Circuit Serial Programming ICSP Mindi MiWi MPASM MPLAB Certified logo MPLIB MPLINK mTouch Omniscient Code Generation PICC PICC 18 PICDEM PICDEM net PICkit PiCtail REAL ICE rfLAB Select Mode Total Endurance TSHARC UniWinDriver WiperLock and ZENA are trademarks of Microchip Technology Incorporated in the U S A and other countries SQTP is a service mark of Microchip Technology Incorporated in the U S A All other trademarks mentioned herein are property of their respective companies 2010 Microchip Technology Incorporated Printed in the U S A All Rights Reserved CH Printed on recycled paper ISBN 978 1 60932 739 2 Microchip received ISO TS 16949 2002 certification for its worldwide headquarters design and wafer fabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in California and India The Company s quality system processes and procedures are for its PICe MCUs and dsPIC DSCs KEELO code hopping devices Serial EEPROMs microperipherals nonvolatile memory and analog products In addition Microchip s quality system for the design and manufacture of development systems is ISO 9001 2000 certified DS51865B page 2 2010 Microchip Technology Inc HI TECH CS FOR PIC10 12 16 MICROCHIP USER S GUIDE Table of Contents
60. Bee allocated to bank 2 in this example int getValue const int ip return ip void main void J getValue amp i I ee Code that uses 4 J getValue amp x code that uses j The pointer ip now has targets that are in bank 0 and in bank 2 To be able to accom modate this situation the pointer is made 16 bits wide and the code used to derefer ence the pointer will change accordingly This takes place without any modification to the source code One positive aspect of tracking pointer targets is less of a dependence on pointer qual ifiers The standard qualifiers const and volatile must still be used in pointer defi nitions to indicate a read only or externally modifiable target object respectively DS51865B page 62 2010 Microchip Technology Inc C Language Features However this is in strict accordance with the ANSI C standard HI TECH specific qual ifiers like near and bankx do not need to be used to indicate pointer targets have no effect and should be avoided Omitting these qualifiers will result in more portable and readable code and reduce the chance of extraneous warnings being issued by the compiler 3 4 4 2 1 Pointers to Both Memory Spaces When a pointer is assigned the address of one or more objects allocated memory in the data space and also assigned the address of one or more const objects the pointer will be classified such that it can dereference both memory sp
61. C source code as it will correctly interact with all C flow of control structures The following example shows both methods used unsigned int var void main void var 1 asm like this BCF 0 3 BANKSEL _var RLF _var amp 07fh RLF _var 1 amp 07fh endasm do it again the other way asin BCE 0 3 asm BANKSEL _fvar asm RLF _var amp 0O7 fh asm RLF _vart l amp 0O7fh When using in line assembler code great care must be taken to avoid interacting with compiler generated code The code generator cannot scan the assembler code for reg ister usage and so will remain unaware if registers are clobbered or used by the assem bly code If you are in doubt as to which registers are being used in surrounding code compile your program with the ASMLIST option see Section 2 7 17 ASMLIST Generate Assembler List Files and examine the assembler code generated by the compiler Remember that as the rest of the program changes the registers and code strategy used by the compiler will change as well 3 13 3 Accessing C objects from within Assembly Code The following sections apply to both separate assembly modules and assembly in line with C code 3 13 3 1 EQUIVALENT ASSEMBLY SYMBOLS Most C symbols map to an corresponding assembly equivalent The name of a C function maps to an assembler label that will have the same name but with an underscore prepended So the function main
62. CROMWELL appli cation see Section 6 5 Cromwell to produce the output debug files such as the COFF file 2 5 2 Diagnostic Files Two valuable files produced by the compiler are the assembly list file produced by the assembler and the map file produced by the linker The compiler options ASMLIST Section 2 7 17 ASMLIST Generate Assem bler List Files generates a list file and the M option Section 2 7 8 M Generate Map File specifies generation of a map file The assembly list file contains the mapping between the original source code and the generated assembly code It is useful for information such as how C source was encoded or how assembly source may have been optimized It is essential when con firming if compiler produced code that accesses objects is atomic and shows the psects in which all objects and code are placed See Section 4 4 Assembly List Files for more information on the contents of this file 2010 Microchip Technology Inc DS51865B page 17 HI TECH C for PIC10 12 16 User s Guide There is one list file produced for the entire C program including C library files and which will be assigned the project name and extension 1st One additional list file is produced for each assembly source file compiled in the project The map file shows information relating to where objects were positioned in memory It is useful for confirming if user defined linker options were cor
63. Contact HI TECH Software technical support with details 159 too many calls to unget Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details IERT 161 control line within preprocessor macro expansion Preprocessor A preprocessor control line one starting with a has been encountered while expand ing a macro This should not happen 162 warning Preprocessor Driver This warning is either the result of user defined warning preprocessor directive or the driver encountered a problem reading the map file If the latter then please HI TECH Software technical support with details 163 unexpected text in control line ignored Preprocessor This warning occurs when extra characters appear on the end of a control line e g The extra text will be ignored but a warning is issued It is preferable and in accordance with Standard C to enclose the text as a comment e g if defined END define NEXT endif END END would be better in a comment here IERT 164 include filename was converted to lower case Preprocessor The include file name had to be converted to lowercase before it could be opened e g tinclud e lt SIDLO H gt oops should be incrude lt stdio h gt 7 165 include filename does not match actual name check upper lower case Preprocessor In Windows versions this means the file to be included actually exi
64. DS51865B page 149 HI TECH C for PIC10 12 16 User s Guide 5 4 2 Contents The sections in the map file in order of appearance are as follows e The compiler name and version number e A copy of the command line used to invoke the linker e The version number of the object code in the first file linked e The machine type e The call graph information e A psect summary sorted by the psect s parent object file e Apsect summary sorted by the psect s CLASS e A segment summary e Unused address ranges summary e The symbol table Portions of an example map file along with explanatory text are shown in the following sections 5 4 2 1 GENERAL INFORMATION At the top of the map file is general information relating to the execution of the linker When analyzing a program always confirm the compiler version number shown in the map file if you have more than one compiler version installed to ensure the desired compiler is being executed The device selected with the CHIP option Section 2 7 20 CHIP Define Proces sor or that select in your IDE should appear after the Machine type entry The object code version relates to the file format used by relocatable object files pro duced by the assembler Unless either the assembler or linker have been updated inde pendently this should not be of concern A typical map file may begin something like the following This example has been cut down for clarity
65. E Prince then wn else if i gt 0 EE E then vw else prance ms See Also strncpy strncmp strchr memset memchr Return Value Returns negative one zero or one depending on whether s1 points to string which is less than equal to or greater than the string pointed to by s2 in the collating sequence DS51865B page 208 2010 Microchip Technology Inc Library Functions MEMCPY MEMMOVE Synopsis include lt string h gt v id memcpy void dz const void Sy ee E 1 Description The memcpy function copies n bytes of memory starting from the location pointed to by s to the block of memory pointed to by a The result of copying overlapping blocks is undefined The memcpy function differs from strcpy in that it copies a specified number of bytes rather than all bytes up to a null terminator Example include lt string h gt include lt stdio h gt void main void char but 30 3 memset buf 0 sizeof buf HEEL e M partial Sebring lt 0 printi Ss Art buf See Also strncpy strncmp strchr CH memset Return Value The memcpy routine returns its first argument Synopsis include lt string h gt void memmove void s1 const void s2 size_t n Description The memmove function is similar to the function memcpy except copying of overlapping blocks is handled correctly That is it will copy forwards or backward
66. EE 224 SINCSDINIUNCHON ice teenie 225 SUIS TUG UON E 223 SUFIGIMD TUNCUON oases edi ede tales 224 sting MOV AS Gebees e ege Ae S 66 CONCALENMATION EE 67 strings SEU E 122 RTE 172 storage IOCANON ee stees eege 67 171 YPE Ole aana hes eg 66 leie OS CC eet cae wees dooce seer ate tees heen tad as 92 EE 92 SUIS UC TUNC UOM EE 231 strlen TUNGUM seeker sever eet Sees 226 SERIES TUR CHON een 226 STMMCMD UNCION sees Seier ee 227 Sidler OV HUMIC TON EE 228 Strmicmp FUNCTION ericson e 227 SMODIK UNC UO EE 229 SUC TUMCHON edel 229 SUCIC MI TUMCUOI EE 229 65 0 910 ee e EE 230 strstr TUNCUON eege 231 Stee n E 231 strtok nee EE 232 SIMOMTUNGUON eaa a aE tee 232 SEENEN 58 structure bit fieldS ccccseeeeeeecceseeeeeeeeeeeeeeeeeeeeeeens 59 structure qualifiers ccccceeeeeceeeeseeeceeseeeeeeeeeeeeens 59 SIFU CIUCS senean ere R 58 alignment PACAING cccsesececceseeeceeeeeeneeeeees 108 6 gl EE 59 maximum SIZE EE 72 SUBTITLE CONTO E 137 supported devices cccccccseeeeeececeeeseeceeeeseeseeeeeeees 30 switch pragma CIPECTIVE ccccccecseeeeeeeeeeeeeseaaeeees 110 switch statement type SE A E aes 110 direct le e EE 111 EE 110 SSS ee dE 110 HERE 110 Ste Een 110 Olli 144 146 162 PN eer EE 147 CAMANCEG E 144 EIER HE 144 Ile En ele E EE 147 alle EE 143 2010 Microchip Technology Inc removing symbols from 146 symbol Ke 147 SOUNO aiia ea tio ees 145 symbol only obj
67. EE EE 57 RAP WA ME kee aere Seed 33 R I ek 17 145 149 build OPtiONS cecescecececececeesesesesereeseseceeees 26 42 eist 150 debug DUIIGS cecececcsesesesesesesesesececececenseeteee 148 QONETALING e n 27 145 149 Eltere 13 42 PFOCESSOF selechon En 146 Selen 25 SEISCIOR sete totic fi eile ara d 144 multi character constants Symbol tables In 145 SSS DIY Saas aad i 122 WITT OF EE 147 multiple hex E 143 VD ae a sae emer 18 memchr FUNCTION ccc cceececeeeeeeeeeeeeseeeeseaeeeseaaees 207 N memcmp function aiceccsexiarcesatsc2sedecesdleschexneaderecetttes 208 near qualifier ee ccecceeeeecceeeeeececeseeeeesseeeseeees 29 69 ils e UNCON EE 209 NOCOND COMMO RTE 136 IMEMMOVES DEIEIEHEE ege e eg 209 NOEXPAND CONVOI ronan a 136 memory NOLIST CONTO EE e iinet eure 117 136 DANKO aaa ee ice telco 70 99 134 MONG SUDODHON ices ce eae ee 23 COMMO EE 70 non volatile HAM EEN 68 Gal EE 70 NOP e de EE 211 tee E 70 NOXREF CONIO EE 137 EE 120 129 134 nul macro operator EE 132 FESEFV NQ ees egeteg 30 37 38 NEL DONMTON ceee e eoteeadacnots 64 specifying ranges sesseseenneeeerrreesrrreesrrenn 142 NULL pointers EE 65 SUMINA Y eege RAAR 41 NV OS CC ienn a R E 71 93 2010 Microchip Technology Inc DS51865B page 359 HI TECH C for PIC10 12 16 User s Guide O object code version number 150 Object file Irartes 148 object files ct 2 ccdeceednacececsadeseacinsdetseaetnenecde 24 118 155 leie 145 e
68. HI TECH C Compiler for PIC10 12 16 MCUs 1 2 COMPILER DESCRIPTION AND DOCUMENTATION The HI TECH C Compiler for PIC10 12 16 MCUs is a free standing optimizing ANSI C compiler It supports all PIC10 PIC12 and PIC16 series devices as well as the PIC14000 device and the enhanced Mid Range PIC MCU architecture The compiler is available for several popular operating systems including 32 and 64 bit Windows Linux and Apple OS X The compiler can run in one of three operating modes Lite Standard or PRO The Standard and PRO operating modes are licensed modes and require a serial number to enable them Lite mode is available for unlicensed customers The basic compiler operation Supported devices and available memory are identical across all modes The modes only differ in the level of optimization employed by the compiler 1 2 1 Conventions Throughout this manual the term the compiler is often used It can refer to either all or some subset of the collection of applications that form the HI TECH C Compiler for PIC10 12 16 MCUs Often it is not important to know for example whether an action is performed by the parser or code generator application and it is sufficient to say it was performed by the compiler lt is also reasonable for the compiler to refer to the command line driver or just driver as this is the application that is always executed to invoke the compilation process The driver for the HI TECH C Co
69. High mediany 325 error in printf style format string Parser There is an error in the format string here The string has been interpreted as a printf style format string and it is not syntactically correct If not corrected this will cause unexpected behavior at run time e g Prince sel LLLI of oops Maybe MEI NEE Colo la ey 326 long int argument required in printf style format string Parser A long argument is required for this format specifier Check the number and order of format specifiers and corresponding arguments e g printt slx 2 3 7 maybe you meant printt slx 2 327 long long int argument required in printf style format string Parser A long long argument is required for this format specifier Check the number and order of format specifiers and corresponding arguments e g print sll t Jr maybe you means printi Cell SE Note that not all HI TECH C compilers provide support for a long long integer type 328 int argument required in printf style format string Parser An integral argument is required for this printf style format specifier Check the number and order of format specifiers and corresponding arguments e g printf d 1 23 wrong number or wrong placeholder 2010 Microchip Technology Inc DS51865B page 267 HI TECH C for PIC10 12 16 User s Guide 329 double argument required in printf style format string Parser The printf forma
70. Min value of a long 2147483648 When specifying a signed or unsigned short int short long int orlong int type the keyword int may be omitted Thus a variable declared as short will contain a signed short int and a variable declared as unsigned short will con tainan unsigned short int lt is a common misconception that the C char types are intended purely for ASCII char acter manipulation This is not true indeed the C language makes no guarantee that the default character representation is even ASCII The char types are simply the smallest of the multi bit integer sizes and behave in all respects like integers The rea son for the name char is historical and does not mean that char can only be used to represent characters It is possible to freely mix char values with values of other types in C expressions With the HI TECH C compiler the char types will commonly be used for a number of purposes as 8 bit integers as storage for ASCII characters and for access to I O locations 3 4 1 1 BIT DATA TYPES AND VARIABLES The HI TECH C Compiler for PIC10 12 16 MCUs supports bit integral types which can hold the values 0 or 1 Single bit variables may be declared using the keyword bit for example bart init tlag These variables cannot be auto or parameters to a function but can be qualified static allowing them to be defined locally within a function For example int func void static bit flame_on ei 1 This imple
71. Objtohex Improper usage of the command line tool ob jtohex If you are invoking ob jtohex directly then please refer to Section 6 3 Objtohex for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical support with details 434 too many symbols Linker There are too many symbols in the symbol table which has a limit of symbols Change some global symbols to local symbols to reduce the number of symbols 435 bad segment selector Linker The segment specification option G to the linker is invalid e g GAL 0 720 Did you forget the radix GA f0h 10 436 psect re orged Linker This psect has had its start address specified more than once 437 missing in class spec Linker A class spec needs an sign e g Ctext ROM See Section Cpsect class for more information 438 bad size in S option Linker The address given in a s specification is invalid it should be a valid number in deci mal octal or hexadecimal radix The radix is specified by a trailing o for octal or H for HEX A leading 0x may also be used for hexadecimal Case in not important for any number or radix Decimal is the default e g SCODE f000 Did you forget the radix 2010 Microchip Technology Inc DS51865B page 279 HI TECH C for PIC10 12 16 User s Guide SCODE f000h 439 bad D spec Linker The format of a D spec
72. Oout file output option is used to specify another name 4 2 2 C Produce Cross Reference File A cross reference file will be produced when this option is used The cross reference file called srcfile crf where srcfile Is the base portion of the first source file name will contain raw cross reference information The cross reference utility CREF must then be run to produce the formatted cross reference listing See Section 6 4 Cref for more information on this application DS51865B page 116 2010 Microchip Technology Inc Macro Assembler 4 2 3 C Specify Chip Info File Specify the chipinfo file to use The chipinfo file is called picc ini and can be found inthe dat directory in the compiler s installation directory This file specifies information about the currently selected device 4 2 4 E Specify Error Format File The default format for an error message is in the form filename line message where the error of type message occurred on line line of the file filename The E option with no argument will make the assembler use an alternate format for error and warning messages Specifying a filename as argument will force the assembler to direct error and warning messages to a file with the name specified 4 2 5 F Specify Page Length By default the assembly listing format is pageless i e the assembler listing output is continuous The output may be formatted into pages of varying lengths Each pag
73. OxAA BANKSEL PORTA MOVWFE BANKMASK PORTA BANKSEL PORTB BSF RB1_bit endasm 3 13 4 Interaction between Assembly and C Code HI TECH C Compiler for PIC10 12 16 MCUs incorporates several features designed to allow C code to obey requirements of user defined assembly code The command line driver ensures that all user defined assembly files have been pro cessed first before compilation of C source files begin The driver is able to read and analyze certain information in the relocatable object files and pass this information to the code generator This information is used to ensure the code generator takes into account requirement of the assembly code See Section 2 3 4 Compilation of Assembly Source for further information on the compile sequence 3 13 4 1 ABSOLUTE PSECTS Some of the information that is extracted from the relocatable objects relates to abso lute psects specifically psects defined using the abs and ovr1ldad PSECT flags see Section 4 3 9 3 PSECT for information on this directive HI TECH C is able to determine the address bounds of absolute psects and uses this information to ensure that the code produced by the code generator does not use mem ory required by the assembly code The code generator will reserve any memory used by the assembly code Here is an example of how this works An assembly code files defines a table that must be located at address 0x110 in the data space The assembly file co
74. PICC Command line Driver 2 7 47 PROTO Generate Prototypes The PROTO option is used to generate pro files containing both ANSI C and K amp R style function declarations for all functions within the specified source files Each pro file produced will have the same base name as the corresponding source file Proto type files contain both ANSI C style prototypes and old style C function declarations within conditional compilation blocks The extern declarations from each pro file should be edited into a global header file which can then be included into all the C source files in the project The pro files may also contain static declarations for functions which are local to a source file These static declarations should be edited into the start of the source file To demonstrate the operation of the PROTO option enter the following source code as file test c include lt stdio h gt add argl arg2 al gia Cm argl POL 5 arg2 return argl arg2 vorid EEN TS tytn e siete ant Count while count SEENEN Ee E putchar Cf ef If compiled with the command PICC S CHLEP l6OES TIAA PROTO Test lt c PICC will produce test pro containing the following declarations which may then be edited as necessary Prototypes from test c extern functions include these in a header file if PROTOTYPES extern int add int int es extern void Prince er Er Ap Inz else PROTOTYPES e
75. SIE RE 168 170 SITE 168 RIND and DELETE EE 169 FIND tang REPLACE E 169 FORMA RE 169 PEEL GE 170 LOGFILE teana sesamin 170 Wl EE 170 D HE 170 FAQICCS EE 166 SERA etree ue ernie nen re Sent eee 40 171 SIZE EE 171 RUIN e 171 9 CRPAC si asd aes erat selec ence ean ie eo 172 HEXMA ee le EE 165 Ali VEGA GC MACIO BEE 106 HI TECH universal toolsuite cccccsseseseeeeeeeeeeees 42 Sang Ne 33 HLINK appleaton 141 HTC_ERR_FORMAT environment variable 20 HTC_MSG_FORMAT environment variable 20 HTC_WARN_FORMAT environment variable 20 HTC SM environment variable cccseseeeeeeeeees 8 NIE EA UE AML E 8 I HSV neie Me Lt EE 89 ID Rate de a 50 ef Ree EE 91 109 identifiers SE e E 122 Ile un WEE 27 IGIOG S1 AREP E E A PE 92 IEEE floating DOIN Trmal EE 56 cae Weer EE 131 implementation defined behaviour sssssseseeseenenn 47 division and modulus 81 SPE E EE E S AE oct canal tecetada cy 81 INGLUDE CONTO EEN 136 include files see header files incremental buildS ccccccceseeeeeeeeeeeeeceeeeeeeseeeeeees 13 INHX32 hex files innn 166 169 INHX8M hex les 166 170 Idee EE 92 initialized variables scp 94 inline pragma directive ccsseeceeceeeeeeeeeeeeeeeeeeeess 108 INDUS ac e icc ate elec 7 Juge 54 integer suffix ONG saraa 66 Jurte e uk 65 66 integral constants s Sdecinscc cetzen hicestutaiecioicadddndatsecveees 65 integral Dromobon 80 bleche 166
76. See also message 593 The new form of message also indicates the largest free block that the linker could find Unless there is a single space large enough to accom modate the psect the linker will issue this message Often when there is banking or paging involved the largest free space is much smaller than the total amount of space remaining 1348 enum tag redefined from Parser More than one enum tag with the same name has been defined The previous definition is indicated in the message enum VALS ONE 1 TWO THREE enum VALS NINE 9 TEN oops is INPUT the right tag name 1350 pointer operands to must reference the same array Code Generator If two addresses are subtracted the addresses must be of the same object to be ANSI compliant EE ee int fred buf 20 ip amp buf 0 amp fred oops second operand must be an address of a buf element 1352 truncation of operand value 0x to bits Assembler The operand to an assembler instruction was too large and was truncated movlw Ox321 oops is this the right value DS51865B page 338 2010 Microchip Technology Inc 1354 ignoring configuration setting for unimplemented word Driver A configuration word setting was specified for a word that does not exist on the target device _ CONF IG 3 0x1234 config word 3 does not exist on an 18C801 1355 inline delay argument too large Code Generator
77. Specify a directory for intermediate files and Section 2 7 10 O Specify Output File for more information 2 7 44 OUTPUT type Specify Output File Type This option allows the type of the output file s to be specified If no OUTPUT option is specified the output file s name will be the same as the project name see Section 2 3 The Compilation Sequence 2010 Microchip Technology Inc DS51865B page 35 HI TECH C for PIC10 12 16 User s Guide The available output file format are shown in Table 2 13 More than one output format may be specified by supplying a comma separated list of tags Not all formats are sup ported by Microchip development tools Those output file types which specify library formats stop the compilation process before the final stages of compilation are executed Hence specifying an output file for mat list containing e g Lib or all will prevent the other formats from being created TABLE 2 13 OUTPUT FILE FORMATS reng File format SOS ma ooo Weeer THe OOOO e E le SSS elf ELF DWAPF file format not supported by HI TECH C Com piler for PIC10 12 16 MCUs So for example PICO CHIP L6F 37 7AA OUTPUT lLpp led init c lod dataro ed msgs c will compile the three names files into an LPP p code library 2 7 45 PASS1 Compile to P code The PASS1 option is used to generate p code intermediate files p1 file from the parser then stop compilation Such f
78. When generating a COD file this option can be used to force all local symbols to be represented as global symbols The may be useful where an emulator cannot read local symbol information from the COD file 6 5 6 Okey This option specifies the format of the output file The key can be any of the types listed in Table 6 5 6 5 7 Ikey This option can be used to specify the default input file format The key can be any of the types listed in Table 6 5 2010 Microchip Technology Inc DS51865B page 163 HI TECH C for PIC10 12 16 User s Guide 6 5 8 L Use this option to show what file format types are supported A list similar to that given in Table 6 5 will be shown 6 5 9 E Use this option to tell CROMWELL to ignore any filename extensions that were given The default extension will be used instead 6 5 10 B In formats that support different endian types use this option to specify big endian byte ordering 6 5 11 M When generating COD files this option will remove the preceding underscore character from symbols 6 5 12 V Turns on verbose mode which will display information about operations CROMWELL iS performing 6 5 13 EDF message file Set Message File Path This option is mainly used by the command line driver PICC to specify the path of the message description file The default file is located in the dat directory in the compiler s installation directory see Section 2 6 Compiler Mess
79. a range to be specified with the A option without knowing in advance how much of the lower part of the range for example will be required for other psects The final link and load address of psects are shown in the map file See Section 5 4 2 2 Psect Information listed by Module 5 2 19 Qprocessor This option allows a processor type to be specified This is purely for information placed in the map file The argument to this option is a string describing the processor There are no behavioral changes attributable to the processor type 5 2 20 S This option prevents symbol information relating from being included in the symbol file produced by the linker Segment information is still included 5 2 21 Sclass mt bound A class of psects may have an upper address limit associated with it The following example places a limit on the maximum address of the CODE class of psects to one less than 400h SCODE 400h DS51865B page 146 2010 Microchip Technology Inc Linker Note that to set an upper limit to a psect this must be set in assembler code using the psect limit flag see Section 4 3 9 3 6 Limit If the bound boundary argument is used the class of psects will start on a multiple of the bound address This example below places the FARCODE class of psects at a multiple of 1000h but with an upper address limit of 6000h SFARCODE 6000h 1000h 5 2 22 Usymbol This option will enter the specifi
80. a compiled stack is used functions are not re entrant since stack based variables in each function will use the same fixed area of memory every time the function is invoked Fundamental to the generation of the compiled stack is the call graph which defines a tree like hierarchy of function calls i e it shows what functions may be called by each function There will be one graph produced for each root function A root function is typically not called but which is executed via other means and contains a program entry point The function main is an example of a root function that will be in every project Interrupt functions which are executed when a hardware interrupt occurs are another example DS51865B page 74 2010 Microchip Technology Inc C Language Features FIGURE 3 2 FORMATION OF CALL GRAPH Call graph main F1 F4 code F2 generator F3 isr F5 F6 Analysis of program Figure 3 2 shows sections of a program being analyzed by the code generator to form a call graph In the original source code the function main calls F1 F2 and F3 F1 calls F4 but the other two functions make no calls The call graph for main indicates these calls The symbols F1 F2 and F3 are all indented one level under main F4 is indented one level under F1 This is a static call graph which shows all possible calls If the exact code for function F1 looked like int F1 void if PORTA 44 return F4
81. a record with an illegal size This probably means the file is truncated or not an object file Contact HI TECH Support with details DS51865B page 288 2010 Microchip Technology Inc 503 ident records do not match Linker The object files passed to the linker do not have matching ident records This means they are for different processor types 504 object code version is greater than Linker The object code version of an object module is higher than the highest version the linker is known to work with Check that you are using the correct linker Contact HI TECH Support if the object file if you have not patched the linker 505 no end record found inobject file Linker An object file did not contain an end record This probably means the file is corrupted or not an object file Contact HI TECH Support if the object file was generated by the compiler 506 object file record too long Linker This is an internal compiler error Contact HI TECH Software technical support with details 507 unexpected end of file in object file Linker This is an internal compiler error Contact HI TECH Software technical support with details 508 relocation offset out of range 0 1 Linker This is an internal compiler error Contact HI TECH Software technical support with details 509 illegal relocation size Linker There is an error in the object code format read by the linker This either means you a
82. allocated to a class the space value of the psect is then assigned to the class see Section 4 3 9 3 12 Space 5 2 2 Cx This option is now obsolete Cpsect class This option will allow a psect to be associated with a specific class Normally this is not required on the command line since psect classes are specified in object files See Section 4 3 9 3 3 Class 5 2 3 Dclass delta This option allows the delta value for psects that are members of the specified class to be defined The delta value should be a number and represents the number of bytes per addressable unit of objects within the psects Most psects do not need this option as they are defined with a delta value See Section 4 3 9 3 4 Delta 5 2 4 Dsymiile Use this option to produce an old style symbol file An old style symbol file is an ASCII file where each line has the link address of the symbol followed by the symbol name 5 2 5 Eerrfile Error messages from the linker are written to the standard error stream Under DOS there is no convenient way to redirect this to a file the compiler drivers will redirect standard error if standard output is redirected This option will make the linker write all error messages to the specified file instead of the screen which is the default standard error destination 5 2 6 F Normally the linker will produce an object file that contains both program code and data bytes and symbol information Sometimes
83. amp instead In a macro argument list the angle brackets lt and gt are used to quote macro arguments 4 3 4 Comments An assembly comment is initiated with a semicolon that is not part of a string or character constant If the assembly file is first processed by the C preprocessor see Section 2 7 11 P Preprocess Assembly Files then the file may also contain C or C style comments using the standard and syntax 4 3 4 1 SPECIAL COMMENT STRINGS several comment strings are appended to assembler instructions by the code genera tor These are typically used by the assembler optimizer The comment string volatile Is used to indicate that the memory location being accessed in the commented instruction is associated with a variable that was declared aS volatile in the C source code Accesses to this location which appear to be redundant will not be removed by the assembler optimizer if this string is present This comment string may also be used in assembler source to achieve the same effect for locations defined and accessed in assembly code 4 3 5 Constants 4 3 5 1 NUMERIC CONSTANTS The assembler performs all arithmetic with signed 32 bit precision The default radix for all numbers is 10 Other radices may be specified by a trailing base specifier as given in Table 4 3 TABLE 4 3 ASPIC NUMBERS AND BASES Digits 0 and 1 followed by B Digits 0 to 7 followed by 0 0 oorg Digits 0 to 9 followed by D a
84. and remainder into the div_t structure EEPROM_READ EEPROM WRITE Synopsis include lt htc h gt unsigned char eeprom_read unsigned int address void eeprom write unsigned int address unsigned char value Description These functions allow access to the on chip eeprom when present The eeprom is not in the directly accessible memory space and a special byte sequence is loaded to the eeprom control registers to access this memory Writing a value to the eeprom is a slow process andthe eeprom write function polls the appropriate registers to ensure that any previous writes have completed before writing the next datum Reading data is completed in the one cycle and no polling is necessary to check for a read completion Example include lt htc h gt void main void unsigned char data unsigned int address 0x0010 data eeprom_read address eeprom_write address data See Also flash_erase flash_read flash_write 2010 Microchip Technology Inc DS51865B page 191 HI TECH C for PIC10 12 16 User s Guide Note The high and low priority interrupt are disabled during sensitive sequences required to access EEPROM Interrupts are restored after the sequence has completed eeprom_write will clear the EEIF hardware flag before returning Both eeprom_read and eeprom_write are available in a similar macro form The essential difference between the macro and function implementati
85. anything in the original psect If the name of the standard psect that is being redirected contains a counter e g text0 text1 text2 etc then the placeholder u should be used in the name of the psect at the position of the counter e g text u This will match any psect regardless of the counter value For example to remap a C function you could use pragma psect text u lookupfunc int lookup char ind Standard psects that make reference to a bank number are not using a counter and do not need the placeholder to match For example the redirect an uninitialized variable from bank 1 memory use pragma psect bssBANK1 shared0bj int foobar This pragma should not be used for any of the data psects data or idata that hold initialized variables These psects must be assembled in a particular order and the use of this pragma to redirect some of their content will destroy this order Use of this pragma with RAM based psects that are intended to be linked into a particular RAM bank is acceptable but the new psect must be linked into the same bank Linking the new psect to a different bank may lead to code failure This pragma affects the entire module in which it is located regardless of the position of the pragma in the file Any given psect should only be redirected once in a particular module That is you cannot redirect the standard psect for some of the module then swap back to using the standard psect for the remainder of
86. argument must be constant Code Generator The ___delay inline function can only take a constant expression as its argument int delay_val 99 delay delay_val oops argument must be a constant expression 1390 identifier specifies insignificant characters beyond maximum identifier length Parser An identifier has been used that is so long that it exceeds the set identifier length This may mean that long identifiers may not be correctly identified and the coe will fail The maximum identifier length can be adjusted using the N option int theValueOfThePortAfterTheModeBitsHaveBeenSet oops make your symbol shorter or increase the maximum identifier length 1393 possible hardware stack overflow detected estimated stack depth Code Generator The compiler has detected that the call graph for a program may be using more stack space that allocated on the target device If this is the case the code may fail The com piler can only make assumption regarding the stack usage when interrupts are involved and these lead to a worst case estimate of stack usage Confirm the function call nex ting if this warning is issued 1394 attempting to create memory range larger than page size a Driver The compiler driver has detected that the memory settings include a program memory page that is larger than the page size for the device This would mostly likely be the case if the ROM option is used to change the
87. around to address 0x0 from the oscillator calibration location at the top of program memory Do not change the default linker options relating to this psect as it must be linked to the reset vector location of the target device strings The strings psect is used for const objects It also includes all unnamed string literals This psect is linked into ROM since the contents do not need to be modified This psect can be linked anywhere in the program memory provided it does not cross a 100h boundary or interfere with the requirements of other psects stringtext The stringtext psect is used for const objects when compiling for Baseline devices This psect is linked into ROM since the contents do not need to be modified This psect must be linked within the first half of each program memory page textn These psects where nis a decimal number contain all other executable code that does not require a special link location These psects can be linked anywhere in the program memory provided they does not interfere with the requirements of other psects DS51865B page 92 2010 Microchip Technology Inc C Language Features xxx_text Defines the psect for a function that has been made absolute i e placed at an address xxx will be the assembly symbol associated with the function For example if the function rv is made absolute code associated with it will appear in the psect called cu test As these psects are already placed at the add
88. bad record type Linker This is an internal compiler error Ensure the object file is a valid HI TECH object file Contact HI TECH Software technical support with details 380 unknown record type Linker This is an internal compiler error Contact HI TECH Software technical support with details 381 record too long Linker This is an internal compiler error Contact HI TECH Software technical support with details 382 incomplete record type length Dump Xstrip This message is produced by the DUMP or XSTRIP utilities and indicates that the object file is not a valid HI TECH object file or that it has been truncated Contact HI TECH Support with details 383 text record has length too small Linker This is an internal compiler error Contact HI TECH Software technical support with details 384 assertion failed file line expression Linker Parser This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 275 HI TECH C for PIC10 12 16 User s Guide 387 illegal or too many G options Linker There has been more than one linker g option or the g option did not have any argu ments following The arguments specify how the segment addresses are calculated 388 duplicate M option Linker The map file name has been specified to the linker for a second time This should not occu
89. be signed except for the char types which are always unsigned The bit type is always unsigned and the concept of a signed bit is meaningless Signed values are stored as a two s complement integer value The range of values capable of being held by these types is summarized in Table 3 2 The symbols in this table are preprocessor macros which are available after including lt limits h gt in your source code As the size of data types are not fully specified by the ANSI Standard these macros allow for more portable code which can check the DS51865B page 54 2010 Microchip Technology Inc C Language Features limits of the range of values held by the type on this implementation The macros asso ciated with the short long type are non standard macros available in this implemen tation TABLE 3 2 Symbol CHAR BIT CHAR MAX CHAR MIN SCHAR_MAX SCHAR_MIN UCHAR_MAX SHRT_MAX RANGES OF INTEGER TYPE VALUES Bits per char Max value of a char Min value of a char Max value of asigned char Min value of a signed char Max value of an unsigned char Max value of a short 127 128 127 128 2595 32767 32768 SHRT_MIN Min value of a short USHRT_MAX Max value of an unsigned short 65535 INT_MAX Max value of an int 32767 INT_MIN Min value of a int 32768 UINT_MAX Max value of an unsigned int 65535 SHRTLONG_MAX Max value of a short long 8388607 SHRTLONG_MIN Min value of a short long 8388608 LONG_MIN
90. beta builds or release candidate builds to be passed to the assembler This information is only used in the title of the assembly list file and is not reflected in the output to the VER option 4 2 14 X Strip Local Symbols The object file created by the assembler contains symbol information including local symbols i e symbols that are neither public or external The x option will prevent the local symbols from being included in the object file thereby reducing the file size description 4 2 15 CHIP Specify Device Name This option defines the processor which is being used The processor type can also be indicated by use of the PROCESSOR directive in the assembler source file see Section 4 3 9 19 PROCESSOR You can also add your own processors to the compiler via the compiler s chipinfo file This option is applied if compiling using PICC the command line driver and the CHIP driver option see Section 2 7 20 CHIP Define Processor 4 2 16 DISL Disable Messages This option is mainly used by the command line driver PICC to disable particular message numbers It takes a comma separate list of message numbers that will be disabled during compilation This option is applied if compiling using PICC the command line driver and the MSGDISABLE driver option see Section 2 7 37 MSGDISABLE Disable Warn ing Messages see Section 2 6 Compiler Messages for full information about the com
91. blove Lo Lon i Show 16LF194 drivers only Move the diver you wish to use to the top of the el Selected driver information and supported devices Compiler Tor DC OD 246 MCUs PRO Mode VO GU Serial number ACPICP O0000 PRO With Gmniscient Code Generation From the command line the same information can be obtained Run the compiler you wish to use and pass it the option CHIPINFO See Section 2 7 21 CHIPINFO Display List of Supported Processors A list of all devices will be printed 3 3 2 Device Header Files There is one header file that is recommended be included into each source file you write The file is lt htc h gt and is a generic file that will include other device and chip specific header files when you build your project Inclusion of this file will allow access to SFRs via special variables as well as macros which allow special memory access or inclusion of special instructions like CLRWDT 3 3 3 Stack The hardware stack on PIC devices is limited in depth and cannot be manipulated directly It is only used for function return address and cannot be used for program data The compiler implements a compiled stack for local data objects see Section 3 5 4 Absolute Variables for information on how this is achieved You must ensure that the maximum stack depth is not exceeded otherwise code may fail Calling too many nested functions may overflow the stack and it is important to take into a
92. bottom being passed to different compilation applications They are processed by these applications and then the application output joins the normal flow indicated in the diagram For example assembly source files are passed straight to the assembler application and are not processed at all by the code generator The output of the assembler an object file with obj extension is passed to the linker in the usual way You can see that any p code files p1 extension or p code libraries 1pp extension that are supplied on the command line are initially passed to the code generator Other examples of input files include object files obj extension and object libraries 1ib extension both of which are passed initially to the linker and even HEX files hex extension which are passed to one of the utility applications called HEXMATE which is run right at the end of the compilation sequence some of the temporary files shown in this diagram are actually preserved and can be inspected after compilation has concluded There are also driver options to request that the compilation sequence stop after a particular application and the output of that application becomes the final output FIGURE 2 2 MULTI FILE COMPILATION preprocess C file f amp parse preprocess E C file amp ie e 1 assemble link parse M generation Intermediate files First stage of compilation Second stage of compilation 2 3 2 Si
93. by hardware on execution of the RETF IE instruction Re enabling interrupts inside an interrupt function may result in code failure 3 9 5 Function Duplication It is assumed by the compiler that an interrupt may occur at any time As all functions are not reentrant because of the dependance on the compiled stack for local objects see Section 3 5 2 2 1 Compiled Stack Operation if a function appears to be called by an interrupt function and by main line code this could normally lead to code failure HI TECH C has a feature which will duplicate the output associated with any function called from more than one call tree in the program s call graph There will be one call tree associated with main line code and one tree for the interrupt function if defined Main line code will call the original function s output and the interrupt will call the dupli cated function s output The duplication takes place only in the called function s output there is no duplication of the C source code itself The duplicated code and data uses different symbols and are allocated different memory so are fully independent This is similar to the process you would need to undertake if this feature was not imple mented in the compiler the C function could be duplicated by hand given different names and one called from main line code the other from the interrupt function How ever you would have to maintain both functions and the code would ne
94. by the user however as it is very closely associated with the runtime startup module it is discussed with the other runtime files in the following sections 2 4 1 Library Files The names of the C standard library files appropriate for the selected target device and other driver options are determined by the driver and passed to the code generator and linker P code libraries 1pp libraries are used by the code generator and object code libraries 11ib files are used by the linker Most library routines are derived from p code libraries By default P ICC will search the 1ib directory under the compiler installation directory for library files that are required during compilation 2 4 1 1 STANDARD LIBRARIES The C standard libraries contain a standardized collection of functions such as string math and input output routines The range of these functions are described in Chapter 7 Library Functions Although it is considered a library function the printf function s code is not found in these library files C source code for this func tion is generated from a special C template file that is customized after analysis of the user s C code See Section PRINTF VPRINTF for more information on using the printf library function and Section 3 12 1 The printf Routine for information on how the printf function is customized when you build a project These libraries also contain C routines that are implicitly called by t
95. c assembler option or a XREF control line The general form of the CREF command is cref options files where options is zero or more options as described below and files is one or more raw cross reference files CREF will accept wildcard filenames and I O redirection Long command lines may be supplied by invoking CREF with no arguments and typing the command line in response to the cref gt prompt A backslash at the end of the line will be interpreted to mean that more command lines follow 2010 Microchip Technology Inc DS51865B page 159 HI TECH C for PIC10 12 16 User s Guide CREF takes the options listed in Section Table 6 4 CREF command line options TABLE 6 4 CREF COMMAND LINE OPTIONS Option Meaning or filename starting with prefix Sstoplist Read file stoplist and ignore any symbols listed Each option is described in more detail in the following sections 6 4 1 F prefix lt is often desired to exclude from the cross reference listing any symbols defined ma system header file e g lt stdio h gt The F option allows specification of a path name prefix that will be used to exclude any symbols defined in a file whose path name begins with that prefix For example F will exclude any symbols from all files with a path name starting with 6 4 2 Hheading The H option takes a string as an argument which will be used as a header in the list ing The default heading is the name of the f
96. changes the ZERO bit in the STATUS register include lt htc h gt void get Input void ZERO 0x1 do not write using C code c read asm include lt caspic h gt bef ZERO bit do not write using in line assembly code endasm process c HI TECH C is unable to interpret the meaning of in line assembly code that is encoun tered in C code Nor does it associate a variable mapped over an SFR to the actual register itself Writing to an SFR register using either of these two methods will not flag the register as having changed and may lead to code failure 3 8 FUNCTIONS Functions may be written in the usual way in accordance with the C language Imple mentation and special features associated with functions are discussed in the following sections 3 8 1 Function Specifiers The only specifiers that have any effect on functions are interrupt and static DS51865B page 82 2010 Microchip Technology Inc C Language Features The interrupt specifier indicates that the function is an interrupt service routine and that it is to be encoded specially to suit this task Interrupt functions are fully described in detail in 3 9 1 Writing an Interrupt Service Routine A function defined using the st atic specifier only affects the scope of the function i e limits the places in the source code where the function may be called Static functions may only be called from code in the file in which the function is
97. counter symbol ssec 122 ROMSIZE MACO stierne ria ES 107 macro comment suppress Characler 132 Numerics assembly label character 122 Ob binary radix specifier ccccseeeeeeecceeeeeeeeeseeeeees 65 nnnn type symbols cccccsssseeeeeeeeesseeeeees 122 133 24 bit double Iwpe 32 dot linker load address characher 146 24 bit float type EE 33 AS WSS E E A E E A A A AE 97 24 bit PECH Eed 56 EISCHEN 97 32 bit double Iwpe 32 GMA TINGS x stesacete ee aaceaa A esate ace 157 32 pit loat type i e ae a Rie nee 33 SCIP UE 31 116 32 bit real types EE 56 SCD EE 40 EE eer 96 2010 Microchip Technology Inc DS51865B page 351 HI TECH C for PIC10 12 16 User s Guide A la Ulead 0 T aidan 177 abs PSECT Hag EE 127 ADS POE e E 102 absolute FUNCTIONS cceeceeeeseeeeeeeeeeeaeeeeeeeees 83 109 absolute Object les 145 absolute psects ooeennenonannnnnneennennena 102 127 128 absolute Variables cccccsssseeeeeeeeeeeeeees 49 78 131 IN program MEMOLY seccccceeeeeeeeeeseeeeees 67 79 linear addreseimg 79 memory allocation cccceeceeeeeeeeseeeeeseeeeeeens 79 ACOS UNCION secen a a 177 address types Eet Ee 145 WO A EE 145 addressing unt 128 advisory messages 19 34 241 alignment Of psects cccccecseeeeeceesseeseeeeeeeeeeeees 129 All SUDO OM WEE 23 ANONYMOUS UNIONS ccccceeeceeeceeeeeceeeeeeeeeaeeeeeseaeees 60 ANSI C standard
98. directive was encountered e g pragma rugsused w I think you meant regsused 336 string concatenation across lines Parser Strings on two lines will be concatenated Check that this is the desired result e g char cp hi there this is okay but is it what you had intended 337 line does not have a newline on the end Parser The last line in the file is missing the newline operating system dependent character from the end Some editors will create such files which can cause problems for include files The ANSI C standard requires all source files to consist of complete lines only DS51865B page 268 2010 Microchip Technology Inc 338 can t create file Any The application tried to create or open the named file but it could not be created Check that all file path names are correct 339 initializer in extern declaration Parser A declaration containing the keyword extern has an initializer This overrides the extern storage class since to Initialise an object it is necessary to define i e allocate storage for it e g extern int other 99 if it s extern and not allocated storage how can it be initialized 340 string not terminated by null character Parser A char array is being initialized with a string literal larger than the array Hence there is insufficient space in the array to safely append a null terminating character e g char foo 5 1
99. ean enone BE ee TE 65 PTT sce ee 128 YAVA EEGEN 70 OG NEEN 128 i l Deg 128 rand unction EE 217 Ee ete te OA 108 RC oscillator Calibration cccccceeceeceecceceeeeeeeeeeess 53 Ge ENEE EE 129 read only variables ccccscssesceecsssseeeeeeeeeeseeeeeeseas 67 EENEG 129 rebuilding projects cccccsesseeeceeceeeseeeeeseeeeseeeeeeeeas 13 S GC DEE EE EE 429 reentrant FUNCTIONS ceeeeceeceeceececeeeeceeeeeeeceeees 74 89 p Seed e registers WE ee eo Pe nT A te ee PE 129 TEE EN 80 Ge EEN e in assembly CODE occccccscsssssssssssvecescesesessseseeeeee 123 St ae tee et ee echt SIDS Cl sare tree sewage EE 82 ene aa Ger E special leie 123 AE EOIS EE 8 absolute 2 0 ccc cecceccecesccecceccecceccecceeeeeeeeaees 127 128 l anenai 129 regsused pragma directive cccceessseeeeeeeeeeeees 110 Geh PEENE EE ey ER relative Jump 122 eee tees te ye i FElOC PSEC HAG E 129 Compiler generated ccccsseeeeeceeeeeesseeeeees 90 ect fil doit valua 143 re ocatab e leie E 148 UE ee EE EE TER differentiating ROM and HAM 129 faction 83 preserving EH 145 Ge se 148 replacing library modules o nnnnn0annnnnannnnnnnnnnnannnne 112 sa EE 7 REPT directive u 133 g EE FESELVING MEMON eccccsssssssesessceseeseesssssssevseee 30 37 38 MAXIMUM address c cececeececcecceceececeeceeeees 128 EE 129 EE 68 SU lietiead eit ie de ee a 128 code executed after 16 94 95 es EEN determining Cause
100. enhanced Mid Range devices this psect will contain the interrupt function body This psect must be linked at the interrupt vector Do not change the default linker options relating to this psect See the CODEOFFSET option Section 2 7 22 CODEOFFSET Offset Program Code to Address if you want to move code when using a bootloader jmp_tab Only used for the baseline processors this is a psect used to store jump addresses and function return values Do not change the default linker options relating to this psect maintext This psect will contain the assembly code for the main function The code for main is segregated as it contains the program entry point Do not change the default linker options relating to this psect as the runtime startup code may fall through into this psect which requires that it be linked immediately after this code powerup Contains executable code for a user supplied power up routine Do not change the default linker options relating to this psect reset_vec This psect contains code associated with the reset vector Do not change the default linker options relating to this psect as it must be linked to the reset vector location of the target device See the CODEOFF SET option Section 2 7 22 CODEOFFSET Offset Program Code to Address if you want to move code when using a bootloader reset_wrap For baseline PIC devices this psect contains code which is executed after the device PC has wrapped
101. entered on a new line in the option file This option can also be used to remove an application from the build sequence If the file parameter is specified as of f execution of the named application will be skipped In most cases this is not desirable as almost all applications are critical to the success of the build process Disabling a critical application will result in catastrophic failure However it is permissible to skip a non critical application such as CLIST or HEXMATE if the final results are not reliant on their function 2 7 54 SHROUD Obfuscate p code Files This option should be used in situations where either p code files or p code libraries are to be distributed and are built from confidential source code C comments which are normally included into these files as well as line numbers and variable name will be removed or obfuscated so that the original source code cannot be reconstructed from distributed files 2 7 55 STRICT Strict ANSI Conformance The STRICT option is used to enable strict ANSI C conformance of all special non standard keywords DS51865B page 40 2010 Microchip Technology Inc PICC Command line Driver The HI TECH C compiler supports various special keywords for example the persis tent type qualifier lf the STRICT option is used these keywords are changed to include two underscore characters at the beginning of the keyword e g __ persistent so as to strictly conform to the
102. expression Check for a malformed type specifier This is an internal error Contact HI TECH Soft ware technical support with details 134 syntax error in el if sizeof Preprocessor The preprocessor found a syntax error in the argument to sizeof ina if expres sion Probable causes are mismatched parentheses and similar things e g fit sizeof int ZK y oops should bar Fit Sizeot int i OxFFFF endif 135 unknown operator in if Preprocessor The preprocessor has tried to evaluate an expression with an operator it does not understand This is an internal error Contact HI TECH Software technical support with details 137 strange character after Preprocessor A character has been seen after the token catenation operator that is neither a letter nor a digit Since the result of this operator must be a legal token the operands must be tokens containing only letters and digits e g Chef character will not lead to a valid token define ce a b a Ck 138 strange character after Preprocessor An unprintable character has been seen after the token catenation operator that Is neither a letter nor a digit Since the result of this operator must be a legal token the operands must be tokens containing only letters and digits e g Chef character will not lead to a valid token define cela bi a b 139 end of file in comment Preprocessor End of file
103. for information on how linker classes are defined 4 3 9 3 4 Delta The delta flag defines the size of the addressing unit In other words the number of data bytes which are associated with each address With PIC Mid Range and baseline devices the program memory space is word addressable hence psects in this soace must use a delta of 2 That is to say each address in program memory requires 2 bytes of data in the HEX file to define their contents Thus addresses in the HEX file will not match addresses in the program memory The data memory space on these devices is byte addressable hence psects in this space must use a delta of 1 This is the default delta value The redefinition of a psect with conflicting delta values can lead to phase errors being issued by the assembler 4 3 9 3 5 Global A psect defined as global will be combined with other global psects with the same name at link time Psects are grouped from all modules being linked Psects are considered global by default unless the local flag is used 4 3 9 3 6 Limit The limit flag specifies a limit on the highest address to which a psect may extend If this limit is exceeded when it is positioned in memory an error will be generated 4 3 9 3 7 Local A psect defined as local will not be combined with other local psects from other modules at link time even if there are others with the same name Where there are two local psects in the one module they reference the
104. g next MOVE OS SOS MOVE ri roO _next oops choose a different name The linker will issue this warning if the symbol C or assembler was defined multiple times in different modules The names of the modules are given in the error message Note that C identifiers often have an underscore prepended to their name after compi lation 846 relocation error Assembler lt is not possible to add together two relocatable quantities A constant may be added to a relocatable value and two relocatable addresses in the same psect may be sub tracted An absolute value must be used in various places where the assembler must know a value at assembly time DS51865B page 310 2010 Microchip Technology Inc 847 operand error Assembler The operand to this opcode is invalid Check your assembler reference manual for the proper form of operands for this instruction 848 symbol has been declared EXTERN Assembler An assembly label uses the same name as a symbol that has already been declared as EXTERN 849 illegal instruction for this processor Assembler The instruction is not supported by this processor 850 PAGESEL not usable with this processor Assembler The PAGESEL pseudo instruction is not usable with the device selected 851 illegal destination Assembler The destination either or w is not correct for this instruction 852 radix must be from 2 16 Assembler The radix specified
105. has been passed a declaration that results in an array having a zero dimension 741 bitfield too large bits Code Generator The maximum number of bits in a bit field is the same as the number of bits in an int GO assuming an int is 16 bits wide SEPUCE lt A unsigned flag 1 unsigned value 12 unsigned cont 4 Ee J OCS that s a total of SE bits 7 object 742 function argument evaluation overlapped Linker A function call involves arguments which overlap between two functions This could occur with a call like void PAL void fn3 7 fn2 3 fn2 9 EE EE Cali St char fn2 char fred return fred fn3 5 1 0 char fn3 char one char two char three return onet twotthree where Col is calling n3 and two arguments are evaluated by calling fn2 which in turn calls n3 The program structure should be modified to prevent this type of call sequence 743 divide by zero Code Generator An expression involving a division by zero has been detected in your code 744 static object has zero size Code Generator A static object has been declared but has a size of zero DS51865B page 300 2010 Microchip Technology Inc 745 nodecount Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 746 object qualified const but not initialized Code Generator An object has been qua
106. header filenames are specified using quote characters rather than angle brackets as in include lcd h then the current working directory is searched in addition to the compiler s include directory Note that if compiling within MPLAB IDE the search path is relative to the output directory not the project directory These default search paths are searched after any user specified directories have been searched For example PICC CHIP 16F877AA C Ic include Id myapp include test c will search the directories c include and d myapp include for any header files included into the source code then search the default include directory This option has no effect for files that are included into assembly source using the assembly INCLUDE directive See Section 4 3 10 3 INCLUDE see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2010 Microchip Technology Inc DS51865B page 25 HI TECH C for PIC10 12 16 User s Guide 2 7 6 L Scan Library The L option is used to specify additional libraries which are to be scanned by the linker Libraries specified using the L option are scanned before the standard C library allowing additional versions of standard library functions to be accessed The argument to L is a library keyword to which the prefix pic numbers representing the processor range number of ROM pages and the number of RAM banks and the suffix 1ib a
107. inbuf sscanf inbuf s Sd values i name amp values i value i gsort values i sizeof values 0 val_cmp vp bsearch values i sizeof values 0 val_cmp if vp EECH fred was net Toundin else printf fred has value d n vp gt value See Also qsort Return Value A to the matched array element if there is more than one matching element any of these may be returned If no match is found a null is returned Note The comparison function must have the correct prototype Synopsis include lt math h gt double ceil double f Description This routine returns the smallest whole number not less than Example include lt stdio h gt include lt math h gt void main void double j scanf liT J Printi ceiling or Slt Is Eer Jy cei KE DS51865B page 184 2010 Microchip Technology Inc Library Functions CGETS CLRWDT Synopsis include lt conio h gt char cgets char s Description The cgets function will read one line of input from the console into the buffer passed as an argument It does so by repeated calls to getche As characters are read they are buffered with backspace deleting the previously typed character and ctrl U deleting the entire line typed so far Other characters are placed in the buffer with a carriage return or line feed newline terminating the function The collected string is null termina
108. information 3 15 3 3 THE PRAGMA PACK DIRECTIVE Some MCUs requires word accesses to be aligned on word boundaries Consequently the compiler will align all word or larger quantities onto a word boundary including structure members This can lead to holes in structures where a member has been aligned onto the next word boundary This behavior can be altered with this directive Use of the directive pragma pack 1 will prevent any padding or alignment within structures Use this directive with caution in general if you must access data that is not aligned on a word boundary you should do so by extracting individual bytes and re assembling the data This will result in por table code Note that this directive must not appear before any system header file as these must be consistent with the libraries supplied P1IC10 12 16 devices can only perform byte accesses to memory and so do not require any alignment of memory objects This pragma will have no effect when used 3 15 3 4 THE PRAGMA PRINTF CHECK DIRECTIVE Certain library functions accept a format string followed by a variable number of argu ments in the manner of printf Although the format string is interpreted at runtime it can be compile time checked for consistency with the remaining arguments This directive enables this checking for the named function for example the system header file lt stdio h gt includes the directive pragma printf_check printf const t
109. is an internal compiler error Contact HI TECH Software technical support with details 721 element count must be constant expression Code Generator This is an internal compiler error Contact HI TECH Software technical support with details DS51865B page 298 2010 Microchip Technology Inc 722 bad variable syntax in intermediate code Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 723 function definitions nested too deep Code Generator This error is unlikely to happen with C code since C cannot have nested functions Contact HI TECH Support with details 724 bad op in revlog Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 726 bad op in uconval Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 727 bad op in bconfloat Code Generator This is an internal code generator error Contact HI TECH technical support with details 728 bad op in confloat Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 729 bad op in conval Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 730 bad op Code Generator This is an internal compiler error Contact HI TECH Software technical suppo
110. is not equal to NULL assert tp If at run time the expression evaluates to false the program will abort with a message identifying the source file and line number of the assertion and the expression used as an argument to it A fuller discussion of the uses of assert is impossible in limited space but it is closely linked to methods of proving program correctness 2010 Microchip Technology Inc DS51865B page 179 HI TECH C for PIC10 12 16 User s Guide Example void ptrfunc struct xyz tp assert tp 0 Note When required for ROM based systems the underlying routine _fassert will need to be implemented by the user ATAN Synopsis include lt math h gt double atan double x Description This function returns the arc tangent of its argument i e it returns an angle e in the range z Example include lt stdio h gt include lt math h gt void main void EE EE O abami See Also Sin cos tan asin acos atan2 Return Value The arc tangent of its argument DS51865B page 180 2010 Microchip Technology Inc Library Functions ATAN2 ATOF Synopsis include lt math h gt double atan2 double x double x Description This function returns the arc tangent of y x Example include lt stdio h gt include lt math h gt void main void PELINE TF atana V0 0 hb rk See Also sin cos tan asin acos a
111. it has been installed WW 1230 dereferencing uninitialized pointer Code Generator A pointer that has not yet been assigned a value has been dereferenced This can result in erroneous behavior at runtime 1235 unknown keyword Driver The token contained in the USB descriptor file was not recognized 1236 invalid argument to Driver An option that can take additional parameters was given an invalid parameter value Check the usage of the option or the syntax or range of the expected parameter 1237 endpoint 0 is pre defined Driver An attempt has been made to define endpoint 0 in a USB file This channel c 1238 FNALIGN failure on Linker Two functions have their auto parameter blocks aligned using the FNALIGN directive but one function calls the other which implies that must not be aligned This will occur if a function pointer is assigned the address of each function but one function calls the other For example int one int a return a int twoline a 4 return Cola t2n ZE Jar 7 ENEC AFADI TENEI ip one 1p 23 ip two ip references one and two two calls one y 1p 67 1239 pointer has no valid targets Code Generator A function call involving a function pointer was made but the pointer was never assigned a target address e g VOL AFFI 3 Eet oops what function does fp point to 1240 unknown checksum algorithm type i Driver The error file specifie
112. limited optimizations and LITE mode only uses a minimum optimization level and will produce relatively large code Only those modes permitted by the compiler license status will be accepted For exam ple if you have purchased a Standard compiler license that compiler may be run in Standard or Lite mode but not the PRO mode 2 7 37 MSGDISABLE Disable Warning Messages This option allows warning or advisory messages to be disabled during compilation of a project The messagelist is a comma separated list of warning numbers that are to be disabled If the number of an error is specified it will be ignored by this option If the message list is specified as 0 then all warnings are disabled See Section 2 6 5 Changing Message Behavior for other ways to disable messages For full information on the compiler s messaging system see Section 2 6 Compiler Messages 2 38 MSGFORMAT Set Advisory Message Format This option sets the format of advisory messages produced by the compiler Warning and error messages are controlled separately by other options See Section 2 7 27 ERRFORMAT Define Format for Compiler Messages and Section 2 7 60 WARNFORMAT Set Warning Message Format for information on changing the format of these sorts of messages See Section 2 6 Compiler Messages for full information on the compiler s messag ing system If you are compiling using MPLAB IDE the format of the compiler messag
113. name __Lname where name is the name of the psect For example Lb ssBANKO is the low bound of the bssBANKO psect The highest address of a psect i e the link address plus the size is represented by the symbol Hname If the psect has different load and link addresses the load start address is represented by the symbol Bname Not all psects are assigned these symbols in particular those that are not placed in memory by a P linker option not driver option See Section 5 2 18 Pspec Psect names may change from one device to another Assembly code can use these symbol by globally declaring them for example GLOBAL __Lidata DS51865B page 114 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 4 Macro Assembler The macro assembler included with HI TECH C PRO for PIC10 12 16 MCU Family assembles source files for PIC 10 12 14 16 17 MCUs This chapter describes the usage of the assembler and the directives assembler pseudo ops and controls accepted by the assembler in the source files Although the term assembler is almost universally used to describe the tool which converts human readable mnemonics into machine code both assembler and assembly are used to describe the source code which such a tool reads The latter is more common and is used in this manual to describe the language Thus you will see the terms assembly language or just assembly as
114. object file obj extension Assembly files are never passed to the code generator and so the code generator technology does not alter the way these files are compiled The Cc option see Section 2 7 1 C Compile to Object File is used to generate object files and halt compilation after the assembly step 2 3 5 Printf check An extra execution of the code generator is performed prior to the actual code genera tion phase This pass is part of the process by which the print f library function is cus tomized see Section 3 12 1 The printf Routine for more details This pass is only associated with scanning the C source code for printf placeholder usage and you will see the code generator being executed if you select the verbose option when you build see Section 2 7 15 V Verbose Compile DS51865B page 14 2010 Microchip Technology Inc PICC Command line Driver 2 4 RUNTIME FILES In addition to the C and assembly source files specified on the command line there are also compiler generated source files and pre compiled library files which might be compiled into the project by the driver These files contain e C Standard library routines e Implicitly called arithmetic routines e User defined library routines e The runtime startup code e The powerup routine e The printf routine Strictly speaking the power up routine is neither a compiler generated source nor a library routine It is fully defined
115. of Hexmate Intel HEX file contained an invalid record type Consult the Intel HEX format specifica tion for valid record types 962 forced data conflict at address h between and Hexmate Sources to HEXMATE force differing data to be stored to the same address More than one source using the specifier store data at the same address The actual data stored there may not be what you expect 963 checksum range includes voids or unspecified memory locations Hexmate Checksum range had gaps in data content The runtime calculated checksum Is likely to differ from the compile time checksum due to gaps unused byes within the address range that the checksum is calculated over Filling unused locations with a known value will correct this 964 unpaired nibble in FILL value will be truncated Hexmate The hexadecimal code given to the FILL option contained an incomplete byte The incomplete byte nibble will be disregarded 965 STRPACK option not yet implemented option will be ignored Hexmate This option currently is not available and will be ignored 966 no END record for HEX file Hexmate Intel HEX file did not contain a record of type END The HEX file may be incomplete WW 967 unused function definition from line Parser The indicated static function was never called in the module being compiled Being static the function cannot be called from other modules so this warning implies the f
116. of the program This is stored in a start record in the object file produced by the assembler Whether this is of any use will depend on the linker DS51865B page 126 2010 Microchip Technology Inc Macro Assembler The default runtime startup code defined by the compiler will contain an END directive with a start address As only one start address can be specified for each project you normally do not need to define this address but may use the END directive with no entry point in any file For example END Start Lab l defines the entry point or END do not define entry point 4 3 9 3 PSECT The PSECT directive declares or resumes a program section It takes as argument a name and optionally a comma separated list of flags The allowed flags are listed in Table 4 6 and specify attributes of the psect Once a psect has been declared it may be resumed later by another PSECT directive however the flags need not be repeated and will be propagated from the earlier decla ration If two PSECT directives are encountered with contradicting flags then an error will be generated TABLE 4 6 PSECT FLAGS Flag Meaning OS Some examples of the use of the PSECT directive follow PSECT fred PSECT biLipsrrze LoO0n 6 lopal PSECT joh abs ovrld class CODE delta 2 4 3 9 3 1 Abs The abs flag defines the current psect as being absolute i e it is to start at location 0 This does not mean that this modules contribution
117. option Driver A command line option that accepts additional parameters was given inappropriate data or insufficient data For example an option may expect two parameters with both being integers Passing a string as one of these parameters or supplying only one parameter could result in this error WW 1198 too many specifications maximum Hexmate This option has been specified too many times If possible try performing these oper ations over several command lines 1199 compiler has not been activated Driver The trial period for this compiler has expired The compiler is now inoperable until acti vated with a valid serial number Contact HI TECH Software to purchase this software and obtain a serial number 1200 Found 0 IXh at address h Hexmate The code sequence specified in a FIND option has been found at this address 1201 all FIND REPLACE code specifications must be of equal width Hexmate All find replace and mask attributes in this option must be of the same byte width Check the parameters supplied to this option For example finding 1234h 2 bytes masked with FFh 1 byte will result in an error but masking with OOFFh 2 bytes will be Ok 2010 Microchip Technology Inc DS51865B page 327 HI TECH C for PIC10 12 16 User s Guide 1202 unknown format requested in FORMAT Hexmate An unknown or unsupported INHX format has been requested Refer to documentation for supported IN
118. or nothing Digits O to 9 Ato F preceded by ox or followed by H orh Hexadecimal numbers must have a leading digit e g Offffh to differentiate them from identifiers Hexadecimal digits are accepted in either upper or lower case Note that a binary constant must have an upper case B following it as a lower case b is used for temporary numeric label backward references 2010 Microchip Technology Inc DS51865B page 121 HI TECH C for PIC10 12 16 User s Guide In expressions real numbers are accepted in the usual format and are interpreted as IEEE 32 bit format 4 3 5 2 CHARACTER CONSTANTS AND STRINGS A character constant is a single character enclosed in single quotes Multi character constants or strings are a sequence of characters not including car riage return or newline characters enclosed within matching quotes Either single quotes or double quotes maybe used but the opening and closing quotes must be the same 4 3 6 Identifiers Assembly identifiers are user defined symbols representing memory locations or num bers A symbol may contain any number of characters drawn from the alphabetics numerics and the special characters dollar question mark and underscore _ The first character of an identifier may not be numeric The case of alphabetics is sig nificant e g Fred is not the same symbol as fred Some examples of identifiers are shown here An_identifier an identifier an _iden
119. output generated by the source files however there are some PICC options which directly map to HEXMATE options and so other functionality can be requested without having to run HEXMATE explicitly on the command line For other functionality the following details the options available when running this application If HEXMATE Is to be run directly its usage Is HEXMATE specs filel HEX specs file2 HEX specs fileN HEX Lopez ons Where filel HEX through to fileN HEX form alist of input Intel HEX files to merge using HEXMATE If only one HEX file is specified then no merging takes place but other functionality is specified by additional options Table 6 8 lists the command line options that HEXMATE accepts TABLE 6 8 HEXMATE COMMAND LINE OPTIONS ADDRESSING Set address fields in all HEXMATE options to use word addressing or other BREAK Break continuous data so that a new record begins at a set address Calculate and store a checksum value FILL Program unused locations with a known value FIND Search and notify if a particular code sequence is detected 2010 Microchip Technology Inc DS51865B page 165 HI TECH C for PIC10 12 16 User s Guide TABLE 6 8 HEXMATE COMMAND LINE OPTIONS CONTINUED Option ect SIZE Report the number of bytes of data contained in the resultant HEX image Store an ASCII string at a fixed address Store an ASCII string at a fixed address using string packing SE Adjust
120. p Example include lt math h gt include lt stdio h gt void main void d double f for i 1 0 lt 10 0 1 0 DELCE 2 SEET S SEN Er POW TAN See Also LOG Er LOG LO I OPA Return Value f to the power of p PRINTF VPRINTF Synopsis include lt stdio h gt Dnt print ACOnSE Char Embe war include lt stdio h gt include lt stdarg h gt int vprinti eons t Char fmt va list va arg DS51865B page 212 2010 Microchip Technology Inc Library Functions Description The printf function is a formatted output routine operating on stdout The printf routine is passed a format string followed by a list of zero or more argu ments In the format string are conversion specifications each of which is used to print out one of the argument list values Each conversion specification is of the form m nc where the percent symbol s intro duces a conversion followed by an optional width specification m The n specification is an optional precision specification introduced by the dof and c is a letter specifying the type of the conversion A minus sign preceding m indicates left rather than right adjustment of the converted value in the field Where the field width is larger than required for the conversion blank padding is performed at the left or right as specified Where right adjustment of a numeric conversion is specified and the first digit of m is 0 then padding
121. processor section with multiple INTSAVE values Only one INT SAVE value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 822 duplicate ROMSIZE for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple ROMSIZE values Only one ROMSIZE value is allowed If you have not manually edited the chip info file contact HI TECH Support with details DS51865B page 308 2010 Microchip Technology Inc 823 duplicate START for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple START values Only one START value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 824 duplicate LIB for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple LIB values Only one LIB value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 825 too many RAMBANK lines in chipinfo file for Assembler The chipinfo file contains a processor section with too many RAMBANK fields Reduce the number of values 826 inverted ram bank in chipinfo file at line Assembler Driver The second HEX number specified in the RAM field in the chipinfo file must be greater in value than the first 827 too many COMMON lines in chipinfo file for Assembler There are too many li
122. same psect A local psect may not have the same name as any global psect even one in another module 4 3 9 3 8 Ovrlid A psect defined as ovr1d will have the contribution from each module overlaid rather than concatenated at link time This flag in combination with the abs flag see Section 4 3 9 3 1 Abs defines a truly absolute psect i e a psect within which any symbols defined are absolute 4 3 9 3 9 Pure The pure flag instructs the linker that this psect will not be modified at runtime and may therefore for example be placed in ROM This flag is of limited usefulness since it depends on the linker and target system enforcing it DS51865B page 128 2010 Microchip Technology Inc Macro Assembler 4 3 9 3 10 Reloc The reloc flag allows specification of a requirement for alignment of the psect on a particular boundary For example the flag reloc 100h would specify that this psect must start on an address that is a multiple of 100h 4 3 9 3 11 Size The size flag allows a maximum size to be specified for the psect e g size 100h This will be checked by the linker after psects have been combined from all modules 4 3 9 3 12 Space The space flag is used to differentiate areas of memory which have overlapping addresses but which are distinct Psects which are positioned in program memory and data memory have a different space value to indicate that the program space address 0 for example is a different loca
123. settings Under Linux and Apple OS X the registry is replaced by an XML file which stores the same information This information is necessary regard less of whether the compiler is run on the command line or from within an IDE The compiler tries to finds the location of this XML file in several ways First the com piler looks for the presence of an environment variable called HTC_XML If present this variable should contain the full path to the XML file including the file s name If this variable is not defined the compiler then searches for an environment variable called HOME This variable typically contains the path to the user s home directory The com piler looks for the XML with a name ht soft xml inthe directory indicated by the HOME variable If the HOME environment variable is not defined the compiler tries to open the file etc htsoft xml If none of these methods finds the XML file an error is gen erated When running the compiler on the command line you may wish to set the PATH envi ronment variable This allows you to run the compiler driver without having to specify the full compiler path with the driver name Note that the directories specified by the PATH variable are only used to locate the compiler driver Once the driver is running it uses the registry or XML file described above to locate the internal compiler applica tions such as the parser assembler and linker etc The directories specified in the PATH va
124. space in the banked RAM for the variable specified 1253 could not find space byte for auto param block Code Generator The code generator could not find space in RAM for the psect that holds auto and parameter variables 1254 could not find space byte for data block Code Generator The code generator could not find space in RAM for the data psect that holds initialized variables 1255 conflicting paths for output directory Driver The compiler has been given contradictory paths for the output directory via any of the O Of OUTDIR options e g outdir o main HEX 1256 undefined symbol treated as HEX constant Assembler A token which could either be interpreted as a symbol or a hexadecimal value does not match any previously defined symbol and so will be interpreted as the latter Use a leading zero to avoid the ambiguity or use an alternate radix specifier such as 0x For example MOV a F7h is this the symbol F7h or the HEX number OxF7 1257 local variable is used but never given a value Code Generator An auto variable has been defined and used in an expression but it has not been assigned a value in the C code before its first use Auto variables are not cleared on startup and their initial value is undefined For example void main void double src out DS51865B page 330 2010 Microchip Technology Inc Out sin sre oops what value was in s
125. storage or code etc to the spec ified offset boundary within the current psect The boundary is specified as a number of bytes following the directive For example to align output to a 2 byte even address within a psect the following could be used ALIGN 2 Note that what follows will only begin on an even absolute address if the psect begins on an even address i e alignment is done within the current psect See Section 4 3 9 3 10 Reloc for psect alignment The ALIGN directive can also be used to ensure that a psect s length is a multiple of a certain number For example if the above ALIGN directive was placed at the end of a psect the psect would have a length that was always an even number of bytes long 4 3 9 15 REPT The REPT directive temporarily defines an unnamed macro then expands it a number of times as determined by its argument For example REPT 3 ADDWF fred w ENDM will expand to ADDWF fred w ADDWF fred w ADDWF fred w See also Section 4 3 9 16 IRP and IRPC 4 3 9 16 IRP AND IRPC The IRP and IRPC directives operate in a similar way to REPT however instead of repeating the block a fixed number of times it is repeated once for each member of an argument list In the case of IRP the list is a conventional macro argument list in the case or IRPC itis each character in one argument For each repetition the argument is substituted for one formal parameter For example IRP number 4
126. string similar to A J ROA d where A represents the load address of the segment and represents division This means Take the load address of the psect divide by 10 HEX then subtract 4 This form can be modified by substituting N for A for to represent multiplication and adding rather than subtracting a constant The token vN is replaced by the ordinal number of the segment which is allocated by the linker For example N 8 4 means take the segment number multiply by 8 then add A The result is the segment selector This particular example would allocate segment selectors in the sequence 4 12 20 for the number of segments defined The selector of each psect is shown in the map file See Section 5 4 2 2 Psect Infor mation listed by Module 5 2 8 Hsymiile This option will instruct the linker to generate a symbol file The optional argument symfile specifies the name of the file to receive the data The default file name is LS ym 5 2 9 H symiile This option will instruct the linker to generate an enhanced symbol file which provides in addition to the standard symbol file class names associated with each symbol and a segments section which lists each class name and the range of memory it occupies This format is recommended if the code Is to be run in conjunction with a debugger The optional argument symfile specifies a file to receive the symbol file The default file name is 1 sym 5 2 10 I
127. that are necessary to make the parts of the declaration bind correctly 282 functions can t return arrays Parser A function can return only a scalar simple type or a structure It cannot return an array 283 dimension required Parser Only the most significant i e the first dimension in a multi dimension array may not be assigned a value All succeeding dimensions must be present as a constant expres sion e g fe TRIS Ekel Se EE Ve Arn ee A int get_element int arr 2 return array 1l1 6 284 invalid dimension Parser This is an internal compiler error Contact HI TECH Software technical support with details 285 no identifier in declaration Parser The identifier is missing in this declaration This error can also occur where the compiler has been confused by such things as missing closing braces e g vold interrupt void 7 what is the name of this function 286 declarator too complex Parser This declarator is too complex for the compiler to handle Examine the declaration and find a way to simplify it If the compiler finds it too complex so will anybody maintaining the code 287 arrays of bits or pointers to bit are illegal Parser lt is not legal to have an array of bits or a pointer to bit variable e g bit barray l0l 2 wrong no bit arrays bat e py 7 WEONG no Pointers to bit varrables 7 288 only functions may be void Parser A v
128. the driver etc Although the information in the MDF can be modified with any text editor this is not rec ommended Message behavior should only be altered using the options and pragmas described in the following sections DS51865B page 18 2010 Microchip Technology Inc PICC Command line Driver 2 6 2 Message Language P ICC supports more than one language for displayed messages There is one MDF for each language supported Under Windows the default language can be specified when installing the compiler The default language may be changed on the command line using the LANG option see Section 2 7 34 LANG Specify the Language for Messages Alternatively it may be changed permanently by using the LANG option together with the SETUP option which will store the default language in either the registry under Windows or in the XML configuration file on other systems On subsequent builds the default lan guage used will be that specified Table 2 3 shows the MDF applicable for the currently supported languages TABLE 2 3 SUPPORTED LANGUAGES men Men English French fr msgs txt If a language other than English is selected and the message cannot be found in the appropriate non English MDF the alert system tries to find the message in the English MDF If an English message string is not present a message similar to error warning generated but no description available where indicates the me
129. the source code The pragma should typically be placed at the top of the source file It is recommended that the code or variables to be separated be placed in a source file all to themselves so they are easily distinguished To determine the psect in which the function or object is normally located define the function or object in the usual way and without this pragma Now check the assembly list file see 4 4 Assembly List Files to determine in which psect the function or object is normally positioned Check either the assembly list file or the map file with the pragma in place to ensure that the mapping has worked as expected and that the function or variable has been linked at the address specified Variables can also be placed at specific positions by making them absolute see Section 3 5 4 Absolute Variables The same is also true for functions See 3 8 3 Changing the Default Function Allocation The decision whether functions or variables should be positioned using absolutes or via the psect pragma should be based on the location requirements Using absolute functions and variables is the easiest method but only allows place ment at an address which must be known prior to compilation The psect pragma is more complex but offers all the flexibility of the linker to position the new psect into memory For example you can specify that functions or variables reside at a fixed address or that they be placed after other
130. to attempt to change the interrupt vector table but this table is in ROM and cannot be changed at runtime 1330 only functions or function pointers may have an instruction set architecture qualifier Code Generator An instruction set qualifier has been used with something that does not represent exe cutable code mipsl6oe int input oops you cannot qualify a variable with an instruction bet type DS51865B page 336 2010 Microchip Technology Inc 1331 interrupt functions may not be qualified Code Generator A illegal function qualifier has been used with an interrupt function mipsl6e void interrupt tisr void CORE_TIMER_VCTR d OOPS you cannot use mipsl6e with interrupt functions 1332 invalid qualifier and type combination on Code Generator Some qualified variables must have a specific type or size A combination has been detected that is not allowed volatile cp0 int mycpvar __REGADDR 7 0 X GODS you must use unsigned types with the cp0 qualifier 1333 cannot extend instruction Assembler An attempt was made to extend a MIPS16E instruction where the instruction is nonex tensible This is an internal error Contact HI TECH Support with details 1334 invalid register operand Assembler An illegal register was used with an assembly instruction Either this is an internal error or caused by hand written assembly code psect my_text 1isa mipsl6e reloc 4
131. to specify the radices are given in Table 3 7 The letters used to spec ify binary or hexadecimal radices are case insensitive as are the letters used to specify the hexadecimal digits TABLE 3 7 RADIX FORMATS binary oe numberor on number 01001010 Any integral constant will have a type of int long int or long long int so that the type can hold the value without overflow Constants specified in octal or hexadeci mal may also be assigned a type of unsigned int unsigned long int or unsigned long long int ifthe signed counterparts are too small to hold the value The default types of constants may be changed by the addition of a suffix after the dig its e g 23U where U is the suffix Table 3 8 shows the possible combination of suffixes and the types that are considered when assigning a type So for example if the suffix 1 is specified and the value is a decimal constant the compiler will assign the type long int if that type will hold the constant otherwise it will assigned long long int If the constant was specified as an octal or hexadecimal constant then unsigned types are also considered 2010 Microchip Technology Inc DS51865B page 65 HI TECH C for PIC10 12 16 User s Guide TABLE 3 8 SUFFIXES AND ASSIGNED TYPES u or U unsigned int unsigned int unsigned long int unsigned long int unsigned long long int unsigned long long int l1orL Long an long int long long int unsigned long int long long int
132. to the psect will start at 0 since other modules may contribute to the same psect See also Section 4 3 9 3 8 Ovrid An abs flagged psect is not relocatable and an error will result if a linker option is issued that attempts to place such a psect at any location 4 3 9 3 2 Bit The bit flag specifies that a psect holds objects that are 1 bit long Such psects will have a scale value of 8 to indicate that there are 8 addressable units to each byte of storage and all addresses associated with this psect will be bit address not byte addresses The scale value is indicated in the map file see Section 5 4 Map Files 2010 Microchip Technology Inc DS51865B page 127 HI TECH C for PIC10 12 16 User s Guide 4 3 9 3 3 Class The class flag specifies a corresponding linker class name for this psect A class is a range of addresses in which psects may be placed Class names are used to allow local psects to be located at link time since they cannot always be referred to by their own name in a P linker option as would be the case if there are more than one local psect with the same name Class names are also useful where psects need only be positioned anywhere within a range of addresses rather than at a specific address The association of a class with a psect that you have defined typically means that you do not need to supply a custom linker option to place it in memory See Section 5 2 1 Aclass low high
133. too large 2010 Microchip Technology Inc DS51865B page 337 HI TECH C for PIC10 12 16 User s Guide 1340 operand must be gt and lt Assembler The operand must be within the specified range ext 0 t1 50 3 Cops third operand 19 too large 1341 pos size must be gt 0 and lt 32 Assembler The size and position operands to bitfield instruction must total a value within the spec ified range ext 0 t1 50 3 Ee GOOS S25 BU Sy IS Oo shange 47 1342 whitespace after Preprocessor Whitespace characters have been found between a backslash and newline characters and will be ignored 1343 hexfile data at address 0x 0x overwritten with Ox Objtohex The indicated address is about to be overwritten by additional data This would indicate more than one section of code contributing to the same address TPA TP aL 1346 can t find 0x words for psect in segment largest unused contiguous range 0x IX Linker See also message 491 The new form of message also indicates the largest free block that the linker could find Unless there is a single space large enough to accom modate the psect the linker will issue this message Often when there is banking or paging involved the largest free space is much smaller than the total amount of space remaining IERT 1347 can t find 0x words 0x withtotal for psect in segment largest unused contiguous range 0x IX Linker
134. type than the rvalue e g char a int b C a b ce int to char conversion May result in truncation 753 undefined shift bits Code Generator An attempt has been made to shift a value by a number of bits equal to or greater than the number of bits in the data type This will produce an undefined result on many pro cessors This is non portable code and is flagged as having undefined results by the C Standard e g Liv Input input lt lt 33 oops that shifts the entire value out 754 bitfield comparison out of range Code Generator This is the result of comparing a bitfield with a value when the value is out of range of the bitfield For example comparing a 2 bit bitfield to the value 5 will never be true as a 2 bit bitfield has a range from 0 to 3 e g struct A unsigned mask 2 mask can hold values 0 to 3 value int compare void return value mask 6 test can 755 divide by zero Code Generator A constant expression that was being evaluated involved a division by zero e g a 0 divide by 0 was this what you were intending 757 constant conditional branch Code Generator A conditional branch generated by an if for while statement etc always follows the same path This will be some sort of comparison involving a variable and a constant expression For the code generator to issue this message the variable must have local scope either aut
135. unsigned long long int uoru andlor unsigned long int unsigned long int unsigned long long int unsigned long long int 11 or LL Long Long wie Long Long Lint unsigned long long int u Or U and 11 or LL unsigned long long int unsigned long long int Here is an example of code that may fail because the default type assigned to a con stant is not appropriate unsigned long int result unsigned char shifter void main void shifter 20 result 1 lt lt shifter code that uses result The constant 1 will be assigned an int type hence the result of the shift operation will be an int and the upper bits of the long variable result can never be set regard less of how much the constant is shifted In this case the value 1 shifted left 20 bits will yield the result 0 not 0x100000 The following uses a suffix to change the type of the constant hence ensure the shift result has an unsigned long type result 1UL lt lt shifter Floating point constants have double type unless suffixed by or F in which case it is afloat constant The suffixes 1 or L specify a long double type which is consid ered an identical type to double by HI TECH C Character constants are enclosed by single quote characters for example a A character constant has int type although this may be optimized to a char type later in the compilation Multi byte character constants are not supported by this implementation St
136. used CROMWELL may use this in the generation of the output format selected Note that to produce output in COFF format an additional argument to this option which also specifies the processor architecture is required Hence for this format the usage of this option must take the form Pname architecture Table 6 7 enumerates the architectures supported for producing COFF files TABLE 6 7 ARCHITECTURE ARGUMENTS PIC12 Microchip baseline PIC MCU chips PIC14 Microchip Mid Range PIC MCU chips PIC14E Microchip Enhanced Mid Range PIC MCU chips eee high end 17CXXX PIC MCU chips 6 5 2 N To produce some output file formats e g COFF CROMWELL requires that the names of the program memory space psect classes be provided The names of the classes are specified as a comma separated list See the map file Section 5 4 Map Files to determine which classes the linker uses For example mid range devices typically requires NCODE CONST ENTRY STRING 6 5 3 D The D option is used to display details about the named input file in a human readable format This option is useful if you need to check the contents of the file which are usually binary files The input file can be one of the file types as shown in Table 6 5 6 5 4 C This option will attempt to identify if the specified input files are one of the formats as shown in Table 6 5 If the file is recognized a confirmation of its type will be displayed 6 5 5 F
137. using the RADIX assembler directive must be in the range from 2 binary to 16 hexadecimal 853 invalid size for FNSIZE directive Assembler The assembler FNSIZE assembler directive arguments must be positive constants 855 ORG argument must be a positive constant Assembler An argument to the ORG assembler directive must be a positive constant or a symbol which has been equated to a positive constant e g ORG E this must a poste E to the current CN 856 ALIGN argument must be a positive constant Assembler The align assembler directive requires a non zero positive integer argument 857 psect may not be local and global Linker A local psect may not have the same name as a global psect e g psect text class CODE text is implicitly global MOVE rO ri elsewhere psect text local class CODE MOVE E2 r4 The global flag is the default for a psect if its scope is not explicitly stated 859 argument to C option must specify a positive constant Assembler The parameter to the LIST assembler control s c option which sets the column width of the listing output must be a positive decimal constant number e g LIST C a0h constant must be decimal and positive try LIST C 80 2010 Microchip Technology Inc DS51865B page 311 HI TECH C for PIC10 12 16 User s Guide 860 page width must be gt 49 Assembler The page width suboption to the LIST assembler directive must specify a wi
138. value 95000 0 However the next highest number it can represent is 95002 0 and it is impossible to represent any value in between these two in such a type as it will be rounded This implies that C code which compares floating point type may not behave as expected For example volatile float myFloat myFloat 95002 0 if myFloat 95001 0 value will be rounded PORTA this line will be executed in which the result of the if expression will be true even though it appears the two values being compared are different Compare this to a 32 bit floating point type which has a higher precision It also can exactly store 95000 0 as a value The next highest value which can be represented is approximately 95000 00781 The characteristics of the floating point formats are summarized in Table 3 6 The sym bols in this table are preprocessor macros which are available after including lt float h gt in your source code Two sets of macros are available for float and double types where xxx represents FLT and DBL respectively So for example FLT_MAX represents the maximum floating point value of the float type It can have two values depending on whether float is a 24 or 32 bit wide format DBL_MAX rep resents the same values for the double type As the size and format of floating point data types are not fully specified by the ANSI Standard these macros allow for more portable code which can check the limits of the range of value
139. values may be assigned to the members but the expression must evaluate to a constant of type int e g enum one 1 two about_three 3 12 no non int values allowed DS51865B page 320 2010 Microchip Technology Inc 992 can t find op Assembler This is an internal compiler error Contact HI TECH Software technical support with details 993 some command line options are disabled Driver The compiler is operating in demo mode Some command line options are disabled 994 some command line options are disabled and compilation is delayed Driver The compiler is operating in demo mode Some command line options are disabled the compilation speed will be slower 995 some command line options are disabled code size is limited to 16kB compilation is delayed Driver The compiler is operating in demo mode Some command line options are disabled the compilation speed will be slower and the maximum allowed code size is limited to 16kB WW WW 1015 missing specification in chipinfo file at line Driver This attribute was expected to appear at least once but was not defined for this chip WW 1016 missing argument to Driver This value of this attribute is blank in the chip configuration file specification in chipinfo file at line IERT 1017 extraneous argument to specification in chipinfo file at line Driver There are too many attributes for the listed specifi
140. want to deliberately redefine a macro use undef first to remove the original definition e g define ONE 1 elsewhere Is this correct It will overwrite the first definition define ONE one 112 define syntax error Preprocessor A macro definition has a syntax error This could be due to a macro or formal parameter name that does not start with a letter or a missing closing parenthesis e g aetine FOO a 2b bar a 2b 2b is not to be 113 unterminated string in preprocessor macro body Preprocessor Assembler A macro definition contains a string that lacks a closing quote 114 illegal undef argument Preprocessor The argument to undef must be a valid name It must start with a letter e g Zundert 6YYY this isn t a valid symbol name 2010 Microchip Technology Inc DS51865B page 243 HI TECH C for PIC10 12 16 User s Guide TP a 115 recursive preprocessor macro definition of defined by Preprocessor The named macro has been defined in such a manner that expanding it causes a recur sive expansion of itself 116 end of file within preprocessor macro argument from line Preprocessor A macro argument has not been terminated This probably means the closing paren thesis has been omitted from a macro invocation The line number given is the line where the macro argument started e g define FUNC a b func atb FUNC 5 d gops where
141. warning sensitivity Prefix to any option to overwrite other data in its address range if necessary The input parameters to HEXMATE are now discussed in greater detail Note that any integral values supplied to the HEXMATE options should be entered as hexadecimal values without leading 0x or trailing h characters Note also that any address fields specified in these options are to be entered as byte addresses unless specified otherwise in the ADDRESSING option 6 6 1 1 SPECIFICATIONS FILENAME HEX Intel HEX files that can be processed by HEXMATE should be in either INHX82 or INHX8M format Additional specifications can be applied to each HEX file to put restrictions or conditions on how this file should be processed If any specifications are used they must precede the filename The list of specifications will then be separated from the filename by a comma A range restriction can be applied with the specification rSt art End A range restric tion will cause only the address data falling within this range to be used For example r1l00 1FF myfile hex will use myfile hex as input but only process data which is addressed within the range 100h 1FFh inclusive from that file An address shift can be applied with the specification soffset If an address shift is used data read from this HEX file will be shifted by the offset specified to a new address when generating the output The offset can be either positive or negative For ex
142. what you want to do use a typecast to inform the compiler that you want the conversion and the warning will be suppressed e g Long inptrt char sep co Ganputy is this correct This is common way of accessing bytes within a multi byte variable To indicate that this is the intended operation of the program use a cast cp char amp input that s better This warning may also occur when converting between pointers to objects which have the same type but which have different qualifiers e g char cp yes but what sort of characters cp I am a string of characters If the default type for string literals is const char then this warning is quite valid This should be written const char cp cp I am a string of characters that s better Omitting a qualifier from a pointer type is often disastrous but almost certainly not what you intend 360 array index out of bounds Parser An array is being indexed with a constant value that is less than zero or greater than or equal to the number of elements in the array This warning will not be issued when accessing an array element via a pointer variable e g ine sie E Apu LO i input 2 oops this element doesn t exist TO STEE St S Seel ee EE 7 361 function declared implicit int Parser Where the compiler encounters a function call of a function whose name is presently undefined the compile
143. will be per formed with zeroes rather than blanks For integer formats the precision indicates a minimum number of digits to be output with leading zeros inserted to make up this number if required A hash character preceding the width indicates that an alternate format is to be used The nature of the alternate format is discussed below Not all formats have alternates In those cases the presence of the hash character has no effect If the character is used in place of a decimal constant e g in the format s d then one integer argument will be taken from the list to provide that value The types of conversion are f Floating point mis the total width and n is the number of digits after the decimal point If n is omitted it defaults to 6 If the precision is zero the decimal point will be omitted unless the alternate format is specified e Print the corresponding argument in scientific notation Otherwise similar to f g Use e or f format whichever gives maximum precision in minimum width Any trailing zeros after the decimal point will be removed and if no digits remain after the decimal point it will also be removed ox Xud Integer conversion in radices 8 16 16 10 and 10 respectively The conver sion is signed in the case of a unsigned otherwise The precision value is the total number of digits to print and may be used to force leading zeroes E g sp 4x will print at least 4 HEX digits in an 8 wide field Preced
144. will define an assembly label main This mapping is such that an ordinary symbol defined in the assembly domain cannot interfere with an ordinary symbol in the C domain So for example if the symbol main is defined in the assembly domain it is quite distinct to the main symbol used in C code and they refer to different locations lf the C function is qualified st atic and there is more than one function in the program with exactly the same name the name of the first function will map to the usual assem bly symbol and the subsequent functions will map to a special symbol of the form fileName functionName where fileName is the name of the file that contains the function and functionName is the name of the function For example a program contains the definition for two static functions both called add One lives in the file main c and the other in lcd c The first function will gen erate an assembly label _add The second will generate the label 1cd add DS51865B page 100 2010 Microchip Technology Inc C Language Features The name of a non auto C variable also maps to an assembler label that will have the same name but with an underscore prepended So the variable result will define an assembly label result If the C variable is qualified st atic there again is a chance that there could be more than one variable in the program with exactly the same C name The same rules apply to variables as to functions The name of
145. will represent code that will jump to itself and form an endless loop By using this symbol and an offset a relative jump destination can be specified DS51865B page 122 2010 Microchip Technology Inc Macro Assembler The address represented by is a word address baseline and Mid Range devices use program memory which is word addressable and thus any offset to this symbol represents a number of instructions For example GOTO S 2 MOV LW 8 MOVWE _foo will skip one instruction 4 3 6 4 REGISTER SYMBOLS Code in assembly modules may gain access to the special function registers by includ ing pre defined assembly header files The appropriate file can be included by add the line include lt aspic h gt to the assembler source file Note that the file must be included using a C pre processor directive and hence the option to pre process assembly files must be enabled when compiling see Section 2 7 11 P Preprocess Assembly Files This header file contains appropriate commands to ensure that the header file specific for the target device is included into the source file These header files contain EQU declarations for all byte or multi byte sized registers and define macros for named bits within byte registers 4 3 6 5 SYMBOLIC LABELS A label is a symbolic alias which is assigned a value equal to the current address within the current psect Labels are not assigned a value until link time A label definition co
146. 010 Microchip Technology Inc DS51865B page 239 HI TECH C for PIC10 12 16 User s Guide NOTES DS51865B page 240 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 8 Error and Warning Messages This chapter lists error warning and advisory messages with an explanation of each message This is the complete and historical message set covering all HI TECH C compilers and all compiler versions As a result not all messages shown here may be relevant for the compiler or compiler version you are using Most messages have been assigned a unique number which appears in brackets before each message description and which is also printed by the compiler when the message is issued The messages shown here are sorted by their number Un num bered messages appear toward the end and are sorted alphabetically The name of the application s that could have produced the messages are listed in brackets opposite the error message In some cases examples of code or options that could trigger the error are given The use of in the error message is used to represent a string that the compiler will substitute that is specific to that particular error Note that one problem in your C or assembler source code may trigger more than one error message You should attempt to resolve errors or warnings in the order in which they are produced 1 too many errors all applications The executin
147. 10 TABLE 2 10 SUPPORTED IDES eme DE ETECH S HETIDE Microchip s MPLAB IDE 2 7 34 LANG Specify the Language for Messages This option allows the compiler to be configured to produce error warning and some advisory messages in languages other than English English is the default language unless this has been changed at installation or by the use of the SETUP option Some messages are only ever printed in English regard less of the language specified with this option See Section 2 6 2 Message Lan guage for more information 2010 Microchip Technology Inc DS51865B page 33 HI TECH C for PIC10 12 16 User s Guide Table 2 11 shows those languages currently supported TABLE 2 11 SUPPORTED LANGUAGES Engish fr french francais French de german deutsch German 2 7 35 MEMMAP Display Memory Map This option will display a memory map for the specified map file This option is seldom required but would be useful if the linker is being driven explicitly i e instead of in the normal way through the command line driver This command would display the mem ory summary which is normally produced at the end of compilation by the driver 2 7 36 MODE Choose Compiler Operating Mode This option selects the basic operating mode of the compiler The available types are pro std and lite Acompiler operating in PRO mode uses full optimization and pro duces the smallest code size Standard mode uses
148. 10f0h 495 use of both with and INCLASS INCLASS allocation is illegal Linker lt is not legal to specify both the link and location of a psect as within a class when that psect was also defined using a with psect flag 497 psect exceeds max size h gt h Linker The psect has more bytes in it than the maximum allowed as specified using the size psect flag 498 psect exceeds address limit h gt h Linker The maximum address of the psect exceeds the limit placed on it using the limit psect flag Either the psect needs to be linked at a different location or there is too much code data in the psect 499 undefined symbol Assembler Linker The symbol following is undefined at link time This could be due to spelling error or failure to link an appropriate module 500 undefined symbols Linker A list of symbols follows that were undefined at link time These errors could be due to spelling error or failure to link an appropriate module 501 program entry point is defined more than once Linker There is more than one entry point defined in the object files given the linker End entry point is specified after the END directive The runtime startup code defines the entry point e g powerup goto start END powerup end of file and define entry point other files that use END should not define another entry point 502 incomplete record body length Linker An object file contained
149. 155 Site 157 limit P SECT ta sn ii nie acteedeeeed 128 147 WEVA WE 54 linear data Memory nusenennnnnennnnnnnnnnnnnnnrennnnnennenne 70 link addresses AAA 145 linker GIKOMMOCSSAGESS EE 143 MOUTIG S stasen mee tone eivacatatednsanl ey 148 Mei EU 141 ODEON ea errr ter anor Steamer er ete emer 148 SE 155 Reiler dl 145 warning threshold ccccsssseeecssseeeeeeeeeees 147 linker classes 38 39 128 146 linker errors OOM MING eege 144 undefined symbols snenennnnnnennnnnnnnsennnnnennne 144 linker option eege ET 142 146 EE A E A E EE etree 143 D a A 143 DISE oua a seater cate ances 147 EE A E PEE ITE E AEO A E eer eee 143 RS 147 eege 148 Kee 143 E EE 144 EE 144 E EE 144 Kee 144 td E 144 SE 144 BE 145 D eee eee rere eee eee ee cere ee eer ee eee ene eee ee 145 VB 145 KEE 145 NO RF EE 148 2010 Microchip Technology Inc EE 145 lalstctol EE 70 Eeer eege 128 129 145 146 Helge EE 32 ee EE 146 memory AIlOGANOM EE 70 CS Eee ae ee oy eee ee E ee Cee ee eae 146 auto va rta bles 73 WEE 147 Gala MEMO EE 70 ee 147 al au He 80 eebe 148 RIICHT ee 83 EE 147 NON AUtO variables ccceeececeeseeeeeeeeeeeeseeeess 71 EE 147 Sisi Bu Lee EE 77 tre 147 Static variables A 72 linker Options eer 141 150 MEMO e ee 80 CUPS UNG EE 26 MEMO SPACES rrenean 70 lan lg Le EE 150 memset FUNCTION ccccccceeeeecceeeeeeecesseesseneeeeens 210 Adis dia a 142 merging hex TEE 166 linker
150. 2 4 2 Runtime Startup Code Assembly list files use a 1st extension and due to the additional information placed in these files cannot be used as assembly source files In the case of listings for C source code the list file shows both the original C code and the corresponding assembly code generated by the compiler See Section 4 4 Assembly List Files for full information regarding the content of these files The same information is shown in the list files for assembly source code This option is on by default when compiling under MPLAB IDE and using the HI TECH Universal Toolsuite 2 7 18 ADDRQUAL Set Compiler Response to Memory Qualifiers The ADDRQUAL option indicates the compiler s response to non standard memory qualifiers in C source code By default these qualifiers are ignored Le they are accepted without error but have no effect Using this option allows these qualifiers to be interpreted differently by the com piler The qualifiers affected by this option are the bankx qualifiers bank0O bank1 bank2 etc and near The suboptions are detailed in Table 2 7 TABLE 2 7 COMPILER RESPONSES TO MEMORY QUALIFIERS Selection Response O O The qualifiers will be honored If they cannot be met an error will be issued request The qualifiers will be honored if possible No error will be generated if they cannot be followed The qualifiers will be ignored and code compiled as if they were not used
151. 2345 the string stored in foo won t have a null terminating i e foo PALSY De Ng eae GE 343 implicit return at end of non void function Parser A function which has been declared to return a value has an execution path that will allow it to reach the end of the function body thus returning without a value Either insert a return statement with a value or if the function is not to return a value declare it void eg int mydiv double a int b if b 0 return a b what about when b is 0 warning flagged here 344 non void function returns no value Parser A function that is declared as returning a value has a return statement that does not specify a return value e g int get_value void if flag return val return what is the return value in this instance 345 unreachable code Parser This section of code will never be executed because there is no execution path by which it could be reached e g while l1 ZZ now does this loop finish process flag FINISHED how do we get here 346 declaration of hides outer declaration Parser An object has been declared that has the same name as an outer declaration i e one outside and preceding the current function or block This is legal but can lead to acci dental use of one variable when the outer one was intended e g int input input has filescope 2010 Microchip Technology I
152. 34 2010 Microchip Technology Inc Library Functions Note The time routine is not supplied if required the user will have to implement this routine to the specifications outlined above TOLOWER TOUPPER TOASCII TRUNC Synopsis include lt ctype h gt char toupper int c char tolower int c char toascili int c Description The toupper function converts its lower case alphabetic argument to upper case the tolower routine performs the reverse conversion and the toascii macro returns a result that is guaranteed in the range 0 0177 The functions toupper and tolower return their arguments if it is not an alphabetic character Example include lt stdio h gt include lt ctype h gt include lt string h gt void main void Char lt arrayd T7 Int EC For Ate lt Strilen array 3 FRIJ 4 printer Cc cto howertarray Li aly ys EE CTNS See Also islower isupper isascii et al Synopsis include lt math h gt double trunc double x Description The trunc function rounds the argument to the nearest integer value in floating point format that is not larger in magnitude than the argument 2010 Microchip Technology Inc DS51865B page 235 HI TECH C for PIC10 12 16 User s Guide UDIV ULDIV Example include lt math h gt void main void double input rounded input 1234 5678 rounded trunc input Se
153. 5 Assembler The form length specified using the F length option must be at least 15 lines Setting this length to zero is allowed and turns off paging altogether The default value is zero pageless 836 no file arguments Assembler The assembler has been invoked without any file arguments It cannot assemble any thing 839 relocation too complex Assembler The complex relocation in this expression is too big to be inserted into the object file 840 phase error Assembler The assembler has calculated a different value for a symbol on two different passes This is probably due to bizarre use of macros or conditional assembly 841 bad source destination for movfp movpf instruction Assembler The absolute address specified with the MOVFP MOVPF instruction Is too large 842 bad bit number Assembler A bit number must be an absolute expression in the range 0 7 843 a macro name can t also be an EQU SET symbol Assembler An EQU or SET symbol has been found with the same name as a macro This is not allowed For example getval MACRO MOV r0 ri ENDM getval EQU 55h oops choose a different name to the macro 844 lexical error Assembler An unrecognized character or token has been seen in the input 845 symbol defined more than once Assembler This symbol has been defined in more than one place The assembler will issue this error if a symbol is defined more than once in the same module e
154. 592 2388130 China Zhuhai Tel 86 756 3210040 Fax 86 756 3210049 ASIA PACIFIC India Bangalore Tel 91 80 3090 4444 Fax 91 80 3090 4123 India New Delhi Tel 91 11 4160 8631 Fax 91 11 4160 8632 India Pune Tel 91 20 2566 1512 Fax 91 20 2566 1513 Japan Yokohama Tel 81 45 471 6166 Fax 81 45 471 6122 Korea Daegu Tel 82 53 744 4301 Fax 82 53 744 4302 Korea Seoul Tel 82 2 554 7200 Fax 82 2 558 5932 or 82 2 558 5934 Malaysia Kuala Lumpur Tel 60 3 6201 9857 Fax 60 3 6201 9859 Malaysia Penang Tel 60 4 227 8870 Fax 60 4 227 4068 Philippines Manila Tel 63 2 634 9065 Fax 63 2 634 9069 Singapore Tel 65 6334 8870 Fax 65 6334 8850 Taiwan Hsin Chu Tel 886 3 6578 300 Fax 886 3 6578 370 Taiwan Kaohsiung Tel 886 7 213 7830 Fax 886 7 330 9305 Taiwan Taipei Tel 886 2 2500 6610 Fax 886 2 2508 0102 Thailand Bangkok Tel 66 2 694 1351 Fax 66 2 694 1350 EUROPE Austria Wels Tel 43 7242 2244 39 Fax 43 7242 2244 393 Denmark Copenhagen Tel 45 4450 2828 Fax 45 4485 2829 France Paris Tel 33 1 69 53 63 20 Fax 33 1 69 30 90 79 Germany Munich Tel 49 89 627 144 0 Fax 49 89 627 144 44 Italy Milan Tel 39 0331 74261 1 Fax 39 0331 466781 Netherlands Drunen Tel 31 416 690399 Fax 31 416 690340 Spain Madrid Tel 34 91 708 08 90 Fax 34 91 708 08 91 UK Wokingham Tel 44 118 921 5869 Fax 44 118 921 5820 08 04 10 DS5186
155. 5B page 104 All C source files are preprocessed before compilation The preprocessed file is always left behind and willhave a pre extension and the same base name as the source file from which it is derived The PRE option can be used to preprocess and then stop the compilation See Section 2 7 46 PRE Produce Preprocessed Source Code Assembler files can also be preprocessed if the P driver option is issued See Section 2 7 11 P Preprocess Assembly Files 3 15 1 Preprocessor Directives HI TECH C accepts several specialized preprocessor directives in addition to the standard directives All of these are listed in Table 3 10 Macro expansion using arguments can use the character to convert an argument to a string and the sequence to concatenate arguments TABLE 3 10 PREPROCESSOR DIRECTIVES Directe Mem Bampe Preprocessor null directive do nothing assert Generate error if condition false assert SIZE gt 10 asm Signifies the beginning of in line asm MOVLW FFh assembly endasm 2010 Microchip Technology Inc C Language Features TABLE 3 10 PREPROCESSOR DIRECTIVES CONTINUED Directive Meaning define Define preprocessor macro define SIZE 5 define FLAG define add a b a b Terminate conditional source inclusion if Include source lines if constant Pit SrA n SE expression true c process 10 else skip endif ifdef Include source lines if preprocessor if
156. 5B page 205 HI TECH C for PIC10 12 16 User s Guide LTOA Example d Sept lt stdio h gt include lt setjmp h gt include lt stdlib h gt jmp bud yb void inner void longjmp jb 5 void main void int i LECL setyjmp jb princi werurned 2a n 2 exit 0 printi returned 0 Gqood n EE EE aie EE inner EE returned badi yn See Also set jmp Return Value The long jmp routine never returns Note The function which called set jmp must still be active when long jmp is called Breach of this rule will cause disaster due to the use of a stack containing invalid data Synopsis include lt stdlib h gt Char Se ere char bur bong Vay Int base Description The function itoa converts the contents of val into a string which is stored into buf The conversion is performed according to the radix specified in base buf IS assumed to reference a buffer which has sufficient space allocated to it DS51865B page 206 2010 Microchip Technology Inc Library Functions Example include lt stdlib h gt include lt stdio h gt void main void char buf 10 UCSI L22456 e LOr printi buUrter holds sein bury See Also strtol 1toa utoa ultoa Return Value This routine returns a copy of the buffer into which the result is written MEMCHR Synopsis fineclude lt string h gt voro memohr
157. 5B page 364 2010 Microchip Technology Inc
158. 8 bytes to write each time it is called and can be called repeatedly to store multiple blocks __EEPROM_DATA will begin writing to EEPROM address zero and will auto increment the address written to by 8 each time it is used Example include lt htc h gt __EEPROM DATA 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 _ EEPROM_DATA 0x08 0x09 0x04 0x0B 0x0C 0x0D Ox0E Ox0F void main void See also CONFIG DS51865B page 174 2010 Microchip Technology Inc Library Functions __IDLOC __IDLOC7 Synopsis include lt htc h gt _IDLOC x Description This macro places data into the device s special locations outside of addressable memory reserved for ID This would be useful for storage of serial numbers etc The macro will attempt to write 4 nibbles of data to the 4 locations reserved for ID purposes Example include lt htc h gt pe EE store Ly Sy E and Oain the ID registers 7 _IDLOC 15F0 void main void See also __ IDEOCF CONFIG Synopsis include lt htc h gt _ IDLOC 7 a b c d Description This macro places data into the device s special locations outside of addressable memory reserved for ID This would be useful for storage of serial numbers etc The macro will attempt to write 7 bits of data to each of the 4 locations reserved for ID purposes Example Pinclude shtek ZZ wid store kb 70 1 and SAN imn the ID regi
159. 865h 6C6Ch 6F00h DW number 2010 Microchip Technology Inc DS51865B page 133 HI TECH C for PIC10 12 16 User s Guide ENDM would expand to DW 4865h DW 6C6Ch DW oFOOh Note that you can use local labels and angle brackets in the same manner as with conventional macros The IRPC directive is similar except it substitutes one character at a time from a string of non space characters For example IRPC char ABC DB char ENDM will expand to DB Ar DB Dr EE et 4 3 9 17 BANKSEL This directive can be used to generate code to select the bank of the operand The operand should be the symbol or address of an object that resides in the data memory Depending on the target device the generated code will either contain one or more bit instructions to set clear bits in the appropriate register or use a MOVLB instruction in the case of enhanced Mid Range PIC devices In case this directive expands to more than one instruction it should not immediately follow a BTFSX instruction For example MOV LW 20 BANKSEL foobar select bank for next file instruction MOVWE _foobar amp 07fh write data and mask address 4 3 9 18 PAGESEL This directive can be used to generate code to select the current page Le the page which contains this directive Depending on the target device the generated code will either contain one or more bit instructions to set clear bits in the appropriate register or use a MOVLP instru
160. 9 The local time zone and Daylight Saving Time 7 12 1 Default timezone is GMT Can be specified by setting the variable t ime_zone Day light saving is not implemented 2010 Microchip Technology Inc DS51865B page 349 HI TECH C for PIC10 12 16 User s Guide NOTES DS51865B page 350 2010 Microchip Technology Inc MICROCHIP HI TECH C FOR PIC10 12 16 USER S GUIDE Index SUDO EON E 24 OX MEET 11 le KEEN 11 15 141 148 155 157 SEET REH 142 EE 132 Jop les 11 15 141 155 _ assembly label Character cscs 100 122 SE MLS Soiree cic eles ee ee 29 BOO type ENEE 96 TEE 149 __BXxxx type symbols ge Ge 114 obj nes 11 14 113 118 145 155 157 CONFIG margin 49 173 AOR TINS AE E E TAN 116 DATE MACIO ENEE 107 SE I eee eee eet eee 7 11 36 155 DEBUG Macr0 ENEE 148 ENEE 11 36 104 delay MS MACTO essen 174 pro fles ccceccceccsescssecssecsvecssecssesseessesssesssesseessesseeeee 37 __delay_us RA et ete estes eee ee 174 sym fla ch neat soak ato beg eee ca 17 25 144 146 __EEPROM_DATA Macr0 sscseeeeereeeeeeees 51 174 address CONSHIUCT cceccccceceeeeecceeeceetteeeeeeeeees 78 SPIES NAGI era Oi al eee eects 107 command file speclter 8 142 Hxxxx type symbols EE 114 psect address symbol 146 IDLOC MACrO EE 90 175 command file character 8 IDLOC7 Macro oaeen 50 175 amp macro concatenation character 121 132 a HINE IMA CMO EE 107 a
161. ANSI standard Thus if you use this option you will need to use the qualifier _ persistent in your code not persis tent Be warned that use of this option may cause problems with some standard header files e g lt htc h gt as they contain special keywords 2 7 56 SUMMARY Select Memory Summary Output Type Use this option to select the type of memory summary that is displayed after compila tion By default or if the mem suboption is selected a memory summary is shown This shows the total memory usage for all memory spaces A psect summary may be shown by enabling the psect suboption This shows individ ual psects after they have been grouped by the linker and the memory ranges they cover Table 2 15 shows what summary types are available TABLE 2 15 MEMORY SUMMARY SUBOPTIONS One impies Beete 7 Summary of psect usage of psect usage A summary of psect names andthe _ summary of psect names and the addresses where they were linked will be shown General summary of memory used A concise summary of memory used will be shown class Summary of class usage A summary of all classes in each memory space will be shown Summary of address used within the A summary of addresses and HEX HEX file files which make up the final output file will be shown Whether summary information is Summary information will be shown shown on the screen or shown and on screen and saved to a file saved to a file see Section 2 8 M
162. Address is the location to store this code or the first repetition thereof e Interval is optional and specifies the address shift per repetition of this code e Repetitions is optional and specifies the number of times to repeat this code For example SERIAL 000001 EFFE will store HEX code 00001h to address EFFEh Another example SERIAL 0000 2 1000 10r5 will store 5 codes beginning with value 0000 at address 1000h Subsequent codes will appear at address intervals of 10h and the code value will change in increments of 2h 6 6 1 16 SIZE Using the SIZE option will report the number of bytes of data within the resultant HEX image to standard output The size will also be recorded in the log file if one has been requested 6 6 1 17 STRING The STRING option will embed an ASCII string at a fixed address The usage of this option is STRING Address tCode Text where e Address is the location to store this string e Code is optional and allows a byte sequence to trail each byte in the string This can allow the bytes of the string to be encoded within an instruction e Text Is the string to convert to ASCII and embed For example STRING 1000 My favorite string will store the ASCII data for the string My favorite string including the nul character terminator at address 1000h And again STRING 1000t34 My favorite string will store the same string with every byte in the string being trai
163. B69Bh 11111011b 1 0100110101101101 2 77000e 37 0011011b 251 1 302447676659 24 bit 42123Ah 10000100b 1 001001000111010b 36 557 132 1 142395019531 IK The 32 bit example in Table 3 5 can be calculated manually as follows The sign bit is zero the biased exponent is 251 so the exponent is 251 127 124 Take the binary number to the right of the decimal point in the mantissa Convert this to dec imal and divide it by 2 3 where 23 is the number of bits taken up by the mantissa to give 0 302447676659 Add 1 to this fraction The floating point number is then given by 1 x2 4 4 302447676659 which becomes 1x2 126764793256e 37 x1 302447676659 which is approximately equal to 2 7000e 37 Binary floating point values are sometimes misunderstood It is important to remember that not every floating point value can be represented by a finite sized floating point number The size of the exponent in the number dictates the range of values that the number can hold and the size of the mantissa relates to the spacing of each value that can be represented exactly Thus the 24 bit format allows for values with approximately the same range of values but the values that can be exactly represented by this format are more widely spaced 2010 Microchip Technology Inc DS51865B page 57 HI TECH C for PIC10 12 16 User s Guide So for example if you are using a 24 bit wide floating point type it can exactly store the
164. Chapter 1 HI TECH C Compiler for PIC10 12 16 MCUs EROA Kee EE 5 1 2 Compiler Description and Documentation cee ee cece eeeeeeeeeeeeeeeeeeeeeeeeetans 5 Jeer DEVICE DESEMDNOM Zeene 5 Chapter 2 PICC Command line Driver SH ENEE cerere N EE 7 22 INVOKING TRE GOMDIGR EE 7 2 3 The Compilation Sequence EE 9 2A RUNUME FIOS ee ee 15 2 Reenert EE 16 2 6 Compiler WIESSAQES EE 18 2 f PLCC Driver Ee Te In RRE ee EE 22 2 8 MPLAB IDE Universal Toolsuite Equivalents cccceceeeeeeeeeeeeeeeeeeeeeeeees 42 Chapter 3 C Language Features Sable dr e elteren EE 47 SCORING GC otandard WEE 47 3 3 Processor related Features cccccccceseccceececsesecceeeeseusecseeeesuseeseeessseeenanees 47 3 4 Supported Data Types and Variables 00 0 ccccseeeceeeeeeeeeeeeeeeneeeeeeaaeeeesaees 54 SNE Lei E leede AR Tue Ae E 70 3 6 Operators ANd Statements ccccccseecccceseeeeceeeeeeceeeeeeeeeeeeseaeeeesaeeeessaeseesaees 80 Ot e SAG EE 82 SS OsPUNCTONS esise eere madera EEE EEE ENE EREE 82 SE EE 86 IO I OCC ls serie let tase hash eee lat oat alae en dl cae ia aaa eset 90 3 11 Main Runtime Startup and Reset ce cccceccccseeceeeeeeceeeeeeeeeeeseeeesaeeeeeees 93 3 12 LIDA ROUINO geed ege 96 3 13 Mixing C ele EE e 97 E l t Ee EE 103 3710 F FEDhOCCSS ae BEE 104 SLE Biel zl ep ROJ AMS aes a a 112 Chapter 4 Macro Assembler ele Ee EE 115 Ae ODUN eege 116 4 3 HI TECH C Assembly Language cccccccccsseeeceeeecceeeseee
165. E ET ret rned Saan i exit 0 prince returned 0 goon EE EE INNS Fea e dE inner printi H returned bad n See Also longjmp DS51865B page 218 2010 Microchip Technology Inc Library Functions SIN SLEEP Return Value The set jmp function returns zero after the real call and non zero if it apparently returns after a callto long jmp Synopsis include lt math h gt double sin double f Description This function returns the sine function of its argument Example include lt math h gt include lt stdio h gt define C 3 141592 180 0 void main void double i for i 0 1 lt 180 0 i 10 Pramer EEN Sra Sy S CCE Printer SV0T y SEE a ee E See Also cos tan aSin acos atan atan2 Return Value Sine vale of f Synopsis include lt hte h gt SLEEP Description This macro is used to put the device into a low power standby mode 2010 Microchip Technology Inc DS51865B page 219 HI TECH C for PIC10 12 16 User s Guide Example include lt htc h gt extern void init void void main void ipit Oy enable peripherals interrupts while 1 SLEEP save power while nothing happening SPRINTF VSPRINTF SQRT Synopsis include lt stdio h gt iit SPINE tehar DUE COnSt Char Fm ers include lt stdio h gt include lt stdarg h gt Loe VSpL
166. E cxsicicencisaatanteuaeceueeicaaeumeecntnentehdateoncasadecens 155 Jeer 15 adding THOS TO EE 156 ChE le Le BEE 156 deleting modules from 156 Se ell e EE 39 eleng EE 155 MKAO enamine nen aero meen er Reena en ea eerie Meee 147 listing modules in EE 156 Ile Ten lee 156 module order 157 naming CONVENTION sacks Mase ese 15 leie 148 COCs EE 15 replacing modules onnnnnneannnnnennnnnnnna 16 112 scanning additional EE 26 sealh el ge E 7 TE ele EE 15 library function x CONFIG ttc hate eects esti cee een ees 173 EEPROM RE 174 ge IEG aA ld cconise adie tan tains eeont 175 E TR E ee 175 delay eebe 108 174 176 Ee 177 Ee eebe be 177 EHNEN 178 aie EEA RE oaheapinetucessenmeaminocs sere 179 J SSE E 179 i E 180 i bole EE 181 e EE 181 lte LE 182 lte EE 182 SCAN EE 183 ee 184 CO CS EE 185 Ee 186 COSM RE 187 CPUS egen ent nee eee eee ert eee 187 ele EE 188 device d read 189 el 190 elle OAC EE 191 eeprom _write cccccccseseeecceeeeeceeeeeeeseeeess 191 eval DOI te stenecucecou coal art asae eee eaters ea 192 EE 192 TADS EE 193 Hash ie EE 193 HASH TEE 194 Hash OAC ee 194 Alea E SE 196 Oden A ae 195 MED E 196 TO n esses cet sinee etic aaah 197 get Call data ee ee 198 DEE 197 Ee 198 2010 Microchip Technology Inc DS51865B page 357 OMU GE 199 1S QUT Eesen aere Eelere 200 E Ve le EEN 200 EE 201 Dill 200 BOWE EE 200 rer EE 201 Ela 202 Ja E 202 LOW IEE ciate attract acd eat al ae Meee
167. EE 112 message description Dies 18 linker defined symbols cccceccsseseeeeeeeeeeeeeeeeees 113 Met 241 linking porograms 112 Ee 19 34 BECH Reine EE 136 appending tO le 25 little endian format 54 57 167 COUNTING MER 18 lmp pseudo instruction cceeeeeeeeeeeeeeeeeeeeeeeeeees 120 default langauge cccccccsseeeceeeceneeeseeeesenaeees 19 load addresees 145 default warning level ccccceecesseeeeeeeeeeeeeees 21 LOCAL directive ccccccccccsssesseeeeeeeeeessseeaeeeeeees 122 disables a topes 18 21 34 111 Ocal PSEGT NAO rrue S 128 EE 19 local symbols taal CI EE 19 FEMOVIN Geese teen hepa ais 29 language EE 19 33 SUPPrESSINO D 147 PUD Ca 18 localtime function EE 204 placeholders EE 20 location counter 122 129 redirecting tO le 24 lOO TUIMNCTIONG actin caries cereeaacccts ei cecant cies 205 supported languages soooennnnnennnnennesennnennna 19 Ieiekt 8 ier e EE 205 MEN eege 19 IONG COUDIC er 56 WANING ees enee deeg ct 19 34 ONIME ier de 205 WaAINMING level EE 21 NO EL TUNG IA ected noes cic ee ce a 206 messaging system EE 18 M environment variables ccccceeceeeseeeeeeeeeaeees 20 Microchip COF ie 36 MACRO directive snsssssssisrisnnsnnnisnnnnnnnnnne 120 132 mktime HUNCH ON EEN 210 MAIN FUNCTION cece seai R aa 16 93 MOE functon 211 main line Code ENEE 19 87 lee 9 W TNL E 83 92 generatng ecescececeseccecsesececsesecscsesecseseseseeseeeee 26
168. EEPROM will become valid approximately four milliseconds later In the above example the new value will not yet be ready at the time when eeprom_read Is Called however because this function waits for any concurrent writes to complete before initiating the read the correct value will be read lt may also be convenient to use the preprocessor symbol _EEPROMSIZE in conjunc tion with some of these access methods This symbol defines the number of EEPROM bytes available for the selected chip 3 3 8 3 EEPROM ACCESS MACROS Although these macros perform much the same service as their library function coun terparts these should only be employed in specific circumstances It is appropriate to select EEPROM_READ Of EEPROM_WRITE in favor of the library equivalents if any of the following conditions are true e You cannot afford the extra level of stack depth required to make a function call e You cannot afford the added code overhead to pass parameters and perform a call return e You cannot afford the added processor cycles to execute the function call over head Be aware that if a program contains multiple instances of either macro any code space saving will be negated as the full content of the macro is now duplicated in code space In the case of EEPROM_READ there is another very important detail to note Unlike eeprom_read this macro does not wait for any concurrent EEPROM writes to com plete before proceeding to select and re
169. ENEE 00 will perform much the same as if the object files had been typed on the command line The 1ibr gt prompts were printed by LIBR itself the remainder of the text was typed as input libr lt lib cmd LIBR will read input from 1ib cmd and execute the command found therein This allows a virtually unlimited length command to be given to LIBR 6 2 4 Ordering of Libraries The librarian creates libraries with the modules in the order in which they were given on the command line When updating a library the order of the modules is preserved Any new modules added to a library after it has been created will be appended to the end The ordering of the modules in a library is significant to the linker If a library contains a module which references a symbol defined in another module in the same library the module defining the symbol should come after the module referencing the symbol 6 2 5 Error Messages LIBR ISSues various error messages most of which represent a fatal error while some represent a harmless occurrence which will nonetheless be reported unless the w option was used In this case all warning messages will be suppressed 2010 Microchip Technology Inc DS51865B page 157 HI TECH C for PIC10 12 16 User s Guide 6 3 OBJTOHEX The HI TECH linker is capable of producing object files as output Any other format required must be produced by running the utility program OBJTOHEX This allows con version of obje
170. Eee 203 IOC AUR eian 204 OG EE 205 ove i GE 205 IONGI GD EEN 205 WO lace Bes eee ce 206 EELER 207 MNGING MD Parnes eebe Aere egdeeete 208 MEMCOY aei 209 nn te EE 209 NEE 210 MKO saitcre attest testers tte eae eras en oN el ok 210 1010 eet core a eege 211 Si EE 212 eil E 15 96 212 gll es a E 215 DEE 215 Re EE 216 GAIN Ch EE EE 217 ROW EE 217 SEH 218 SI a EEE E A E E E A aed poets A E AAA 219 SHAM aae a a a A ee 187 Seet 220 SIE 220 Cell Lene AEE EEA EESE E 221 SSCA EE 222 De DEE 222 SUC ib EE 223 Hee ee beet 224 SINC DV een 224 Le KI EE 225 SME eege geg 223 le la 224 HE 231 SWIG Jeena n ce ee 226 SIE 226 diene Bere rete ae ieee eee tiie torr ene neem cree her ean 2217 ae Y se E AE 228 SUMICIN D ee ie sheet 227 SODIK eege 229 Eeer 229 SUCI Seen ee net ane ae ane ae ee 229 SISD ee Ee 230 SHS EE 231 SMO siccticat ete ege lets Olt aloe 231 EE Ae 232 SEI 232 TAN stitial Na Nile cule ate Ade etl os ees Cee 233 EI GE 187 TNC EE 234 DS51865B page 358 HI TECH C for PIC10 12 16 User s Guide ee EE 235 ele EEN 235 LOUD el 235 KUNG meea a E 235 WAG e 236 Duer WE 23 va SOG NEE 238 Ve ne WEE 238 VC GES G EE 238 d ei EE 212 ER 220 NEE eege 222 XO RE 239 library function see also library macro library macro Gela V MS steelers eae 174 AO CIAY EE 174 EE CA ER EE 185 B EEEE E ERE eege 190 E EN ene eee E eee eee 190 NOP oeda 211 SEBE EE 219 library modules sch ucesih ct ne eat ee ite ieees
171. HX formats 1203 unpaired nibble in value will be truncated Hexmate Data to this option was not entered as whole bytes Perhaps the data was incomplete or a leading zero was omitted For example the value Fh contains only four bits of sig nificant data and is not a whole byte The value OFh contains eight bits of significant data and is a whole byte 1204 value must be between 1 and bytes long Hexmate An illegal length of data was given to this option The value provided to this option exceeds the maximum or minimum bounds required by this option 1205 using the configuration file you may override this with the environment variable HTC XML Driver This is the compiler configuration file selected during compiler setup This can be changed via the HTC_XML environment variable This file is used to determine where the compiler has been installed 1207 some of the command line options you are using are now obsolete Driver some of the command line options passed to the driver have now been discontinued in this version of the compiler however during a grace period these old options will still be processed by the driver 1208 use help option or refer to the user manual for option details Driver An obsolete option was detected Use help or refer to the manual to find a replace ment option that will not result in this advisory message 1209 An old MPLAB tool suite plug in was detected Driver The
172. IL Tel 630 285 0071 Fax 630 285 0075 Cleveland Independence OH Tel 216 447 0464 Fax 216 447 0643 Dallas Addison TX Tel 972 818 7423 Fax 972 818 2924 Detroit Farmington Hills MI Tel 248 538 2250 Fax 248 538 2260 Kokomo Kokomo IN Tel 765 864 8360 Fax 765 864 8387 Los Angeles Mission Viejo CA Tel 949 462 9523 Fax 949 462 9608 Santa Clara Santa Clara CA Tel 408 961 6444 Fax 408 961 6445 Toronto Mississauga Ontario Canada Tel 905 673 0699 Fax 905 673 6509 ASIA PACIFIC Asia Pacific Office Suites 3707 14 37th Floor Tower 6 The Gateway Harbour City Kowloon Hong Kong Tel 852 2401 1200 Fax 852 2401 3431 Australia Sydney Tel 61 2 9868 6733 Fax 61 2 9868 6755 China Beijing Tel 86 10 8528 2100 Fax 86 10 8528 2104 China Chengdu Tel 86 28 8665 5511 Fax 86 28 8665 7889 China Chongqing Tel 86 23 8980 9588 Fax 86 23 8980 9500 China Hong Kong SAR Tel 852 2401 1200 Fax 852 2401 3431 China Nanjing Tel 86 25 8473 2460 Fax 86 25 8473 2470 China Qingdao Tel 86 532 8502 7355 Fax 86 532 8502 7205 China Shanghai Tel 86 21 5407 5533 Fax 86 21 5407 5066 China Shenyang Tel 86 24 2334 2829 Fax 86 24 2334 2393 China Shenzhen Tel 86 755 8203 2660 Fax 86 755 8203 1760 China Wuhan Tel 86 27 5980 5300 Fax 86 27 5980 5118 China Xian Tel 86 29 8833 7252 Fax 86 29 8833 7256 China Xiamen Tel 86 592 2388138 Fax 86
173. In this manual options are written in upper case and suboptions are in lower case Multi letter or word options have two leading dash characters e g ASMLIST Because of the double dash the driver can determine that the option DOUBLE for example is not a D option followed by the argument OUBLE some of these word options use suboptions which typically appear as a comma sepa rated list following an equal character e g OUTPUT hex cof The exact format of the options varies and are described in detail in the following sections Some commonly used suboptions include default which represent the default spec ification that would be used if this option was absent altogether a11 which indicates that all the available suboptions should be enabled as if they had each been listed and none which indicates that all suboptions should be disabled For example OPT none 2010 Microchip Technology Inc DS51865B page 23 HI TECH C for PIC10 12 16 User s Guide will turn off all optimizers Some suboptions may be prefixed with a plus character to indicate that they are in addition to the other suboptions present or a minus character to indicate that they should be excluded For example OPT default asm indicates that the default optimization be used but that the assembler optimizer should be disabled If the first character after the equal sign is or then the default keyword is
174. It holds uninitialized vari ables However there may be some uninitialized variables that will need to be located in bank 0 data memory others may need to be located in bank 1 memory As these two groups of variables will need to be placed into different memory banks they will need to be in separate psects so they can be independently controlled by the linker In addi tion the uninitialized variables that are bit variables need to be treated specially so they need their own psect So there are a number of different psects that all use the same basename but which have prefixes and suffixes to make them unique The general form of these psect names is bit psectBaseNameCLASS div where psectBaseName is the base name of the psect such as bss The CLASS Is a name derived from the linker class see Section 5 2 1 Aclass low high in which the psect will be linked e g BANKO The prefix bit is used if the psect holds bit variables So there may be psects like bs sBANKO bssBANK1 and bitbssBANKO defined by the compiler to hold the uninitialized variables If a psect has to be split into two ranges then the letters 1 elle and h are used as div to indicate if it is the lower or higher division A psect would be split if memory in the middle of a bank has been reserved or is in some way not available to position objects If an absolute variable is defined and is located anywhere inside a memory range that range will need to be split
175. LOAT Select kind of Float Types This option allows the size of float types to be selected The types available to be selected are given in Table 2 9 See also the DOUBLE option in Section 2 7 25 DOUBLE Select kind of Double Types TABLE 2 9 FLOATING POINT SELECTIONS Size of float matches size of double type 32 bit float IEEE764 2 7 31 GETOPTION Get Command line Options This option is used to retrieve the command line options which are used for named compiler application The options are then saved into the given file This option is not required for most projects and is disabled when the compiler is operating in Lite mode see Section 2 7 36 MODE Choose Compiler Operating Mode The options take an application name and a filename to store the options for example GETOPT LON hlink OPCIONS CXL 2 7 32 HELP Display Help This option displays information on the PICC compiler options The option HELP will display all options available To find out more about a particular option use the option s name as a parameter For example PICC help warn will display more detailed information about the WARN option the available subop tions and which suboptions are enabled by default 2 33 IDE Specify the IDE being used This option is used to automatically configure the compiler for use by the named Inte grated Development Environment IDE The supported IDEs are shown in Table 2
176. M MEMORY Non auto objects qualified const can also be made absolute in the same way how ever the address will indicate an address in program memory For example Const ING Entree TL A 0X200 E ie a o 10 0 3 Both initialized and uninitialized const objects can be made absolute That latter is useful when you only need to define a label in program memory without making a contribution to the output file Variables can also be placed at specific positions by using the psect pragma see Section 3 15 3 5 The pragma psect Directive The decision whether variables should be positioned this way or using absolute variables should be based on the loca tion requirements Using absolute variables is the easiest method but only allows placement at an address which must be known prior to compilation The psect pragma is more complex but offers all the flexibility of the linker to position the new 2010 Microchip Technology Inc DS51865B page 79 HI TECH C for PIC10 12 16 User s Guide psect into memory You can for example specify that variables reside at a fixed address or that they be placed after other psects or that the they be placed anywhere in a compiler defined or user defined range of address 3 5 5 Variables in Registers Allocating variables to registers rather than to a memory location can make code more efficient With HI TECH C there is no direct control of placement of variables in regis ters The regis
177. M memory files Lali tte UE at EE 51 WADI canes a ieee oe cuentas ee 7 ea ea E ae 51 52 intermediate 2 ee eeeeeeeeeceeceeceeeeeeeees 9 34 35 36 dl e Te EE 91 52 LEM DOT ALY ee ee 34 eeprom PSEC cccceeeeecccceceeeseececeeceesseeeeeeseeaseeeeeeeeas 91 filling UNUSED memon cccccsseeeeeeeeeeeeeees 30 32 168 G6 PIOM dala DSCC gt ege ege Eege 51 TU e SE 149 eeprom_read function sannennnneennenenneennnenenne 51 191 fixup overflow CLLOMS cccccccseceeceeeeeeeeeeeeaees 148 149 EEPROM READ EE tee ee ES 52 flash COPY TUNCHON EE 193 Ceprom_ write Tupnchon 51 191 H lt GESCHEET ee 194 EEPROM WRITE macrg 52 flash read function 194 EMAC renee eee nee en E ere Oe ery 190 Fletcher s checksum aloortthm 168 SR 131 Hoat CaAlATY OC EE 33 56 ELSIF CireCtv EE 131 HOAUAG DOM EE 56 enabling interrupts ccccesseeeceeesseeeeeeeesesseeeeeeeees 88 biased evponent 57 END directive ied cccca locket ete eee eee 126 EXDONEME EE 57 CNCGIANISM 0c ecceceececceceececeecececeeceeeeeeeceeeeeaeeaears 54 57 elt AVC 57 2010 Microchip Technology Inc DS51865B page 355 HI TECH C for PIC10 12 16 User s Guide DEED ete ees 57 OUNGAN EE 57 floating point sufftvesg nenene reenn 66 TOOK ACUO esn E 196 TMOG TUINGCION ecen 195 1ODASE SVIMDOl E 64 TEX OTL GUO Mis 5 icven carla Ee 196 POR e TEE 110 KOA TUNCUO eeo 197 function paramole S erene Actin eee 73 84 Kalte TEE 85 Species 25a eege a
178. MICROCHIP HI TECH C for PIC10 12 16 User s Guide DS51865B Note the following details of the code protection feature on Microchip devices e Microchip products meet the specification contained in their particular Microchip Data Sheet e Microchip believes that its family of products is one of the most secure families of its kind on the market today when used in the intended manner and under normal conditions e There are dishonest and possibly illegal methods used to breach the code protection feature All of these methods to our knowledge require using the Microchip products in a manner outside the operating specifications contained in Microchip s Data Sheets Most likely the person doing so is engaged in theft of intellectual property e Microchip is willing to work with the customer who is concerned about the integrity of their code e Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code Code protection does not mean that we are guaranteeing the product as unbreakable Code protection is constantly evolving We at Microchip are committed to continuously improving the code protection features of our products Attempts to break Microchip s code protection feature may be a violation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your software or other copyrighted work you may have a right to sue for relief under that Act Information con
179. OTECT For devices that have more than one configuration word location each subsequent invocation of CONFIG will modify the next configuration word in sequence Typically this might look like Pine Luce bake A gt __CONFIG WDTDIS amp XT amp UNPROTECT Program config word 1 __CONFIG FCMEN Program config word 2 MPLAB IDE has a dialog Config gt Configuration bits which also allows configuration bits to be specified when the device is programmed If the checkbox Configuration Bits Set in Code in this dialog is checked any configuration bits specified in your code using the __ CONFIG macro are ignored and those in the dialog used instead Ensure the source of the configuration bit settings is Known when working with an MPLAB IDE proj ect 3 3 5 Using SFRs From C Code The Special Function Registers SFRs are registers which control aspects of the MCU operation or that of peripheral modules on the device Most of these registers are mem ory mapped which means that they appear at specific addresses in the data memory space of the device With some registers the bits within the register control indepen dent features Some registers are read only some are write only Memory mapped SFRs are accessed by special C variables that are placed at the addresses of the registers Variables that are placed at specific addresses are called absolute variables and are described in Section 3 5 4 Absolute Variables These var
180. OVE r0 55 MOVE r1 roO _next oops choose a different name The linker will issue this warning if the symbol C or assembler was defined multiple times in different modules The names of the modules are given in the error message Note that C identifiers often have an underscore prepended to their name after compi lation 483 symbol can t be global Linker This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 285 HI TECH C for PIC10 12 16 User s Guide 484 psect can t be in classes and Linker A psect cannot be in more than one class This is either due to assembler modules with conflicting class options to the PSECT directive or use of the c option to the linker e g psect final class CODE finish elsewhere psect final class ENTRY 485 unknown with psect referenced by psect Linker The specified psect has been placed with a psect using the psect with flag The psect it has been placed with does not exist e g psect starttext class CODE with rext was that meant to be with text 486 psect selector value redefined Linker The selector value for this psect has been defined more than once 487 psect type redefined Linker This psect has had its type defined differently by different modules This probably means you are trying to link incomp
181. P string will show additional help for the STRING HEXMATE option 6 6 1 12 LOGFILE The LOGFILE option saves HEX file statistics to the named file For example LOGFILE output log will analyze the HEX file that HEXMATE Is generating and save a report to a file named OULPUL LOG 6 6 1 13 MASK Use this option to logically AND a memory range with a particular bitmask This is used to ensure that the unimplemented bits in program words if any are left blank The usage of this option is as follows MASK hexcode start end Where hexcode Is a hexadecimal value that will be ANDed with data within the start to end address range Multibyte mask values can be entered in little endian byte order 6 6 1 14 OFILE The generated Intel HEX output will be created in this file For example Oprogram hex will save the resultant output to program hex The output file can take the same name as one of its input files but by doing so it will replace the input file entirely DS51865B page 170 2010 Microchip Technology Inc Utilities 6 6 1 15 SERIAL This option will store a particular HEX value at a fixed address The usage of this option IS SERIAL Code Increment Address Interval rRepetitions where e Code is a hexadecimal value to store and is entered in little endian byte order e Increment is optional and allows the value of Code to change by this value with each repetition if requested e
182. PLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 5 TIME Report Time Taken for Each Phase of Build Process Adding the TIME option when building generates a summary which shows how much time each stage of the build process took to complete 2 7 58 VER Display The Compiler s Version Information The VER option will display what version of the compiler is running and then exit the compiler 2 7 59 WAN Set Warning Level The WARN option is used to set the compiler warning level threshold Allowable warn ing levels range from 9 to 9 The warning level determines how pedantic the compiler is about dubious type conversions and constructs Each compiler warning has a des ignated warning level the higher the warning level the more important the warning message If the warning message s warning level exceeds the set threshold the warn ing is printed by the compiler The default warning level threshold is 0 and will allow all normal warning messages 2010 Microchip Technology Inc DS51865B page 41 HI TECH C for PIC10 12 16 User s Guide Use this option with care as some warning messages indicate code that is likely to fail during execution or compromise portability Warning message can be individually disabled with the MSGDISABLE option see Section 2 7 37 MSGDISABLE Disable Warning Messages See also Section 2 6 Compiler Messages for full information on
183. PN Example include lt string h gt include lt stdio h gt void main void char buffer 256 char 641 lt a2 Stropy burrer oF lane sl buffer s2 end of line strcat s1 s2 printf m d n strlen burier DEIET T s Sein Surrey lt See Also stroncpy y strleni strcat strLlen Return Value The destination buffer si is returned Synopsis include lt string h gt size e lt SUrCSpn Const Char slr Const Char 7 82 Description The strespn function returns the length of the initial segment of the string pointed to by si which consists of characters NOT from the string pointed to by s2 Example include lt stdio h gt fIneclude lt string h gt void main void static char set PrEInor da Streep EE We E Ee TY see A EE ERT EE H Ee See Also SEET Return Value Returns the length of the segment 2010 Microchip Technology Inc DS51865B page 225 HI TECH C for PIC10 12 16 User s Guide STRLEN STRNCAT Synopsis include lt string h gt size_t strlen const char s Description The strlen function returns the number of characters in the string s not including the null terminator Example include lt string h gt include lt stdio h gt void main void char buffer 256 ehar sly S25 strepy buffer T of dane sl buffer s2 end of line strcat s1 s2
184. QU SET assembler directive labels e Linker defined symbols Assembly symbols are made global via the GLOBAL assembler directive see Section 4 3 9 1 GLOBAL for more information Linker defined symbols act like EQu directives however they are defined by the linker during the link process and no definition for them will appear in any source or intermediate file See Section 3 16 3 Linker Defined Symbols Each symbol is shown with the psect in which they are placed and the value usually an address which the symbol has been assigned There is no information encoded into a symbol to indicate whether it represents code or data nor in which memory space it resides If the psect of a symbol is shown as abs this implies that the symbol is not directly associated with a psect Such is the case for absolute C variables or any symbols that are defined using an EQU directive in assembly Note that a symbol table is also shown in each assembler list file See Section 2 7 17 ASMLIST Generate Assembler List Files for information on gen erating these files These differ to that shown in the map file in that they list also list local symbols and only show symbols defined in the corresponding module 2010 Microchip Technology Inc DS51865B page 153 HI TECH C for PIC10 12 16 User s Guide NOTES DS51865B page 154 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter
185. SABLE command the number must be followed by off to ensure that it is disabled For example MSGDISABLE 195 off will disable error number 195 Note Disabling error or warning messages in no way fixes the condition which triggered the message Always use extreme caution when exercising these options 2010 Microchip Technology Inc DS51865B page 21 HI TECH C for PIC10 12 16 User s Guide 2 6 5 2 CHANGING MESSAGE TYPES lt is also possible to change the type of some messages This can only be done for messages generated by the parser or code generator See Section 3 15 3 8 The pragma warning Directive for more information on this pragma 2 7 PICC DRIVER OPTION DESCRIPTIONS Most aspects of the compilation can be controlled using the command line driver PICC The driver will configure and execute all required applications such as the code generator assembler and linker PICC recognizes the compiler options which are tabled below and explained in detail in the following sections The case of the options is not important however command shells in most operating systems are case sensitive when it comes to names of files TABLE 2 6 DRIVER OPTIONS Option Meaning e remesesemmsen e Joie CHECKSUM specification Calculate a checksum and store the result in program memory DS51865B page 22 2010 Microchip Technology Inc PICC Command line Driver TABLE 2 6 DRIVER OPTIONS CONTINUED
186. SX Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 708 bad mod for how Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 709 metaregister can t be used directly Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 710 bad U usage Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 297 HI TECH C for PIC10 12 16 User s Guide 711 bad how in expand Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 712 can t generate code for this expression Code Generator This error indicates that a C expression is too difficult for the code generator to actually compile For successful code generation the code generator must know how to com pile an expression and there must be enough resources e g registers or temporary memory locations available Simplifying the expression e g using a temporary vari able to hold an intermediate result may get around this message Contact HI TECH Support with details of this message This error may also be issued if the code being compiled is in some way unusual For example code which writes to a const qualified object is illegal and
187. TRICMP Synopsis include lt string h gt imc Srremp const Char sly Const char 62 rat SLL Lemp leone char Sl Const Char Se 62 Description The strcmp function compares its two null terminated string arguments and returns a signed integer to indicate whether s1 is less than equal to or greater than s2 The comparison is done with the standard collating sequence which is that of the ASCII character set The stricmp function is the case insensitive version of this function Example include lt string h gt include lt stdio h gt void main void Int i ee Gal Sr Om Ge EE AE printr is less than ABc n else if i gt 0 princi Ss Greater than ABEND else Prince Te sequal to ABC wn See Also Sti ben Ssermcmp Kn SErcpy sStrcal Return Value A signed integer less than equal to or greater than zero Note Other C implementations may use a different collating sequence the return value is negative zero or positive i e do not test explicitly for negative one 1 or one 1 STRCPY Synopsis include lt string h gt char strcpy char s1 const char s2 Description This function copies a null terminated string s2 to a character array pointed to by s1 The destination array must be large enough to hold the entire string including the null terminator DS51865B page 224 2010 Microchip Technology Inc Library Functions STRCS
188. The information in this section of the map file can be used to confirm that a module is making a contribution to the output file and to determine the exact psects that each module defines Shown are all the psects under the Name column that were linked into the program from each object file and information about that psect The linker deals with two kinds of addresses link and load Generally speaking the link address of a psect is the address by which it will be accessed at run time The load address which is often the same as the link address is the address at which the psect will start within the output file HEX or binary file etc If a psect is used to hold bits the load address is irrelevant and is instead used to hold the link address in bit units converted into a byte address The Length of the psect is shown in the units used by that psect The Selector is less commonly used and is of no concern when compiling for PIC devices The Space field is important as it indicates the memory space in which the psect was placed For Harvard architecture machines with separate memory spaces such as the PIC10 12 16 devices this field must be used in conjunction with the address to specify an exact storage location A space of 0 indicates the program memory and a space of 1 indicates the data memory See Section 4 3 9 3 12 Space The Scale of a psect indicates the number of address units per byte This is left blank if the sc
189. The most common code to trigger this warning is assignments to signed data types For example Signed char c C O Fee As a signed 8 bit quantity c can only be assigned values 128 to 127 The constant is equal to 255 and is outside this range If you mean to set all bits in this variable then use either of c 0x0 E l which will set all the bits in the variable regardless of the size of the variable and without warning This warning can also be triggered by intermediate values overflowing For example 2010 Microchip Technology Inc DS51865B page 301 HI TECH C for PIC10 12 16 User s Guide unsigned int i assume ints are 16 bits wide i 240 USTs this should be okay right 7 A quick check with your calculator reveals that 240 137 is 32880 which can easily be stored in an unsigned int but a warning is produced Why Because 240 and 137 and both signed int values Therefore the result of the multiplication must also be asigned int value buta signed int cannot hold the value 32880 Both operands are constant values so the code generator can evaluate this expression at compile time but it must do so following all the ANSI C rules The following code forces the multiplication to be performed with an unsigned result i 240u 137 force at least one operand to be unsigned 752 conversion to shorter data type Code Generator Truncation may occur in this expression as the lvalue is of shorter
190. Ts th closing bracket 7 117 misplaced constant in if Preprocessor A constant in a i f expression should only occur in syntactically correct places This error is most probably caused by omission of an operator e g if FOO BAR oops did you mean if FOO BAR 118 stack overflow processing if expression Preprocessor The preprocessor filled up its expression evaluation stack in a i expression Simplify the expression it probably contains too many parenthesized subexpressions 119 invalid expression in if line Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details IERT 120 operator in incorrect context Preprocessor An operator has been encountered in a i expression that is incorrectly placed e g two binary operators are not separated by a value e g if FOO BAR P what Ske oe ey define BIG endif IERT 121 expression stack overflow at operator Preprocessor Expressions in if lines are evaluated using a stack with a size of 128 It is possible for very complex expressions to overflow this Simplify the expression TP aT 122 unbalanced parenthesis at operator Preprocessor The evaluation of a i f expression found mismatched parentheses Check the expres sion for correct parenthesizing e g if A B ZS Oops a Missing Jy 1 think Si define ADDED endif WW 123 misplaced or
191. Usually failure to resolve a reference to an undefined symbol is a fatal error Use of this option will cause undefined symbols to be treated as warnings instead 5 2 11 Jerrcount The linker will stop processing object files after a certain number of errors other than warnings The default number is 10 but the J option allows this to be altered 9 2 12 K For compilers that use a compiled stack the linker will try and overlay function auto and parameter blocks to reduce the total amount of RAM required For debugging pur poses this feature can be disabled with this option however doing so will increase the data memory requirements DS51865B page 144 2010 Microchip Technology Inc Linker 9 2 13 L When the linker produces an output file it does not usually preserve any relocation information since the file is now absolute In some circumstances a further relocation of the program will be done at load time The 1L option will generate in the output file one null relocation record for each relocation record in the input 9 2 14 LM Similar to the above option this preserves relocation records in the output file but only segment relocations 5 2 15 Mmapfile This option causes the linker to generate a link map in the named file or on the stan dard output if the file name is omitted The format of the map file is illustrated in Section Section 5 4 Map Files 5 2 16 N Ns and Nec By default the sy
192. a if e g ifdef FOO result foo else result bar elif defined NEXT the else above terminated the if result next 0 endif 102 must be in an if Preprocessor The elif else or endif directive must be preceded by a matching if line If there is an apparently corresponding if line check for things like extra endif s or improperly terminated comments e g ifdef FOO result foo endif result bar elif defined NEXT the endif above terminated the if result next 0 endif 103 error Preprocessor This is a programmer generated error there is a directive causing a deliberate error This is normally used to check compile time defines etc Remove the directive to remove the error but first check as to why the directive is there 104 preprocessor assert failure Preprocessor The argument to a preprocessor assert directive has evaluated to zero This is a programmer induced error assert SIZE size should never be 4 105 no asm before endasm Preprocessor A endasm operator has been encountered but there was no previous matching asm Q void cleardog void clrwdt endasm in line assembler ends here only where did it begin 106 nested asm directives Preprocessor lt is not legal to nest asm directives Check for a missing or misspelt endasm direc tive e g fasm MOVE rO 0aah asm previous asm must be closed be
193. a psect and do not follow the normal memory allocation procedure The psects in which the different categories of non auto variables the nv bss and data psects described in Section 3 5 2 1 Non auto Variable Allocation can be shifted as a whole by changing the default linker options So for example you could move all the persistent variables However typically these psects can only be moved within the data bank in which they were allocated by default See Section 3 10 Psects for more information on changing the default linker options for psects The code generate makes assumptions as to the location of these psects and if you move them to a location that breaks these assumptions code may fail 3 5 2 2 AUTO VARIABLE ALLOCATION AND ACCESS This section discusses allocation of auto variables those with automatic storage dura tion This also include function parameter variables which behave like auto variables as well as temporary variables defined by the compiler The auto short for automatic variables are the default type of local variable Unless explicitly declared to be static alocal variable will be made auto The auto key word may be used if desired The auto variables as their name suggests automatically come into existence when a function is executed then disappear once the function returns Since they are not in existence for the entire duration of the program there is the possibility to reclaim mem ory the
194. abel location Examples alabel DS 23 Reserve 23 bytes of memory Klbavels Do Za3 Reserve 5 bytes of memory DS51865B page 130 2010 Microchip Technology Inc Macro Assembler 4 3 9 10 DABS This directive allows one or more bytes of memory to be reserved at the specified address The general form of the directive is DABS memorySpace address bytes where memorySpace is a number representing the memory space in which the reser vation will take place address is the address at which the reservation will take place and bytes Is the number of bytes that is to be reserved This directive differs to the Ds directive in that it can be used to reserve memory at any location not just within the current psect Indeed these directives can be placed any where in the assembly code and do not contribute to the currently selected psect in any way The memory space number is the same as the number specified with the space flag option to psects see Section 4 3 9 3 12 Space The code generator issues a DABS directive for every user defined absolute C variable or for any variables that have been allocated an address by the code generator The linker reads this DABS related information from object files and will ensure that the reserved address are not used for other memory placement 4 3 9 11 IF ELSIF ELSE AND ENDIF These directives implement conditional assembly The argument to IF and ELSIF should be an absolute e
195. access the const data is only included once regardless of the amount or number of const qualified objects For Mid Range and Enhanced Mid Range devices the maximum size of a const qualified object is limited only by the available program memory These devices also use additional code that accesses the const data but this code is also only included once regardless of the amount or number of const qualified objects 3 5 3 2 CHANGING THE DEFAULT ALLOCATION If you only intend to prevent all variables from using one or more program memory loca tions so that you can use those locations for some other purpose you are best reserv ing the memory using the memory adjust options See Section 2 7 49 ROM Adjust ROM Ranges for information on how to do this If only a few non auto const variables are to be located at specific addresses in pro gram space memory then the variables can be made absolute This allows individual variables to be explicitly positioned in memory at an absolute address Absolute vari ables are described in Section 3 5 4 Absolute Variables Once variables are made absolute their address is hard coded in generated output code they are no longer placed in a psect and do not follow the normal memory allocation procedure The psects in which the different categories of non auto const variables the strings and stringtext psects can be shifted as a whole by changing the default linker options However there are li
196. aces and the address will be encoded so that the target memory space can be determined at run time This pointer classification is considered as a default If a program accesses a C pointer in assembly code the compiler will force the those pointers to have this default classification The encoding of this pointer type is this the MSb of the address i e bit number 15 held by such pointers indicates the memory space that the address references If this bit is set it indicates that the address is of something in program memory clear indi cates an object in the data memory The remainder of this address represents the address in the indicated memory space To extend the example given in Section 3 4 4 2 Data Pointers the code is now developed further and the function get Value is now called with the address of an object that resides in the program memory as shown int i 3 allocated to bank 0 in this example SEET CS allocated to bank 2 in this example const int type 0x3456 int getValue const int ip return ip void main void J getValue amp i F see Code that uses g J getValue amp x Li sae Code that uses j J getValue amp type do aus Code that uses j Again the targets to the pointer ip are determined and now the pointer is made of the class that can access both data and program memory The generated code to derefer ence the pointer will be such that it can det
197. ack along with other auto variables and all components of the com piled stack will only ever be located in the data space memory Any const qualified auto or non auto variable will always be read only and any attempt to write to these in your source code will result in an error being issued by the compiler On most PIC devices the program space is not directly readable by the device The compiler stores data in the program memory by means of RETLW instructions which can be called and which will return a byte if data in the w register The compiler will generate the code necessary to make it appear that program memory is being read directly Enhanced Mid Range PIC devices can directly read their program memory although the compiler will still usually store data as RETLW instructions This way the compiler can either produce code that can call these instructions to obtain the program memory data as with the ordinary Mid Range devices or directly read the operand to the instruction the Least Significant Byte of the RETLW instruction The most efficient access method can be selected by the compiler when the data needs to be read 2010 Microchip Technology Inc DS51865B page 77 HI TECH C for PIC10 12 16 User s Guide A const object is usually defined with initial values as the program cannot write to these objects at runtime However this is not a requirement An uninitialized const object can be defined to define a symbol or
198. ad EEPROM Had the previous example used the EEPROM_READ macro in place of eeprom_read the operation would have failed If it cannot be guaranteed that all writes to EEPROM have completed at the time of calling EEPROM_READ the appropriate flag should be polled prior to executing EEPROM_READ For example include lt htc h gt void eetest void unsigned char value 1 unsigned char address 0 Initiate writing value to address EEPROM WRITE address value wait for end of write before EEPROM READ while WR continue read from EEPROM at address value EEPROM _READ address 3 3 9 Baseline PIC MCU Special Instructions The baseline 12 bit instruction word devices have some registers which are not in the normal SFR area and cannot be accessed using an ordinary file instruction The HI TECH C compiler is instructed to automatically use the special instructions intended for such cases when pre defined symbols are accessed DS51865B page 52 2010 Microchip Technology Inc C Language Features The definition of the special symbols make use of the control qualifier This qualifier informs the compiler that the registers are outside of the normal address space and that a different access method is required 3 3 9 1 THE OPTION INSTRUCTION Some baseline PIC devices use an OPTION instruction to load the OPTION register The lt htc h gt header file will ensure a special definition for a C object calle
199. addition the assembler optimizer simplifies some expressions and removes some assembler directives from the listing file for clarity although these direc tives are included in the true assembly output files If you are using the assembly list file to look at the code produced by the compiler you may wish to turn off the assembler optimizer so that all the compiler generated directives are shown in this file Re enable the optimizer when continuing development Section 2 7 42 OPT Invoke Compiler Optimizations gives more information on controlling the optimizers Provided the link stage has successfully concluded the listing file will be updated by the linker so that it contains absolute addresses and symbol values Thus you may use the assembler list file to determine the position of and exact op codes of instructions There is one assembly list file produce by the assembler for each assembly file passed to it and so there will be one file produced for all the C source code in a project includ ing p code based library code This file will also contains some of the C initialization 2010 Microchip Technology Inc DS51865B page 137 HI TECH C for PIC10 12 16 User s Guide that forms part of the runtime startup code There will also be one file produced for each assembly source file There is typically at least one assembly file in each project that containing some of the runtime startup file typically called startup as
200. ag will specify that only records within the range that contain data will be filled The default is to fill all records in the range For example FILL 3412 0 1FFF data will program opcode 1234h in all unused addresses from program memory address 0 to 1FFFh Note the endianism This option accepts whole bytes of hexadecimal data from 1 to 8 bytes in length If the data flag has been specified HEXMATE will only perform ROM filling to records that actually contain data This means that these records will be padded out to the default data record length or the width specified in the FORMAT option Records will also begin on addresses which are multiples of the data record length used The default data record length is 16 bytes This facility is particularly useful or is a requirement for some bootloaders that expect that all data records will be of a particular length and address alignment 6 6 1 7 FIND This option is used to detect and log occurrences of an opcode or partial code sequence The usage of this option is FIND Findcode mMask Start End Align w t Title where e Findcode is the hexadecimal code sequence to search for and is entered in little endian byte order e Mask is optional It specifies a bit mask applied over the Findcode value to allow a less restrictive search It is entered in little endian byte order DS51865B page 168 2010 Microchip Technology Inc Utilities e Start and End limit th
201. age 342 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Appendix A Implementation Defined Behavior This section discusses implementation defined behavior for this implementation of the HI TECH C Compiler for PIC10 12 16 MCUs The exact behavior of some C code can vary from compiler to compiler and the ANSI standard for C requires that vendors doc ument the specifics of implementation defined features of the language The number in brackets after each item refers to the section number in the Standard to which the item relates A 1 TRANSLATION G3 1 A 1 1 How a diagnostic is identified 5 1 1 3 The format of diagnostics is fully controllable by the user By default when compiling on the command line the following formats are used Always indicated in the display is a unique message ID number The string warning is only displayed if the message is a warning filename function linenumber source line ID message warning or filename linenumber ID message warning where filename is the name of the file that contains the code or empty if not partic ular file is relevant 1inenumber is the line number of the code or 0 if no line number is relevant TD is a unique number that identifies the message and message is the diagnostic message itself A3 ENVIRONMENT G 3 2 A 2 1 The semantics of arguments to main 5 1 2 2 1 The function main has no arguments nor ret
202. ages for full information about the compiler s messaging system 6 5 14 EMAX number Specify Maximum Number of Errors This option is mainly used by the command line driver PICC to specify the maximum number of errors that can be encountered before CROMWELL terminates The default number is 10 errors This option is applied if compiling using PICC the command line driver and the ERRORS driver option see Section 2 7 28 ERRORS Maximum Number of Errors See Section 2 6 Compiler Messages for full information about the compiler s messaging system 6 5 15 MSGDISABLE message numbers Disable Messages This option is mainly used by the command line driver PICC to disable particular message numbers It takes a comma separate list of message numbers that will be disabled during compilation This option is applied if compiling using PICC the command line driver and the MSGDISABLE driver option see Section 2 7 37 MSGDISABLE Disable Warn ing Messages See Section 2 6 Compiler Messages for full information about the compiler s messaging system 6 5 16 VER Print Version Number This option printed information relating to the version and build of CROMWELL CROMWELL will terminate after processing this option even if other options and files are present on the command line DS51865B page 164 2010 Microchip Technology Inc Utilities 6 6 HEXMATE The HEXMATE utility is a progr
203. agma psect Directive The decision whether functions should be positioned this way or using absolute functions should be based on the loca tion requirements Using absolute functions is the easiest method but only allows placement at an address which must be known prior to compilation The psect pragma is more com plex but offers all the flexibility of the linker to position the new psect into memory For example you can specify that functions reside at a fixed address or that they be placed after other psects or that the they be placed anywhere in a compiler defined or user defined range of addresses 3 8 4 Function Size Limits For all devices the code generated for a function may become larger than one page in size limited only by the available program memory However functions that yield code larger than a page may not be as efficient due to longer call sequences to jump to and call destinations in other pages See 3 8 2 Allocation of Function Code for more details 3 8 5 Function Parameters HI TECH C uses a fixed convention to pass argumenis to a function The method used to pass the arguments depends on the size and number of arguments involved The names argument and parameter are often used interchangeably but typically an argument is the actual value that is passed to the function and a parameter is the variable defined by the function to store the argu ment The compiler will either pass argume
204. ale is 1 and will show 8 for psects that hold bit objects The load address of psects that hold bits is used to display the link address converted into units of bytes rather than the load address See Section 4 3 9 3 2 Bit For example the following appears in a map file Name Link Load Length Selector Space Scale ext obj text 3A 3A 22 50 0 bss 4B 4B 10 4B 1 rOit 50 A 2 0 1 8 2010 Microchip Technology Inc DS51865B page 151 HI TECH C for PIC10 12 16 User s Guide This indicates that one of the files that the linker processed was called ext obj This may have been derived from C code or a source file called ext as This object file contained a text psect as well as psects called bss and rbit The psect text was linked at address 3A and bss at address 4B At first glance this seems to be a problem given that text is 22 words long however note that they are in different memory areas as indicated by the space flag 0 for text and 1 for bss and so do not occupy the same memory The psect rbit contains bit objects and this can be confirmed by looking it the scale value which is 8 Again at first glance there seems there could be an issue with rbit linked over the top of bss Their space flags are the same but since rbit contains bit objects its link address is in units of bits Note that the load address field of rbit psect displays the link address converted to byte units i e 50h 8 gt Ah Underneath th
205. alent bar amp foo bar foo the amp is redundant 364 attempt to modify object qualified Parser Objects declared const or code may not be assigned to or modified in any other way by your program The effect of attempting to modify such an object is compiler specific Const Int out 12347 our is read only out 0 f OOO writing to a read only object 365 pointer to non static object returned Parser This function returns a pointer to a non static e g auto variable This is likely to be an error since the storage associated with automatic variables becomes invalid when the function returns e g char get_addr void Ghar cs vecurning this is dangerous the pointer could be dereferenced return amp c 366 operands of not same pointer type Parser The operands of this operator are of different pointer types This probably means you have used the wrong pointer but if the code is actually what you intended use a type cast to suppress the error message 2010 Microchip Technology Inc DS51865B page 273 HI TECH C for PIC10 12 16 User s Guide 367 identifier is already extern can t be static Parser This function was already declared extern possibly through an implicit declaration It has now been redeclared st atic but this redeclaration is invalid void main void at this point the compiler assumes set is extern se
206. alled even though it appears in the call graph 2010 Microchip Technology Inc DS51865B page 139 HI TECH C for PIC10 12 16 User s Guide In addition to these functions there is information relating to the memory allocated in the compiled stack for main This memory will be used for auto temporary and parameter variables defined in main The only difference between an auto and temporary variable is that auto variables are defined by the programmer and temporaries are defined by the compiler but both behave in the same way In the orange box for main you can see that it defines 10 auto and temporary vari able It defines no parameters main never has parameters There is a total of 24 references in the assembly code to local objects in main Rather than the compiled stack being one memory allocation in one memory space it can have components placed in multiple memory spaces to utilize all available memory of the target device This break down is shown under the memory summary line for each function In this example it shows that some of the local objects for main are placed in the common memory but others are placed in bank 0 data RAM The Used column indicates how many bytes of memory are used by each section of the compiled stack and the Space column indicates in which space that has been placed The Base value indicates the offset that block has in the respective section of the compiled stack For example the figu
207. allocate memory for the longest string encountered as it attempts to sort and merge strings Try reducing the number or length of strings in this module 306 can t allocate bytes of memory for Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 307 too many qualifier names Parser This is an internal compiler error Contact HI TECH Software technical support with details 308 too many case labels in switch Code Generator There are too many case labels in this switch statement The maximum allowable number of case labels in any one switch statement is 511 309 too many symbols Assembler There are too many symbols for the assembler s symbol table Reduce the number of symbols in your program 310 expected Parser A closing square bracket was expected in an array declaration or an expression using an array index e g process carray lids oops should be process carray idx 311 closing quote expected Parser A closing quote was expected for the indicated string 312 expected Parser The indicated token was expected by the parser 313 function body expected Parser Where a function declaration is encountered with K amp R style arguments i e argument names but no types inside the parentheses a function body is expected to follow e g 2010 Microchip Technology Inc DS51865B page 265 HI TECH C for PIC10 12
208. alue The floating point remainder of x y BECHER 2010 Microchip Technology Inc DS51865B page 195 HI TECH C for PIC10 12 16 User s Guide FLOOR Synopsis include lt math h gt double floor double f Description This routine returns the largest whole number not greater than f Example include lt stdio h gt include lt math h gt void main void princi EE eeh Lad Re SE ER E EE Ee FREXP Synopsis include lt math h gt double frexp double f int pi Description The frexp function breaks a floating point number into a normalized fraction and an integral power of 2 The integer is stored into the int object pointed to by p Its return value x is in the interval 0 5 1 0 or zero and equals x times 2 raised to the power stored in p If is zero both parts of the result are zero Example include lt math h gt include lt stdio h gt void main void double f int i f frexp 23456 34 amp 1 Droner Tea ea eecht Te SE See Also ldexp DS51865B page 196 2010 Microchip Technology Inc Library Functions FTOA GETCHAR Synopsis tinclude lt stdlib h gt char ftoa float f int status Description The function toa converts the contents of into a string which is stored into a buffer which is then return Example include lt stdlib h gt include lt stdio h gt void main void char buf float input 12
209. am designed to manipulate Intel HEX files HEXMATE Is a post link stage utility which is automatically invoked by the compiler driver and that provides the facility to e Calculate and store variable length checksum values e Fill unused memory locations with known data sequences e Merge multiple Intel HEX files into one output file e Convert INHX32 files to other INHX formats e g INHX8M e Detect specific or partial opcode sequences within a HEX file e Find replace specific or partial opcode sequences e Provide a map of addresses used in a HEX file e Change or fix the length of data records in a HEX file e Validate checksums within Intel HEX files Typical applications for HEXMATE might include e Merging a bootloader or debug module into a main application at build time e Calculating a checksum over a range of program memory and storing its value in program memory or EEPROM Filling unused memory locations with an instruction to send the PC to a known location if it gets lost Storage of a serial number at a fixed address Storage of a string e g time stamp at a fixed address e Store initial values at a particular memory address e g initialize EEPROM e Detecting usage of a buggy restricted instruction e Adjusting HEX file to meet requirements of particular bootloaders 6 6 1 HEXMATE Command Line Options HEXMATE Is automatically called by the command line driver PICC This is primarily to merge in HEX files with the
210. ame line number and message string respectively The program does not terminate A 14 3 The sets of characters tested for by the isalnum tsalpha iscntrl islower isprint and isupper functions 7 3 1 isalnum ASCII characters az A Z 0 9 isalpha ASCII characters a z A Z iscntrl ASCII values less than 32 islower ASCII characters a z isprint ASCII values between 32 and 126 inclusive isupper ASCII characters A Z A 14 4 The values returned by the mathematics functions on domain errors 7 5 1 acos x x gt 1 0 pi 2 asin x x gt 1 0 0 0 atan2 x y x 0 y 0 0 0 log x x lt 0 0 0 0 0 20 pow r y y lt 0 0 0 O pow 0 pow x y X lt 0 y is non integral 0 0 sartz X0 0 0 EMOG ger Ek X A 14 5 Whether the mathematics functions set the integer expression errno to the value of the macro ERANGE on underflow range errors 7 5 1 The exp frexp and log functions set errno to ERANGE on underflow DS51865B page 348 2010 Microchip Technology Inc Implementation Defined Behavior A 14 6 Whether a domain error occurs or zero is returned when the fmod function has a second argument of Zero 7 5 6 4 lt returns the first argument and no domain error is produced A 14 7 The set of signals for the signal function 7 7 1 1 The signal function is not implemented A 14 8 The output for p conversion in the fprintf function 7 9 6 1 The address is printed as an unsigned long A 14
211. ample r1O0 1PPs2000 myti Les HEX will shift the block of data from 100h 1FFh to the new address range 2100h 21FFh Be careful when shifting sections of executable code Program code should only be shifted if it is position independent 6 6 1 2 PREFIX When the operator precedes an argument or input file the data obtained from that source will be forced into the output file and will overwrite another other data existing at that address range For example input HEX STRING 1000 My string DS51865B page 166 2010 Microchip Technology Inc Utilities Ordinarily HEXMATE will issue an error if two sources try to store differing data at the same location Using the operator informs HEXMATE that if more than one data source tries to store data to the same address the one specified with a prefix will take priority 6 6 1 8 ADDRESSING By default all address arguments in HEXMATE options expect that values will be entered as byte addresses In some device architectures the native addressing format may be something other than byte addressing In these cases it would be much simpler to be able to enter address components in the device s native format To facilitate this the ADDRESSING option is used This option takes exactly one parameter which configures the number of bytes con tained per address location If for example a device s program memory naturally used a 16 bit 2 byte word addressing format the opti
212. ample is the record number in the object file that was causing the problem If you use the DUMP utility to examine the object file you can identify the record however you do not normally need to do this The location loc of the instruction 0Ox1FD the size in bytes of the field in the instruction for the value 1 and the value which is the actual value the symbol rep resents is typically the only information needed to track down the cause of this error Note that a size which is not a multiple of 8 bits will be rounded up to the nearest byte size i e a 7 bit space in an instruction will be shown as 1 byte Generate an assembler list file for the appropriate module Look for the address spec ified in the error message OPEC AEN MOVLW 33 8 07FD 6FFC MOVWF _foo o gt 0 7 0012 RETURN and to confirm look for the symbol referenced in the assembler instruction at this address in the symbol table at the bottom of the same file Symbol Table Pi Aug 12 13717 37 2004 DS51865B page 284 2010 Microchip Technology Inc _foo OLFC main O7FF In this example the instruction causing the problem takes an 8 bit offset into a bank of memory but clearly the address 0x1FC exceeds this size Maybe the instruction should have been written as MOVWF _foo amp 0ffh which masks out the top bits of the address containing the bank information lf the assembler instruction that caused this error was generated by the compiler in t
213. an be accessed from C code using the declaration extern unsigned char resetbits The assembly equates powerdownand___ timeout represent the bit address of the powerdown and timeout bits within the STATUS register and can be used if required These can be accessed from C code using the declarations extern bit _ powerdown extern bit _ timeout See Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 3 11 2 The Powerup Routine some hardware configurations require special initialization often within the first few instruction cycles after reset To achieve this there is a hook to the reset vector provided via the powerup routine This routine can be supplied in a user defined assembler module that will be executed immediately after reset A template powerup routine is provided in the file powerup as which is located in the sources directory of your compiler distribution Refer to com ments in this file for more details The file should be copied to your working directory modified and included into your project as a source file No special linker options or other code is required The compiler will detect if you have defined a powerup routine and will automatically use it provided the code in this routine is contained in a psect called powerup For correct operation when using the default compiler generated runtime startup code the code must end with a GOTO instruction to the label call
214. ar in mind that one pointer can be assigned the addresses of many objects for example a pointer that is a parameter to a function is assigned a new object address every time the function is called The definition of the pointer must be valid for every target address assigned Note Care must be taken when describing pointers Is a const pointer a pointer that points to const objects or a pointer that is const itself You can talk about pointers to const and const pointers to help clarify the definition but such terms may not be universally understood 3 4 4 2 DATA POINTERS The HI TECH C compiler monitors and records all assignments of addresses to each data pointer the program contains This includes assignment of the addresses of objects to pointers assignment of one pointer to another initialization of pointers when they are defined and takes into account when pointers are ordinary variables and func tion parameters and when pointers are used to access basic objects or structures or arrays The size and format of the address held by each pointer is based on this information When more than one address is assigned to a pointer at different places in the code a set of all possible targets the pointer can address is maintained This information is spe cific to each pointer defined in the program thus two pointers with the same C type may hold addresses of different sizes and formats due to the way the pointers we
215. ariable may not be void Only a function can be void e g int aj void b this makes no sense 289 only functions may be qualified interrupt Parser The qualifier interrupt may not be applied to anything except a function e g 2010 Microchip Technology Inc DS51865B page 263 HI TECH C for PIC10 12 16 User s Guide variables cannot be qualified interrupt interrupt int input 290 illegal function qualifier s Parser A qualifier has been applied to a function which makes no sense in this context Some qualifier only make sense when used with an lvalue e g const or volatile This may indicate that you have forgotten out a star indicating that the function should return a pointer to a qualified object e g Const Char cerv vo10 Y7 const char cervy void perhaps ZZ error flagged bere return ccip 291 K amp R identifier not an argument Parser This identifier that has appeared in a K amp R style argument declarator is not listed inside the parentheses after the function name e g int process input ink Wipe OOps that should be int input 292 function parameter may not be a function Parser A function parameter may not be a function It may be a pointer to a function so per haps a has been omitted from the declaration 293 bad size in index_type Parser This is an internal compiler error Contact HI TECH Software technical s
216. asct ime Thus the example program prints the current time and date Example include lt stdio h gt include lt time h gt void main void time_t clock time amp clock pbrinci s lt cLime CeGlock See Also gmtime localtime asctime time Return Value A to the string Note The example will require the user to provide the time routine as one cannot be supplied with the compiler See time for more detail DS51865B page 188 2010 Microchip Technology Inc Library Functions DEVICE ID READ Synopsis include lt htc h gt unsigned int device id read void Description This function returns the device ID code that is factory programmed into the chip This code can be used to identify the device and its revision number Example include lt htc h gt void main void unsigned int id_value unsigned int device_code unsigned char revision_no id_value device_id_read lower 5 bits represent revision number x Upper LL bats identity devico 7 device_code id_value gt gt 5 revision_no unsigned char id_value amp 0x1F See Also flash_read config_read Return Value device_id_read returns the 16 Bit factory programmed device id code used to identify the device type and its revision number Note The device_id_read Is applicable only to those devices which are capable of reading their own program memory
217. ast of the memory summaries show the memory is has not been allocated and is hence unused The linker is aware of any memory allocated by the code generator for absolute variables and so this free space is accurate This section follows the heading UNUSED ADDRESS RANGES and is followed by a list of classes and the memory still available in each class If there is more than one memory range available in a class each range is printed on a separate line Any paging boundaries within a class are not displayed but the column Largest block shows the largest contiguous free space which takes into account any paging in the memory range If you are looking to see why psects cannot be placed into memory e g cant find space type errors then this important information to study DS51865B page 152 2010 Microchip Technology Inc Linker Note that the memory associated with a class can overlap that in others thus the total free space is not simply the addition of all the unused ranges 5 4 2 6 SYMBOL TABLE The final section in the map file list global symbols that the program defines This section has a heading Symbol Table and is followed by two columns in which the symbols are alphabetically listed As always with the linker any C derived symbol is shown with its assembler equivalent symbol name See Section 3 13 3 1 Equivalent Assembly Symbols The symbols listed in this table are e Global assembly labels e Global E
218. at a is assigned the value 0 then immediately checked to see if it is equal to 10 Because a is modified during the for loop the comparison code cannot be removed but the code generator will adjust the code so that the comparison is not performed on the first pass of the loop only on the subsequent passes This may not reduce code size but it will soeed program execu tion 758 constant conditional branch possible use of instead of Code Generator There is an expression inside an if or other conditional construct where a constant is being assigned to a variable This may mean you have inadvertently used an assign ment instead of a compare e g int a b this can never be false always perform the true statement ee Cat e b 6 will assign the value 4 to a then as the value of the assignment is always true the comparison can be omitted and the assignment to b always made Did you mean this can never be false always perform the true statement if a 4 b 6 which checks to see if a is equal to 4 2010 Microchip Technology Inc DS51865B page 303 HI TECH C for PIC10 12 16 User s Guide 759 expression generates no code Code Generator This expression generates no output code Check for things like leaving off the paren theses in a function call e g int fred fred Tk this 16 valid D t has no etiect at all Some devices require that special function register
219. ate the internal RC oscillator On some baseline PIC devices the calibration constant is stored as a MOVLW instruc tion at the top of program memory e g the PIC12C50X and PIC16C505 parts On Reset the program counter is made to point to this instruction and it is executed first before the program counter wraps around to 0x0000 which is the effective reset vector for the device The default HI TECH C startup routine will automatically include code to load the OSCCAL register with the value contained in the W register after reset on such devices No other code is required For other chips such as PIC12C67X chips the oscillator constant is also stored at the top of program memory but as a RETLW instruction The compiler s startup code will automatically generate code to retrieve this value and perform the configuration Loading of the calibration value can be turned off via the RUNTIME option see Section 2 7 50 RUNTIME Specify Runtime Environment At runtime this calibration value may be read using the macro _READ_OSCCAL_DATA To be able to use this macro make sure that lt htc h gt is included into the relevant modules of your program This macro returns the calibration constant which can then be stored into the OSCCAL register as follows 2010 Microchip Technology Inc DS51865B page 53 HI TECH C for PIC10 12 16 User s Guide OSCCAL _READ OSCCAL DATA The location which stores the calibration cons
220. atible object modules e g linking 386 flat model code with 8086 real mode code 488 psect memory space redefined Linker A global psect has been defined in two different memory spaces Either rename one of the psects or if they are the same psect place them in the same memory space using the space psect flag e g psect spdata class RAM space 0 ds 6 elsewhere psect spdata class RAM space 1 489 psect memory delta redefined Linker A global psect has been defined with two different delta values e g psect final class CODE delta 2 Ee Eiere elsewhere psect final class CODE delta 1 490 class memory space redefined Linker A class has been defined in two different memory spaces Either rename one of the classes or if they are the same class place them in the same memory space WW 491 can t find 0x words for psect in segment Linker One of the main tasks the linker performs is positioning the blocks or psects of code and data that is generated from the program into the memory available for the target device This error indicates that the linker was unable to find an area of free memory large enough to accommodate one of the psects The error message indicates the name of the psect that the linker was attempting to position and the segment name which is typically the name of a class which is defined with a linker A option Section 3 10 1 Compiler generated Ps
221. ault number indicating a level of importance This number is specified in the MDF and ranges from 9 to 9 The higher the number the more important the warning Warning messages can be disabled by adjusting the warning level threshold using the WARN driver option see Section 2 7 59 WARN Set Warning Level Any warn ings whose level is below that of the current threshold are not displayed The default threshold is 0 which implies that only warnings with a warning level of 0 or higher will be displayed by default The information in this option is propagated to all compiler applications so its effect will be observed during all stages of the compilation process Warnings may also be disabled by using the MSGDISABLE option see Section 2 7 37 MSGDISABLE Disable Warning Messages This option takes a comma separated list of message numbers Those warnings listed are disabled and will never be issued regardless of the current warning level threshold some warning messages can also be disabled by using the warning pragma This pragma will only affect warnings that are produced by either the parser or the code gen erator i e errors directly associated with C code See Section 3 15 3 8 The pragma warning Directive for more information on this pragma Error messages can also be disabled however a more verbose form of the command is required to confirm the action To specify an error message number in the MSG DI
222. ay work These factors do not affect code written in C If assembly must be added it is preferable to write this as self contained routine in a separate assembly module rather than in lining it in C code 3 13 1 Integrating Assembly Language Modules Entire functions may be coded in assembly language as separate as or asm source files included into your project They will be assembled and combined into the output image using the linker The following are guidelines that must be adhered to when writing a routine ina C callable assembly routine e Select or define a suitable psect for the executable assembly code e Select a name label for the routine using a leading underscore character e Ensure that the routine s label is globally accessible from other modules e Select an appropriate equivalent C prototype for the routine on which argument passing can be modelled Limit arguments and return values to single byte sized objects Assembly routines may not define variables that reside in the compiled stack Use global variables 2010 Microchip Technology Inc DS51865B page 97 HI TECH C for PIC10 12 16 User s Guide for additional arguments e Optionally use a signature value to enable type checking when the function is called e Use bank selection instructions and mask addresses of symbols The following example goes through these steps A mapping is performed on the names of all C functions and non static globa
223. b dE de EE one struct Two 4 unsigned a unsigned b fe Sg two struct ONE oneptr oneptr amp two J OOpa was ONE meant to be same struct as TWO 1267 fixup overflow referencing into bytes at 0x Linker See the following error message 477 for more information 2010 Microchip Technology Inc DS51865B page 331 HI TECH C for PIC10 12 16 User s Guide 1268 fixup overflow storing 0x in bytes at Linker See the following error message 477 for more information 1273 Omniscient Code Generation not available in Lite mode Driver This message advises that advanced features of the compiler are not be enabled in this Lite mode compiler 1275 only functions may be qualified Parser A qualifier which only makes sense when used in a function definition has been used with a variable definition Interrupt ant dacResult oops the interrupt qualifier can only be used with functions 1276 buffer overflow in DWARF location list Cromwell A buffer associated with the ELF DWARF debug file has overflowed Contact HI TECH Support with details 1278 omitting which does not have a location Cromwell A variable has no storage location listed and will be omitted from the debug output Contact HI TECH Support with details 1284 malformed mapfile while generating summary CLASS expected but not found Driver The map file being read to produce a memory summar
224. be indirectly called Inform the linker that a function is the root of a call graph Inform the linker of argument and local variable for a function Macro definition End macro definition Define local tabs Align output to the specified boundary Generate code to select bank of operand Generate set clear instruction to set PCLATH bits for this page PROCESSOR REPT Repeat a block of code n times Define the particular chip for which this file is to be assembled IRP Repeat a block of code with a list IRPC Repeat a block of code with a character list SIGNAT Define function signature 4 3 9 1 GLOBAL The GLOBAL directive declares a list of comma separated symbols If the symbols are defined within the current module they are made public If the symbols are not defined in the current module they are made references to public symbols defined in external modules Thus to use the same symbol in two modules the GLOBAL directive must be used at least twice once in the module that defines the symbol to make that symbol public and again in the module that uses the symbol to link in with the external definition For example GLOBAL labl lab2 lab3 4 3 9 2 END The END directive is optional but if present should be at the very end of the program lt will terminate the assembly and not even blank lines should follow this directive If an expression is supplied as an argument that expression will be used to define the entry point
225. be supplied with the compiler See time for more detail E DS51865B page 204 2010 Microchip Technology Inc Library Functions LOG LOG10 LONGJMP Synopsis include lt math h gt double log double f double Tool double f Description The log function returns the natural logarithm of f The function 10910 returns the logarithm to base 10 of Example Fine ude lt math bs include lt stdio h gt void main void double f for f 1 0 OLIN CE T See Also exp pow Return Value Zero if the argument is negative Synopsis include lt setjmp h gt void longjmp mp Duf buf int val Description The Long jmp function in conjunction with set jmp provides a mechanism for non local goto s To use this facility set jmp should be called with a jmp_buf argument in some outer level function The call from set jmp will return O To return to this level of execution longjmp may be called with the same jmp_buf argument from an inner level of execution Note however that the function which called set jmp must still be active when long jmp is called Breach of this rule will cause disaster due to the use of a stack containing invalid data The val argument to long jmp will be the value apparently returned from the set jmp This should normally be non zero to distinguish it from the genuine set jmp call 2010 Microchip Technology Inc DS5186
226. ber in decimal octal or hexadecimal radix The radix is specified by a trailing for octal or H for HEX A leading 0x may also be used for hexadecimal Case in not important for any number or radix Decimal is the default e g ACODE 0h ffff Did you forget the radix ACODE 0h ffffh DS51865B page 280 2010 Microchip Technology Inc see Section 5 2 1 Aclass low high for more information IERT 446 bad overrun address in A spec Linker The overrun address given in a A specification is invalid it should be a valid number in decimal octal or hexadecimal radix The radix is specified by a trailing O for octal or H for HEX A leading 0x may also be used for hexadecimal Case in not important for any number or radix Decimal is default e g AENTRY 0 OFFhH 1FF Did you forget the radix AENTRY 0 OFFh 1FFh 447 bad load address in A spec Linker The load address given in a a specification is invalid it should be a valid number in decimal octal or hexadecimal radix The radix is specified by a trailing O for octal or H for HEX A leading 0x may also be used for hexadecimal Case in not important for any number or radix Decimal is default e g ACODE 0h 3fffh a000 Did you forget the radix ACODE 0h 3fffh a000h WW 448 bad repeat count in A spec Linker The repeat count given in a a specification is invalid e g AENTRY 0 0FFhxf Did you forget the radix
227. ble in debuggers when this option is used This option can be applied if compiling using PICC the command line driver and the OPT driver option see Section 2 7 42 OPT Invoke Compiler Optimizations 2010 Microchip Technology Inc DS51865B page 117 HI TECH C for PIC10 12 16 User s Guide 4 2 10 O Specify Output File By default the assembler determines the name of the object file to be created by strip ping any suffix or extension from the first source filename and appending obj The O option allows the user to override the default filename and specify a new name for the object file 4 2 11 T Specify Listing Page Width This option allows specification of the assembly list file page width in characters width should be a decimal number greater than 41 The default width is 80 characters 4 2 12 V Produce Assembly Debug Information This option will include line number and filename information in the object file produced by the assembler Such information may be used by debuggers Note that the line numbers will correspond with assembler code lines in the assembler file This option should not be used when assembling an assembly file produced by the code generator In that case debug information should relate back to the original C source not the intermediate assembly code 4 2 13 VER Specify Version Information This option allows the full version information including optional text to indicate
228. but can be qualified st atic allowing them to be defined locally within a function as in vord MyFPunG ek 4 static bankl unsigned char play mode If the PICC option STRICT is used these qualifiers are changed to bank _bank1 __ bank and bank3 3 5 MEMORY ALLOCATION AND ACCESS There are two broad groups of RAM based variables auto parameter variables which are allocated to some form of stack and global static variables which are positioned freely throughout the data memory space The memory allocation of these two groups is discussed separately in the following sections 3 5 1 Address Spaces All Baseline and Mid Range PIC MCU devices have a Harvard architecture that has a separate data memory space RAM and program memory space often flash Some devices also implement EEPROM The data memory uses banking to increase the amount of available memory referred to in the data sheets as the general purpose register file without having to increase the assembly instruction width One bank is selected by setting one or more bits in an SFR Consult your device data sheet for the exact operation of the device you are using Instructions which access a data address use only the offset into the currently selected bank to access data Some devices only have one bank but many have more than one Both the general purpose RAM and SFRs both share the same data space and may appear in all available memory banks Due to the prese
229. by the drivers TABLE 3 11 PREDEFINED MACROS HI_TECH_C Always To indicate that the compiler in use is HI TECH C compiler _HTC_VER_MAJOR_ To indicate the integer compo nent of the compiler s version number _HTC_VER_MINOR_ To indicate the decimal compo nent of the compiler s version number _HTC_VER_PATCH_ Always To indicate the patch level of the compiler s version number _HTC_EDITION_ Always Indicates which of PRO Standard or Lite compiler is in use Values of 2 1 or 0 are assigned respectively __ PICC__ Always Indicates HI TECH compiler for Microchip PIC10 12 16 in use _MPC_ Always Indicates compiling for Microchip PIC MCU family PTI If Baseline 12 bit device To indicate selected device is a baseline PIC devices PICIA If Mid Range 14 bit device To indicate selected device is a Mid Range PIC devices _PIC14E If Enhanced Mid Range 14 bit To indicate selected device is an device Enhanced Mid Range PIC devices _ COMMON If common RAM present To indicate whether device has common RAM area _BANKBITS_ Always Assigned 0 1 or 2 to indicate 1 2 or 4 available banks or RAM _GPRBITS_ Always Assigned 0 1 or 2 to indicate 1 2 or 4 available banks or general purpose RAM MPTAB EECHER If compiling for MPLAB ICD or where x is empty 2 or 3 MPLAB ICD 2 3 debugger Assigned 1 to indicate that the code Is generated for use with the Microchip MPLAB ICD ICD 2 or ICD 3 MPLAB ICD If compil
230. c error e g heras is a comment which I have forgotten to close if a gt b 0 that will be closed here thus removing the if else my if has been lost CG 0xff 249 probable missing in previous block Parser The compiler has encountered what looks like a function or other declaration but the preceding function has not been ended with a closing brace This probably means that a closing brace has been omitted from somewhere in the previous function although it may well not be the last one e g void set char a PORTA a the closing brace was left out here youd cl artvyond error flagged here Ze DS51865B page 258 2010 Microchip Technology Inc PORTA 0 251 array dimension redeclared Parser An array dimension has been declared as a different non zero value from its previous declaration It is acceptable to redeclare the size of an array that was previously declared with a zero dimension but not otherwise e g extern int array 5 int array EOF oops has it 5 or 10 elements 252 argument conflicts with prototype Parser The argument specified argument 0 is the left most argument of this function definition does not agree with a previous prototype for this function e g ZZ Chis 2s supposedly Cale Ss prototype 7 extern int calc int int int Cake int ay long qnt H TE Hmmm which 1s seg nt error
231. cal task for this option might be to position a serial number in program memory The byte width of data to store is determined by the byte width of the hexcode param eter in the option For example to store a one byte value 0 at program memory address 1000h use SERIAL 00 1000 To store the same value as a four byte quantity use SERIAL 00000000 1000 This option is functionally identical to the corresponding HEXMATE option For more detailed information and advanced controls that can be used with this option refer to Section 6 6 1 15 SERIAL The driver will also define a label at the location where the value was stored and which can be referenced from C code as _serial0 To enable access to this symbol remember to declare it for example extern const int _serial0 See Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 53 SETOPTION Set The Command line Options for Application This option is used to supply alternative command line options for the named application when compiling The general form of this option is SETOPTION app file where the app component specifies the application that will receive the new options and the file component specifies the name of the file that contains the additional options that will be passed to the application This option is not required for most projects If specifying more than one option to a component each option must be
232. cation in the chip configuration file 1018 illegal number of specification found expected in chipinfo file at line Driver This attribute was expected to appear a certain number of times but it did not for this chip TPA 1019 duplicate specification in chipinfo file at line Driver This attribute can only be defined once but has been defined more than once for this chip IERT 1020 unknown attribute in chipinfo file at line Driver The chip configuration file contains an attribute that is not understood by this version of the compiler Has the chip configuration file or the driver been replaced with an equiv alent component from another version of this compiler IERT WW 1021 syntax error reading value in chipinfo file at line Driver The chip configuration file incorrectly defines the specified value for this device If you are modifying this file yourself take care and refer to the comments at the beginning of this file for a description on what type of values are expected here 2010 Microchip Technology Inc DS51865B page 321 HI TECH C for PIC10 12 16 User s Guide 1022 syntax error reading range in chipinfo file at line Driver The chip configuration file incorrectly defines the specified range for this device If you are modifying this file yourself take care and refer to the comments at the beginning of this file for a description on what type o
233. ccount interrupts which also use levels of the stack A call graph is provided by the code generator in the assembler list file This will indicate the stack levels at each function call and can be used as a guide to stack depth The code generator may also produce warnings if the maximum stack depth is exceeded Both of these are guides to stack usage Optimizations and the use of interrupts can decrease or increase respectively the stack depth used by a program over that determined by the compiler DS51865B page 48 2010 Microchip Technology Inc C Language Features 3 3 4 Configuration Bit Access The PIC device processor s configuration bits may be set using the __ CONFIG macro as follows CONFIG x Note there are two leading underscore characters The macro is defined in the lt htc h gt header file so be sure to include this into the files that use this macro The x argument is the value that is to be programmed in the configuration word The value can either be a literal or be built up from specially named quantities that are defined in the header file appropriate for the processor you are using These macro names are similar to the names as used in the PIC10 12 16 data sheets to represent the configuration conditions and must be bitwise ANDed together to form the configu ration value Refer to your processor s header file for details For example include lt htc h gt _ CONFIG OVDIDILS amp HS amp UNPR
234. ceeeeeeeeeeeeseeeeeeeeeeeeeas 88 GIV TUIMC TOM EE 190 davide DY Zel Orria 345 lei ell ee 96 alee n LTE 36 97 double data EE 32 56 driver command EE 8 command teg E 7 APULIEN 7 long command lines ccccsseeeeeeeeeeeeeeeeeeeesaaeees 8 ai lei EE 7 32 Single Step compilation ccceeeeeeeeeeeeeeeeeees 13 driver option ee Ee EE A E E E eal E 24 VE 24 ADDRQUAL tech eege 29 44 69 70 EE 23 ASMEIS Tresserras a 17 28 29 117 137 EE 24 CHECKSUM WEE 29 45 GRIP eso seca seston tects eo 30 118 150 CRIRINFO essa eebe eebe 30 CODEOFFSE eer ees 30 45 E EE 31 RE 24 28 43 DEBUGGER rarei N 31 45 deau crete Cacia danse th EE 23 DOUBLE setae ee ee cast 32 46 56 Sanne eee ee ee eee een a eects ere cee E eee ee ee 20 24 ECHO E 32 ERREORMA WEE 20 32 ERRORS Leger 18 32 119 149 FUE EE 30 32 45 POA RE 33 E EE 25 GE PORTION EE 33 PWS EE 33 Keeler 25 43 JI SE 33 WE 26 L linker optons 26 149 151 RTE 19 33 VEH 17 27 149 DS51865B page 354 2010 Microchip Technology Inc Vill 34 ENDIF EECH 131 MODE aaa charts ote ain clasnatdeceadtond eemace 34 44 END geess ee EE 132 Ve Elke CR 21 34 118 enhanced symbol les 144 MSCGEORMAT 20 32 34 EELER eege ett EE tee Ee 126 d EE 27 44 environment variables ccceeeeeeeeeeecceceeceeceeeaeeeees 8 NOD Ele EE 13 34 Bake Ce EE 120 123 130 NOE E 34 equating assembly symbols sssssesennneeseeeeeee ennn 130 NONG aei E O AEAEE 23 eno
235. cific size vf Heap size rewire E e E E Iw ERT IN P d FE gd e Iw E bt UL Frequency Extend address 0 in HEN file r Interrupt options Summary options f Display pect usage Number of vectors S I Display class usage Geeta Eechen Iw Display overall memory usage Display HES usage map Type of vector Eet poe Runtime options These checkboxes control the many runtime features the com piler can employ See Section 2 7 50 RUNTIME Specify Runtime Environ ment Fill This field allows a fill value to be specified for unused memory locations See Section 2 7 29 FILL Fill Unused Program Memory Codeoffset This field allows an offset for the program to be specified See Section 2 7 22 CODEOFFSET Offset Program Code to Address Checksum This field allows the checksum specification to be specified See Section 2 7 19 CHECKSUM Calculate a checksum Errata Not applicable Vectors Not applicable Callgraph Not applicable Debugger This selector allows the type of hardware debugger to be chosen See Section 2 7 24 DEBUGGER Select Debugger Type Trace type Not yet implemented Stack size Not applicable 11 12 13 Heap size Not applicable Frequency Not applicable Extend address 0 in HEX file This option specifies that the intel HEX file should have initialization to zero of the upper address See Section 2 7 44 OUTPUT
236. cified 899 can t open option file for application Driver An option file specified by a getoption or setoption driver option could not be opened If you are using the setoption option ensure that the name of the file is spelt correctly and that it exists If you are using the getoption option ensure that this file can be created at the given location or that it is not in use by any other appli cation 900 exec failed Driver The subcomponent listed failed to execute Does the file exist Try re installing the compiler 902 no chip name specified use CHIPINFO to see available chip names Driver The driver was invoked without selecting what chip to build for Running the driver with the CHIPINFO option will display a list of all chips that could be selected to build for TPA 904 illegal format specified in option Driver The usage of this option was incorrect Confirm correct usage with HELP or refer to the part of the manual that discusses this option TP aT 905 illegal application specified in option Driver The application given to this option is not understood or does not belong to the com piler 907 unknown memory space tag in option specification Driver A parameter to this memory option was a string but did not match any valid tags Refer to the section of this manual that describes this option to see what tags if any are valid for this device
237. command line driver PICC to disable particular message numbers It takes a comma separate list of message numbers that will be disabled during compilation This option is applied if compiling using PICC the command line driver and the MSGDISABLE driver option see Section 2 7 37 MSGDISABLE Disable Warn ing Messages See Section 2 6 Compiler Messages for full information about the compiler s messaging system 5 2 28 EDF message file Set Message File Path This option is mainly used by the command line driver PICC to specify the path of the message description file The default file is located in the dat directory in the compiler s installation directory see Section 2 6 Compiler Messages for full information about the compiler s messaging system 2010 Microchip Technology Inc DS51865B page 147 HI TECH C for PIC10 12 16 User s Guide 5 2 29 EMAX number Specify Maximum Number of Errors This option is mainly used by the command line driver PICC to specify the maximum number of errors that can be encountered before the assembler terminates The default number is 10 errors This option is applied if compiling using PICC the command line driver and the ERRORS driver option see Section 2 7 28 ERRORS Maximum Number of Errors See Section 2 6 Compiler Messages for full information about the compiler s messaging system 5 2 30 NORLF Do Not Relocate List File
238. const char s const char res Description Parse the string s converting it to a double floating point type This function converts the first occurrence of a substring of the input that is made up of characters of the expected form after skipping leading white space characters If res is not NULL it will be made to point to the first character after the converted sub string Example include lt stdio h gt include lt strlib h gt void main void char buf 35 7 23s T char end double inl in2 inl strtod buf amp end in2 strtod end NULL GELINCE comes Si con anil in2 BEN 2010 Microchip Technology Inc DS51865B page 231 HI TECH C for PIC10 12 16 User s Guide See Also atof Return Value Returns a double representing the floating point value of the converted input string STRTOL Synopsis include lt stdlib h gt double strtol const char s const char res int base Description Parse the string s converting it to a long integer type This function converts the first occurrence of a substring of the input that is made up of characters of the expected form after skipping leading white space characters The radix of the input is determined from base If this is zero then the radix defaults to base 10 If res is not NULL it will be made to point to the first character after the converted sub string Example include lt stdio h gt include lt strlib h gt void ma
239. ct files as produced by the linker into a variety of different formats including various HEX formats The program is invoked thus OBJTOHEX options inputfile outputfile All of the arguments are optional The options for OBJTOHEX are listed in Table 6 3 TABLE 6 3 OBJTOHEX COMMAND LINE OPTIONS Option Meaning O OOOO SOS onea cema oulputfile mgesat OOOO Format either Motorola or Intel HEX file where n is the maximum number of bytes per record and m specifies the record size rounding Non rounded records are zero padded to a multiple of m m itself must be a multiple of 2 Se EDF Specify message file location EMAX Specify maximum number of errors MSGDISABLE Specify disabled messages Print version number and stop If output file is omitted it defaults to 1 HEX or 1 bin depending on whether the b option is used The input file defaults to 1 obj Except where noted any address will be interpreted as a decimal value To force inter pretation as a HEX number a trailing H or h should be added e g 765FH will be treated as a HEX number DS51865B page 158 2010 Microchip Technology Inc Utilities 6 3 1 Checksum Specifications If you are generating a HEX file output use HEXMATE s checksum tools described in Section 6 6 HEXMATE For other file formats the OBJTOHEX checksum specification allows automated checksum calculation and takes the form of several lines each line describing one c
240. ction in the case of enhanced Mid Range PIC devices In case this directive expands to more than one instruction it should not immediately follow a BTFSX instruction For example CALL get Input PAGESEL select this page 4 3 9 19 PROCESSOR The output of the assembler may vary depending on the target device The device name is typically set using the CHIP option to the command line driver PICC see Section 2 7 20 CHIP Define Processor or using the assembler s CHIP option see Section 4 2 15 CHIP Specify Device Name but can also be set with this directive e g PROCESSOR 16F877 This directive will override any processor selected by a command line option DS51865B page 134 2010 Microchip Technology Inc Macro Assembler 4 3 9 20 SIGNAT This directive is used to associate a 16 bit signature value with a label At link time the linker checks that all signatures defined for a particular label are the same and pro duces an error if they are not The SIGNAT directive is used by HI TECH C to enforce link time checking of C function prototypes and calling conventions Use the SIGNAT directive if you want to write assembly language routines which are called from C For example SIGNAT fred 6192 will associate the signature value 8192 with the symbol _ fred If a different signature value for _f red Is present in any object file the linker will report an error The easiest way to determine the corr
241. ction would typically be called as follows Cast turn off interrupts read IN_CH1 ei re enable interrupts When the code generator outputs code and data objects it does so into a number of standard program sections referred to as psects A psect is just a block of some thing a block of code a block of data etc By having everything inside a psect all these blocks can be easily recognized and sorted by the linker even though they have come from different modules One of the main jobs of the linker is to group all the psects from the entire project and place these into the available memory for the device A psect can be created in assembly code by using the PSECT assembler directive see Section 4 3 9 3 PSECT The code generator uses this directive to direct assembly code it produces into the appropriate psect 3 10 1 Compiler generated Psects The code generator places code and data into psects with standard names which are subsequent positioned by the default linker options The linker does not treat these compiler generated psects any differently to a psect that has been defined by yourself 1 Some compilers use the terms section segment or block but the concept is the same DS51865B page 90 2010 Microchip Technology Inc C Language Features Some psects in particular the data memory psects use special naming conventions For example take the bss psect The name bss is historical
242. cts section associated with each function and which is shown in the assembly list file relates to this bank tracking mechanism See 4 4 Assembly List Files for more information of the content of these files 3 9 INTERRUPTS The compiler incorporates features allowing interrupts to be fully handled from C code Interrupt functions are often called nterrupt Service Routines Gel Note Baseline devices do not utilize interrupts and so the following sections are only applicable for Mid Range and Enhanced Mid Range devices DS51865B page 86 2010 Microchip Technology Inc C Language Features There is only one interrupt vector on Mid Range and Enhanced Mid Range devices Regardless of the source of the interrupt the device will vector to one specific location in program memory and execution continues from that address This address is funda mental to the operation of the device and cannot be changed Each interrupt source typically has a control bit in an SFR which can disable that inter rupt source In addition there is a global interrupt enable bit that can disable all inter rupts sources and ensure that an interrupt can never occur There is no priority of interrupt sources Check your device data sheet for full information how your device handles interrupts Interrupt code is the name given to any code that executes as a result of an interrupt occurring Interrupt code completes at the point where the corresponding
243. d Cromwell While reading a file one of the file s records ended short of its specified length 1042 unknown record type 0x Cromwell The type indicator of this record did not match any valid types for this file format 1043 unknown optional header Cromwell When reading this Microchip COFF file the optional header within the file header was of an incorrect length 1044 end of file encountered Cromwell Linker The end of the file was found while more data was expected Has this input file been truncated 1045 short read on block of bytes Cromwell A while reading a block of byte data from a UBROF record the block ended before the expected length 1046 short string read Cromwell A while reading a string from a UBROF record the string ended before the specified length 1047 bad type byte for UBROF file Cromwell This UBROF file did not begin with the correct record 1048 bad time date stamp Cromwell This UBROF file has a bad time date stamp 2010 Microchip Technology Inc DS51865B page 323 HI TECH C for PIC10 12 16 User s Guide 1049 wrong CRC on 0x bytes should be Cromwell An end record has a mismatching CRC value in this UBROF file 1050 bad date in 0x52 record Cromwell A debug record has a bad date component in this UBROF file 1051 bad date in 0x01 record Cromwell A start of program record or segment record has a bad date component in this UBROF ile 1052 unknow
244. d Parser An attribute has been encountered that is valid but which is not implemented by the parser It will be ignored by the parser and the attribute will have no effect Contact HI TECH Support with details IERT 1317 missing argument to attribute Parser An attribute has been encountered that requires an argument but this is not present Contact HI TECH Support with details IERT 1318 invalid argument to attribute Parser An argument to an attribute has been encountered but it is malformed Contact HI TECH Support with details 1319 invalid type for attribute Parser This indicated a bad option passed to the parser Contact HI TECH Support with details 1320 attribute already exists Parser This indicated the same attribute option being passed to the parser more than once Contact HI TECH Support with details 2010 Microchip Technology Inc DS51865B page 335 HI TECH C for PIC10 12 16 User s Guide 1321 bad attribute T option s Parser The attribute option passed to the parser is malformed Contact HI TECH Support with details 1322 unknown qualifier s given to T Parser The qualifier specified in an attribute option is not known Contact HI TECH Support with details 1323 attribute expected Parser The __ attribute directive was used but did not specify an attribute type int rv int a _ attribute_ oops what is the attribute 1324 qualifier
245. d OPTION and macros for the bit symbols which are stored in this register P ICC will automatically use the OPTION instruction when an appropriate processor is selected and the OPTION register is accessed For example to set the prescaler assignment bit so that prescaler is assigned to the watchdog timer the following code can be used OPTION PSA This will load the appropriate value into the w register and then call the OPTION instruction 3 3 9 2 THE TRIS INSTRUCTIONS Some PIC devices use a TRIS instruction to load the TRIS register The lt htc h gt header file will ensure a special definition for a C object called TRIS PICC will auto matically use the TRIS instruction when an appropriate processor is selected and the TRIS register is accessed For example to make all the bits on the output port high impedance the following code can be used TRIS ORE rs This will load the appropriate value into the w register and then call the TRIS instruction Those PIC devices which have more than one output port may have definitions for objects TRISA TRISB and TRISC depending on the exact number of ports available This objects are used in the same manner as described above 3 3 9 3 OSCILLATOR CALIBRATION CONSTANTS some PIC devices come with an oscillator calibration constant which is pre pro grammed into the device s program memory This constant can be read from program memory and written to the OSCCAL register to calibr
246. d after the Efile or E f1ile options could not be opened Check to ensure that the file or directory is valid and that has read only access 1241 bad start address in Driver The start of range address for the CHECKSUM option could not be read This value must be a hexadecimal number 1242 bad end address in Driver The end of range address for the CHECKSUM option could not be read This value must be a hexadecimal number 2010 Microchip Technology Inc DS51865B page 329 HI TECH C for PIC10 12 16 User s Guide 1243 bad destination address in Driver The destination address for the CHECKSUM option could not be read This value must be a hexadecimal number 1245 value greater than zero required for Hexmate The align operand to the HEXMATE FIND option must be positive 1246 no RAM defined for variable placement Code Generator No memory has been specified to cover the banked RAM memory 1247 no access RAM defined for variable placement Code Generator No memory has been specified to cover the access bank memory 1248 symbol encountered with undefined type size Code Generator The code generator was asked to position a variable but the size of the variable is not known This is an internal compiler error Contact HI TECH Software technical support with details 1250 could not find space byte for variable Code Generator The code generator could not find
247. d at any location even on top of other objects This warning from the code generator indicates that an absolute has been detected that will be located at memory that the compiler will be reserving You must locate the absolute variable at a different location This message will commonly be issued when placing variables in the common memory space char shared 0x7 oops this memory is required by the compiler 0 delete what Libr The librarian requires one or more modules to be listed for deletion when using the d key e g dE od C2 NE pie E EE does not indicate which modules to delete try something like LIDE lt he Spe isp Ee wor ob7 0 incomplete ident record Libr The IDENT record in the object file was incomplete Contact HI TECH Support with details 0 incomplete symbol record Libr The SYM record in the object file was incomplete Contact HI TECH Support with details 0 library file names should have lib extension Libr Use the 1ib extension when specifying a library filename 0 module defines no symbols Libr No symbols were found in the module s object file This may be what was intended or it may mean that part of the code was inadvertently removed or commented 0 replace what Libr The librarian requires one or more modules to be listed for replacement when using the r key e g libr r ted dip This command needs the name of a module obj file after the library name DS51865B p
248. d in is too large not all will be used and debugging information may be affected 1301 invalid ELF section header Skipping Cromwell Cromwell found an invalid section in an ELF section header This section will be skipped 1302 could not find valid ELF output extension for this device Cromwell The extension could not be for the target device family 1303 invalid variable location detected Cromwell A symbol location could not be determined from the SDB file 1304 unknown register name Cromwell The location for the indicated symbol in the SDB file was a register but the register name was not recognized TP a 1305 inconsistent storage class for variable Cromwell The storage class for the indicated symbol in the SDB file was not recognized 1306 inconsistent size vs for variable Cromwell The size of the symbol indicated in the SDB file does not match the size of its type 1307 psect truncated to bytes Driver The psect representing either the stack or heap could not be made as large as requested and will be truncated to fit the available memory space IERT 1308 missing conflicting interrupts sub option defaulting to Driver The suboptions to the INTERRUPT option are missing or malformed e g INIPRRUPIS si1ngle mules Oops did you mean single vector or multi vector interrupts 1309 ignoring invalid runtime sub option using default Driver The in
249. d non prototyped arguments Parser A function declaration can only have all prototyped arguments i e with types inside the parentheses or all K amp R style args i e only names inside the parentheses and the argument types in a declaration list before the start of the function body e g nt plus int ay f cops a aS Procotyped D ae mot 7 int b return a bD IERT 278 argument redeclared Parser The specified argument is declared more than once in the same argument list e g can t have two parameters called a int calc int a int a 279 initialization of function arguments is illegal Parser A function argument can t have an initializer in a declaration The initialization of the argument happens when the function is called and a value is provided for the argument by the calling function e g t gops a is initialized when proc is called extern int proc int a Hl DS51865B page 262 2010 Microchip Technology Inc 280 arrays of functions are illegal Parser You can t define an array of functions You can however define an array of pointers to functions e g int farray oops should be int farray 281 functions can t return functions Parser A function cannot return a function It can return a function pointer A function returning a pointer to a function could be declared like this int name Note the many parentheses
250. d putwsize Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 686 bad switch size Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 687 bad pushreg Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 688 bad popreg Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 689 unknown predicate Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 690 interrupt function requires address Code Generator The high end PIC devices support multiple interrupts An address is required with the interrupt definition to indicate with which vector this routine is associated e g vord DEER ssi 080 ue SC isr code goes here This construct is not required for midrange PIC devices 691 interrupt functions not implemented for 12 bit PIC MCU Code Generator The 12 bit range of PIC MCU processors do not support interrupts 2010 Microchip Technology Inc DS51865B page 295 HI TECH C for PIC10 12 16 User s Guide WW 692 interrupt function Generator may only have one interrupt level Code Only one interrupt level may be associated with an interrupt function Check to ensure that only one inter
251. ddress The link or load address may also be the name of another previously linked psect This will explicitly concatenate the current psect with the previously specified psect e g Ptext 0 data 8000h bss Pnvram bss heap This example shows text at zero data linked at 8000h but loaded after text bss is linked and loaded at 8000h plus the size of data and nvram and heap are concat enated with bss Note here the use of two P options Multiple P options are processed in order If a options see Section 5 2 1 Aclass low high have been used to specify address ranges for a class then this class name may be used in place of a link or load address and space will be found in one of the address ranges For example ACODE 8000h BFFENh EOQOQOhH FFFEH Pdata C000h CODE This will link data at COOOh but find space to load it in the address ranges associated with the CODE class If no sufficiently large space is available in this class an error will result Note that in this case the data psect will still be assembled into one contiguous block whereas other psects in the class CODE will be distributed into the address ranges wherever they will fit This means that if there are two or more psects in class CODE they may be intermixed in the address ranges Any psects allocated by a P option will have their load address range subtracted from the address ranges associate with classes in the same memory space This allows
252. de 245 default case not in switch Parser A label has been encountered called default but itis not enclosed by a switch state ment A default label is only legal inside the body of a switch statement lf there is a switch statement before this default label there may be one too many closing braces in the switch code which would prematurely terminate the switch statement See message 246 246 case label not in switch Parser A case label has been encountered but there is no enclosing switch statement A case label may only appear inside the body of a switch statement If there is a switch statement before this case label there may be one too many clos ing braces in the switch code which would prematurely terminate the switch state ment e g Switch input ease Zi count t break case 71 4 if count gt MAX count 0 f boops LADS shouldnt be here break case 2 error flagged here 247 duplicate label Parser The same name is used for a label more than once in this function Note that the scope of labels is the entire function not just the block that encloses a label e g start if a gt 256 goto end start error flagged here if a 0 Goco Starti J which stare label do ump tor e 248 inappropriate else Parser An else keyword has been encountered that cannot be associated with an if state ment This may mean there is a missing brace or other syntacti
253. de 414 read error on Linker The linker encountered an error trying to read this file 415 text offset too low in COFF file Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 416 bad character in extended TEKHEX line Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 417 seek error in Linker This is an internal compiler error Contact HI TECH Software technical support with details 418 image too big Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 419 object file is not absolute Objtohex The object file passed to OBJTOHEX has relocation items in it This may indicate it is the wrong object file or that the linker or OBJTOHEX have been given invalid options The object output files from the assembler are relocatable not absolute The object file output of the linker is absolute 420 too many relocation items Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 421 too many segments Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 422 no end record Linker This object file has no end record This probably means it is not an object file Contact HI TECH Support if the object file was generated by the compiler 423 illegal reco
254. ded as it has no effect Some variables are treated as being volatile even though they may not be qualified in the source code See Section 3 13 4 2 Undefined Symbols if you have assem bly code in your project 3 4 7 Special Type Qualifiers The HI TECH C Compiler for PIC10 12 16 MCUs supports special type qualifiers to allow the user to control placement of static and extern Class variables into partic ular address spaces 3 4 7 1 PERSISTENT TYPE QUALIFIER By default any C variables that are not explicitly initialized are cleared on startup This is consistent with the definition of the C language However there are occasions where it is desired for some data to be preserved across a reset DS51865B page 68 2010 Microchip Technology Inc C Language Features The persistent type qualifier is used to qualify variables that should not be cleared by the runtime startup code In addition any persistent variables will be stored in a different area of memory to other variables Different psects are used to hold these objects See 3 10 1 Compiler generated Psects for more information This type qualifier may not be used on variables of class auto however statically defined local variables may be qualified persistent For example you should write void test void statue persistent int antvars must be statie CU Sek If the PICC option STRICT is used this type qualifier is changed to per
255. def FLAG symbol defined do_loop tolir o SIZE skipa Loop endif ifndef Include source lines if preprocessor ifndef FLAG symbol not defined jump endif include _ Include text file into source include lt stdio h gt FiInNClLudEe pro 7ecEch Specify line number and filename for line 3 final listing Zon Where nn is a number short for 20 line nn pragma Compiler specific options Refer to Section 3 15 3 Pragma Directives Undefines preprocessor symbol undef FLAG Generate a warning message warning Length not set The type and conversion of numeric values in the preprocessor domain is the same as in the C domain Preprocessor values do not have a type but acquire one as soon as they are converted by the preprocessor Expressions may overflow their allocated type in the same way that C expressions may overflow Overflow may be avoided by using a constant suffix For example an L after the num ber indicates it should be interpreted as a long once converted So for example define MAX 1000 1000 and define MAX 1000 1000L will define the values 0x4240 and OxF4240 respectively 2010 Microchip Technology Inc DS51865B page 105 HI TECH C for PIC10 12 16 User s Guide 3 15 2 Predefined Macros The compiler drivers define certain symbols to the preprocessor allowing conditional compilation based on chip type etc The symbols listed in Table 3 11 show the more common symbols defined
256. default memory settings Consult you device data sheet to determine the page size of the device you are using and ensure that any contiguous memory range you specify using the ROM option has a boundary that corresponds to the device page boundaries ROM 100 1f ff The above may need to be paged If the page size is 800h the above could specified as ROM 100 7ff 800 fff 1000 17ff 1800 1fff 1395 notable code sequence candidate suitable for compiler validation suite detected Code Generator The compiler has in built checks that can determine if combinations of internal code templates have been encountered Where unique combinations are uncovered when compiling code this message is issued This message is not an error or warning and its presence does not indicate possible code failure but if you are willing to participate the code you are compiling can be sent to Support to assist with the compiler testing process 2010 Microchip Technology Inc DS51865B page 341 HI TECH C for PIC10 12 16 User s Guide 1396 positioned in the memory region 0x 0x reserved by the compiler Code Generator Some memory regions are reserved for use by the compiler These regions are not nor mally used to allocate variables defined in your code However by making variables absolute it is possible to place variables in these regions and avoid errors that would normally be issued by the linker Absolute variables can be place
257. default pointer or a pointer qualified near or a default pointer has been assigned to a pointer qualified near This may result in truncation of the pointer and loss of information depending on the memory model in use 355 implicit signed to unsigned conversion Parser A signed number is being assigned or otherwise converted to a larger unsigned type Under the ANSI C value preserving rules this will result in the signed value being first sign extended to a signed number the size of the target type then con verted to unsigned which involves no change in bit pattern Thus an unexpected sign extension can occur To ensure this does not happen first convert the signed value to an unsigned equivalent e g Signed char sc unsigned int ul ui sc de jt SC contains Oxi i Wii contain lee for example will perform a sign extension of the char variable to the longer type If you do not want this to take place use a cast e g ul unsigned char sc 356 implicit conversion of float to integer Parser A floating point value has been assigned or otherwise converted to an integral type This could result in truncation of the floating point value A typecast will make this warn ing go away double dd Int 20 i dd is this really what you meant If you do intend to use an expression like this then indicate that this is so by a cast i int dd 357 illegal conversion of integer to pointer Parser
258. defined The equivalent symbol used in assembly code to represent the function may change it the function is Static see 3 13 3 1 Equivalent Assembly Symbols This specifier does not change the way the function is encoded 3 8 2 Allocation of Function Code Code associated with functions is always placed in the program memory of the target device The program memory is paged c f banking used in the data memory space Program memory is sequential addresses are contiguous across a page boundary but the paging means that any call or jump from code in one page to a label in another must use a longer sequence of instructions to accomplish this See your device data sheet for more information on the program memory and instruction set The generated code associated with each function is initially placed in its own psect by the compiler These psects have names such as text n where n is a number e g text 98 However psects may be merged later in the compilation process so that more than one function may contribute to a psect Functions within the same psect can use a shorter form of call and jump to labels so it is advantageous to merge the code for as many functions into the same psect These text psects are linked somewhere in the program memory see 3 10 Psects If the size of a psect that holds the code associated with a function exceeds the size of a page it may be split by the assembler optimizer A split psect will have a name
259. dicated suboption to the RUNTIME option is malformed e g RUNTIME default speed 0y1234 Oops that should be 0x1234 DS51865B page 334 2010 Microchip Technology Inc 1310 specified speed Hz exceeds max operating frequency Hz defaulting to Hz Driver The frequency specified to the perform suboption to RUNTIME option is too large for the selected device RUNTIMF default speed 0xffffffff Oops that value is too large 1311 missing configuration setting for config word using default Driver The configuration settings for the indicated word have not be supplied in the source code and a default value will be used 1312 conflicting runtime perform sub option and configuration word settings assuming Hz Driver The configuration settings and the value specified with the perform suboption of the RUNTIME options conflict and a default frequency has been selected 1313 sub options ignored Driver The argument to a suboption is not required and will be ignored OUTPUT intel 8 Oops the 8 is not required 1314 illegal action in memory allocation Code Generator This is an internal error Contact HI TECH Support with details 1315 undefined or empty class used to link psect Linker The linker was asked to place a psect within the range of addresses specified by a class but the class was either never defined or contains no memory ranges 1316 attribute ignore
260. double f Description These functions are the implement hyperbolic equivalents of the trigonometric functions cos sin and tan Example include lt stdio h gt include lt math h gt void main void EE EE iin lt cosh Clas Primer En EREM EDERT tani ga Return Value The function cosh returns the hyperbolic cosine value The function sinh returns the hyperbolic sine value The function tanh returns the hyperbolic tangent value Synopsis include lt conio h gt vord Opus Conse char 5 ei Description The cputs function writes its argument string to the console outputting carriage returns before each newline in the string It calls put ch repeatedly On a hosted sys tem cputs differs from puts in that it writes to the console directly rather than using file I O In an embedded system cputs and puts are equivalent 2010 Microchip Technology Inc DS51865B page 187 HI TECH C for PIC10 12 16 User s Guide CTIME Example include lt conio h gt include lt string h gt Char buffer 80 void main void for cgets buffer LE Let emp Leem Eeer TT OI break Course T exe to Pinsky See Also COUES PUC Cr DULG G Synopsis include lt time h gt char ctime time ot t Description The ctime function converts the time in seconds pointed to by its argument to a string of the same form as described for
261. e cccceecseeeeeeeeeeeees 8 p code files tee 7 12 155 len le Te DEE 40 D Godelbrartes 141 155 DS51865B page 360 ODIWSCALING BEE 40 persistent Ou aller 69 94 95 phase de EE 128 LOG INT gl 37 38 pointer COMP ANISONS E 65 EIERE 60 DEE Eege eege E ee 63 LIENERS 60 EE e 61 EIER 60 pointer reference graph ccccceeseeeeeseeeeeeeees 62 138 POINTE S ea R E E 70 assigning dummy targets eeeeeeeeseeeeeeeees 64 assigning integers cccccseeeeeeceeeeeeeeeeeeeeeseeees 64 a EE 61 TUNG OMY ea a 63 DOW TUINGHON DEE 212 DOWGCIUD Re 92 95 powerup routine s eeseneeeeenneesrereesrereenee 16 94 95 ENEE EE 95 pragma directives E 107 DFEDIOCESSING enai ee cee es 104 assembler les 27 preprocessor Eeer 25 type ConversSIOnS sss sseeeseeesenenssrrresserrrrsrrnen 105 preprocessor directive EE 99 tendas EE 99 FNCU E 9 0 9 eee eee ree eee ree nee se ne ee 28 preprocessor directives cccccceeeeeeceesseeesseaeeess 104 in assembly Tee 27 120 preprocessor macros comaining Siring EE 24 de MNNG sessen e at ctesinia bat aectaals Geddes 24 lengt BEE 27 predefined ccccsseeeeeecceseeeeeeeeceeaeeeeeeesseaeaeees 106 NAEM eken a aia serie ene oe 28 printf FUNCTION ccceecceceeeeeeeeeeeeeeeeeeees 14 15 96 212 eigene ne WEE 108 preproces e EE 36 printf_check pragma directive ccceeeeeeeeeeeeees 108 PROCESSOR d
262. e 3 4 4 Pointer Types There are two basic pointer types supported by the HI TECH C Compiler for PIC10 12 16 MCUs data pointers and function pointers Data pointers hold the addresses of variables which can be indirectly read and possible indirectly written by the program Function pointers hold the address of an executable function which can be called indirectly via the pointer To conserve memory requirements and reduce execution time pointers on PIC devices are made different sizes and formats The HI TECH C Compiler for PIC10 12 16 MCUs uses sophisticated algorithms to track the assignment of addresses to all pointers and as a result no non standard qualifiers are required when defining pointer variables Despite this the size of each pointer is optimal for its intended usage in the program 3 4 4 1 COMBINING TYPE QUALIFIERS AND POINTERS It is helpful to first review the ANSI C standard conventions for definitions of pointer types Pointers can be qualified like any other C object but care must be taken when doing so as there are two quantities associated with pointers The first is the actual pointer itself which is treated like any ordinary C variable and has memory reserved for it The second is the target or targets that the pointer references or to which the pointer points The general form of a pointer definition looks like the following target_type amp _ qualifiers pointer s_qualifiers pointer s_name Any qua
263. e 0x Linker The linker was asked to relocate fixup an item that would not fit back into the space after relocation See the following error message 477 for more information 477 fixup overflow in expression location 0x 0x size value 0x Linker Fixup is the process conducted by the linker of replacing symbolic references to vari ables etc in an assembler instruction with an absolute value This takes place after positioning the psects program sections or blocks into the available memory on the target device Fixup overflow is when the value determined for a symbol is too large to fit within the allocated space within the assembler instruction For example if an assembler instruction has an 8 bit field to hold an address and the linker determines that the symbol that has been used to represent this address has the value 0x110 then clearly this value cannot be inserted into the instruction The causes for this can be many but hand written assembler code is always the first suspect Badly written C code can also generate assembler that ultimately generates fixup overflow errors Consider the following error message main obj 8 Fixup overflow in expression loc Ox1lFD Ox1FC t1 size 1 value Ox7FC This indicates that the file causing the problem was main obj This would be typically be the output of compiling main c or main as This tells you the file in which you should be looking The next number 8 in this ex
264. e Also round Synopsis include lt stdlib h gt int udiv unsigned num unsigned demon Description The udiv function calculate the quotient and remainder of the division of number and denon storing the results into a udiv_t structure which is returned Example rinclude lt stdlib h gt void main void udiv_t result unsigned num 1234 den result udiv num den See Also kee Eeer e eist Return Value Returns the quotient and remainder as a udiv_t structure Synopsis include lt stdlib h gt int uldiv unsigned long num Description unsigned long demon The uldiv function calculate the quotient and remainder of the division of number and denom storing the results into a uldiv_t structure which is returned DS51865B page 236 2010 Microchip Technology Inc Library Functions Example include lt stdlib h gt void main void d uldiv_t result unsigned long num 1234 den 7 result uldiv num den See Also Ikebe a J udi v J OLV Return Value Returns the quotient and remainder as a uldiv_t structure UTOA Synopsis include lt stdlib h gt char utoa char buf unsigned vaL int base Description The function itoa converts the unsigned contents of val into a string which is stored into buf The conversion is performed according to the radix specified in base buf is assumed to reference a buffer which has suffici
265. e C level optimizations these can be considered as those that e Simplify or change the C expressions and e Allocate variables to registers An example of where the code expression may be simplified is this Consider if the orig inal C code read a gt Ae Gy but the compiler is able to determine that the variable c at this point will always hold the value 5 The code expression is essentially changed so that it reads a b 5 This may result in more efficient code after it is built by the compiler These sorts of opti mizations are inherent in the compilation process and cannot be disabled They may reduce both code and data size Allocation of variables to registers is performed after analyzing the assembly code that is initially generated from the C code Registers can typically be accessed with less code compared to reading from memory 2010 Microchip Technology Inc DS51865B page 103 HI TECH C for PIC10 12 16 User s Guide Those registers which are unused for each C statement are noted Variables are allo cated an available register while it is unused The cost associated with moving the vari able from memory to a register is considered before the move takes place The code is then recompiled but this time with the variables residing in their allocated registers The process repeats until no more registers are available A variable may move from one register to another within a function it may soend some of i
266. e address range to search e Align is optional It specifies that a code sequence can only match if it begins on an address which is a multiple of this value w If present will cause HEXMATE to issue a warning whenever the code sequence is detected e Title Is optional It allows a title to be given to this code sequence Defining a title will make log reports and messages more descriptive and more readable A title will not affect the actual search results Here are some examples The option FIND 3412 0 7FFF 2w will detect the code sequence 1234h when aligned on a 2 two byte address boundary between 0h and 7FFFh w indicates that a warning will be issued each time this sequence is found In this next example FIND 3412M0F00 0 7FFF 2wt ADDxyY the option is the same as in last example but the code sequence being matched is masked with 000Fh SO HEXMATE will search for any of the opcodes 123xh where x is any digit If a byte mask is used is must be of equal byte width to the opcode it is applied to Any messaging or reports generated by HEXMATE will refer to this opcode by the name ADDXY as this was the title defined for this search lf HEXMATE is generating a log file it will contain the results of all searches F IND accepts whole bytes of HEX data from 1 to 8 bytes in length Optionally F IND can be used in conjunction with REPLACE or DELETE as described below 6 6 1 8 FIND DELETE If the DELETE form of the FIND o
267. e end of an array Comparisons of pointers to integer constants are even more risky for example if cpl 0x246 take appropriate action In some cases pointers hold an address offset and if the pointer can reference objects in more than one memory space additional bits in the address will be used to distin guish which memory space is being accessed Thus a pointer which points to an object stored at address 0x246 in data memory may contain a different value to a pointer that points to a target located at address 0x246 in program memory Never compare point ers and integer constanis A NULL pointer is the one instance where a constant value can be assigned to a pointer and this is handled correctly by the compiler A NULL pointer is numerically equal to 0 zero but this is a special case imposed by the ANSI C standard Comparisons with the macro NULL are also allowed If NULL is the only value assigned to a pointer the pointer will be made as small as possible 3 4 5 Constant Types and Formats A constant is used to represent a numerical value in the source code for example 123 is a constant Like any value a constant must have a C type In addition to a constant s type the actual value can be specified in one of several formats The format of integral constants specifies their radix HI TECH C supports the ANSI standard radix specifiers as well as ones which enables binary constants to be specified in C code The formats used
268. e format for PICC program space If an accompanying F ILL option has not been specified unused locations within the specified address range will be filled with FFFh for Baseline devices or 3FFFh for Mid Range devices This is to remove any unknown values from the equation and ensure the accuracy of the check sum result For example checksum 800 fff 20 width 1 algorithm 8 will calculate a 1 byte checksum from address 0x800 to Oxfff and store this at address 0x20 Fletcher s algorithm will be used See Section 6 6 1 5 CK The checksum calculations are performed by the HEXMATE application The informa tion in this driver option is passed to the HEXMATE application when it is executed 2 7 20 CHIP Define Processor This option must be used to specify the target processor or device for the compilation This is the only compiler option that is mandatory when compiling code To see a list of supported processors that can be used with this option use the CHIPINFO option described in Section 2 7 21 CHIPINFO Display List of Sup ported Processors 2 7 21 CHIPINFO Display List of Supported Processors The CHIPINFO option displays a list of devices the compiler supports The names listed are those chips defined in the chipinfo file and which may be used with the CHIP option Compilation will terminate after this list has been printed 2 7 22 CODEOFFSET Offset Program Code to Address In some circ
269. e indicated file The psect usage map file is generated by the driver when the driver option summary file Is used Ensure that the file is not open in another application 892 can t open memory usage map file Driver The driver was unable to open the indicated file The memory usage map file is gener ated by the driver when the driver option summary file is used Ensure that the file is not open in another application 893 can t open HEX usage map file Driver The driver was unable to open the indicated file The HEX usage map file is generated by the driver when the driver option summary file Is used Ensure that the file is not open in another application 894 unknown source file type Driver The extension of the indicated input file could not be determined Only files with the extensions as c obj usb p1 lib or HEX are identified by the driver DS51865B page 314 2010 Microchip Technology Inc 895 can t request and specify options in the one command Driver The usage of the driver options getoption and setoption is mutually exclu sive 896 no memory ranges specified for data space Driver No on chip or external memory ranges have been specified for the data soace memory for the device specified 897 no memory ranges specified for program space Driver No on chip or external memory ranges have been specified for the program space memory for the device spe
270. e keyword while is expected at the end of a do statement e g do func i IA Oo Lhe DLOock while what Condition Ts true 7 ITIL gt 5 error flagged here end 320 expected Parser A colon is missing after a case label or after the keyword default This often occurs when a semicolon is accidentally typed instead of a colon e g switch input 4 case 0 oops that should have been case 0 state NEW DS51865B page 266 2010 Microchip Technology Inc 321 label identifier expected Parser An identifier denoting a label must appear after goto e g if a goto 20 Ens 2S not BASIC valid C label must follow lt a goto 322 enum tag or expected Parser After the keyword enum must come either an identifier that is or will be defined as an enum tag or an opening brace e g enum 1 2 should be e g enum one 1 two 323 struct union tag or expected Parser An identifier denoting a structure or union or an opening brace must follow a struct or union keyword e g struct int a this is not how you define a structure You might mean something like struct 4 int a my_struct 324 too many arguments for printf style format string Parser There are too many arguments for this format string This is harmless but may repre sent an incorrect format string e g oops missed a placeholder Printi sd sde Low
271. e object file list there may be a label COMMON This shows the contri bution to the program from program wide psects in particular that used by the compiled stack 5 4 2 3 PSECT INFORMATION LISTED BY CLASS The next section in the map file shows the same psect information but grouped by the psects class This section is heralded by the line that contains the headings TOTAL Name Link Load Length Under this are the class names followed by those psects which belong to this class see Section 4 3 9 3 3 Class These psects are the same as those listed by module in the above section there is no new information contained in this section just a different presentation 9 4 2 4 SEGMENT LISTING The class listing in the map file is followed by a listing of segments A segment is con ceptual grouping of contiguous psects in the same memory space and are used by the linker as an aid in psect placement There is no segment assembler directive and segments cannot be controlled in any way This section is heralded by the line that contains the headings SEGMENTS Name Load Length Top Selector Space Class The name of a segment is derived from the psect in the contiguous group with the low est link address This can lead to confusion with the psect with the same name Do not read psect information from this section of the map file Typically this section of the map file can be ignored by the user 5 4 2 5 UNUSED ADDRESS RANGES The l
272. e options used to gen erate the intermediate files Make utilities typically call the compiler multiple times once for each source file to generate an intermediate file and once to perform the second stage compilation You may also wish to generate intermediate files to construct your own library files although PICC Is capable of constructing libraries in a single step so this is typically not necessary See Section 2 7 44 OUTPUT type Specify Output File Type for more information on library creation The option PASS1 Section 2 7 45 PASS1 Compile to P code is used to tell the compiler that compilation should stop after the parser has executed This will leave the p code intermediate file behind on successful completion For example the files main c and io c are to be compiled using a make utility The command lines that the make utility should use to compile these files might be some thing like PICC 6Chip LOFO TIA passl marng FICC ehip 16Fo TA Eeer 10 0 PICC Chip L6Fre7 7A mainspL Heer If is important to note that the code generator needs to compile all p code or p code library files associated with the project in the one step When using the PASS1 option the code generator is not being invoked so the above command lines do not violate this requirement 2010 Microchip Technology Inc DS51865B page 13 HI TECH C for PIC10 12 16 User s Guide Using object files as the interm
273. e proc file for the selected device could not be opened 1371 float type can t be bigger then double type double has been changed to bits Driver Use of the float and double options has result in the size of the double type being smaller than that of the float type This is not permitted by the C Standard The double type size has been increased to be that indicated 1375 multiple interrupt functions and defined for device with only one interrupt vector Code Generator The named functions have both been qualified interrupt but the target device only sup ports one interrupt vector and hence one interrupt function LOCErru upt vold Isi lovord 4 TD ari interrupt void isr_hi woid oops cannot define two ISRs EE ies 1376 initial value too large for bitfield width Code Generator A structure with bit fields has been defined an initialized with values The value indi cated it too large to fit in the corresponding bit filed width struct unsigned flag 1 unsigned mode 3 foobar 1 100 f oops LOU as too Large for a 3 bit ob ject DS51865B page 340 2010 Microchip Technology Inc 1377 no suitable strategy for this switch Code Generator The compiler was unable to determine the switch strategy to use to encode a C switch statement based on the code and your selection using the pragma switch directive You may need to choose a different strategy 1387 inline delay
274. e will begin with a header and title if specified The F option allows a page length to be specified A zero value of Jength implies pageless output The length is specified in a number of lines 4 2 6 H Print Hexadecimal Constant This option specifies that output constants should be shown as hexadecimal values rather than decimal values This option affects both the assembly list file as well as assembly output when requested 4 2 7 l List Macro Expansions This option forces listing of macro expansions and unassembled conditionals which would otherwise be suppressed by a NOLIST assembler control see Section 4 3 10 Assembler Controls The L option is still necessary to produce an actual listing output 4 2 8 L Generate an Assembly Listing This option requests the generation of an assembly listing file If 1i st file is specified then the listing will be written to that file otherwise it will be written to the standard output This option is applied if compiling using PICC the command line driver and the ASMLIST driver option see Section 2 7 17 ASMLIST Generate Assembler List Files 4 2 9 O Optimize assembly This requests the assembler to perform optimization on the assembly code Note that the use of this option slows the assembly process down as the assembler must make an additional pass over the input code Debug information for assembler code generated from C source code may become unrelia
275. each target the pointer can reference through the program The size and type of each target is indicated as well as the size and type of the pointer variable itself For example the following shows a pointer called task_tmr in the C code and which is local to the function timer_intr Itis a pointer to an unsigned int and itis one byte wide There is only one target to this pointer and it is the member timer_count in the structure called task This target variable resides in the BANKO class and is two bytes wide timer_intr task_tmr PTR unsigned int size l Largest target is 2 gt task timer_count BANKO 2 The pointer reference graph shows both pointers to data objects and pointers to func tions DS51865B page 138 2010 Microchip Technology Inc Macro Assembler 4 4 3 Call Graph The other important information block in the assembly list file is the call graph look for Call graph in the list file This is produced for target devices that use a compiled stack to facilitate local variables such as function parameters and auto variables See Section 3 5 4 Absolute Variables for more detailed information on compiled stack operation The call graph in the list file shows the information collated and interpreted by the code generator which is primarily used to allow overlapping of functions APBs The following information can be obtained from studying the call graph e The functions in the program that are root
276. ead only ROM based objects and not necessarily those areas of memory which contain physical ROM When producing code that may be downloaded into a system via a bootloader the destination memory may be some sort of volatile RAM The out put that will be placed in the ranges specified by this option are typically executable code and any data variables that are qualified as const For example to specify an additional range of memory to that on chip use ROM default 100 2ff This will add the range from 100h to 2ffh to the on chip memory To only use an external range and ignore any on chip memory use ROM 100 2ff This option may also be used to reserve memory ranges already defined as on chip memory in the chip configuration file To do this supply a range prefixed with a minus character for example ROM detault L00 1T FE will use all the defined on chip memory but not use the addresses in the range from 100h to 1ffh for allocation of ROM objects DS51865B page 38 2010 Microchip Technology Inc PICC Command line Driver This option will adjust the memory ranges used by linker classes see Section 5 2 1 Aclass low high and hence any object which is in a psect placed in this class Any objects which are contained in a psect that are explicitly placed at a memory address by the linker see Section 5 2 18 Pspec i e are not placed into a memory class are not affected by the optio
277. ec tive is Currently 16 526 psect not specified in P option first appears in Linker This psect was not specified in a P or A option to the linker It has been linked at the end of the program which is probably not where you wanted it 528 no start record entry point defaults to zero Linker None of the object files passed to the linker contained a start record The start address of the program has been set to zero This may be harmless but it is recommended that you define a start address in your startup module by using the END directive 529 usage objtohex Ssymfile object file HEX file Objtohex Improper usage of the command line tool ob jtohex If you are invoking ob jtohex directly then please refer to Section 6 3 Objtohex for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical support with details DS51865B page 290 2010 Microchip Technology Inc IERT 593 can t find 0x words 0x withtotal for psect in segment Linker See message 491 594 undefined symbol Linker The symbol following is undefined at link time This could be due to spelling error or failure to link an appropriate module 595 undefined symbols Linker A list of symbols follows that were undefined at link time These errors could be due to spelling error or failure to link an appropriate module IERT 596 segment
278. ecceecceeececeeeeeeeeeeeeeeaeseeeeeanees 238 Ve EECHENHOLZ 238 variables absolue s eege 78 accessing from assembler ccceeeeee 100 GU e 73 IEN EE 130 If e E 80 IER 6 EE 94 placing at specific addresses 0n000000nnnn 108 SIZO Ee Ee e 54 58 SE ee 72 storage duration ees 71 unique length of EE 27 v rpose te IER 28 version Ui e 41 volatile qualifier 00 cece cececceceeeeeeeeeeeeeeees 68 103 121 eil ug TUNCHON EE 212 VS ONNE TUNMCT ON eege gea ee 220 VSSCANT UNCION EE 222 W Warning level EE 21 Se MNO WEE 147 warning messages sseeeceecseseeeeeeeeeeeeees 18 19 241 GISAONMG S23 ste ssrane ite stad natn inateae ae aaeaees 34 111 tormab EE 42 level displayed AA 41 SUDDOFES SING EE 147 threshold NEE 41 WINGOWS VOGISUY eebe eege 8 Wit GIE E Le EE 129 Ge el CC 129 word alignment SE 129 word le lee 129 X XREF CONTO EE 137 159 XONG ON eeen n 239 XXX TOX EE Geer 84 93 XXXX yyyy type symbols ceeeeeeeeeeeeeeeseeeeeees 101 2010 Microchip Technology Inc DS51865B page 363 MICROCHIP Worldwide Sales and Service AMERICAS Corporate Office 2355 West Chandler Blvd Chandler AZ 85224 6199 Tel 480 792 7200 Fax 480 792 7277 Technical Support http support microchip com Web Address www microchip com Atlanta Duluth GA Tel 678 957 9614 Fax 678 957 1455 Boston Westborough MA Tel 774 760 0087 Fax 774 760 0088 Chicago Itasca
279. echnology Inc C Language Features It is not appropriate to use the __ ITDLOC7 macro on a device that does not permit seven bit programming of ID locations 3 3 7 Bit Instructions Wherever possible the HI TECH C compiler will attempt to use the PIC10 12 16 bit instructions For example when using a bitwise operator and a mask to alter a bit within an integral type the compiler will check the mask value to determine if a bit instruction can achieve the same functionality unsigned int foo foo 0x40 will produce the instruction BSF _foo 6 To set or clear individual bits within integral type the following macros could be used define bitset var bitno var 1UL lt lt bitno define bitclr var bitno var amp 1UL lt lt bitno To perform the same operation as above the bitset macro could be employed as follows bitset foo 6 3 3 8 EEPROM Access For most devices that come with on chip EEPROM the compiler offers several meth ods of accessing this memory The EEPROM access methods are described in the fol lowing sections 3 3 8 1 THE EEPROM_DATA MACRO For those PIC10 12 16 devices that support external programming of their EEPROM data area the _ EFEPROM_DATA macro can be used to place the initial EEPROM data values into the HEX file ready for programming The macro is used as follows inclu ude bere PEPROM DATA 0 1 2 3 4 5 6 7 The macro accepts eight param
280. ecord types hold general information about the target device and its configuration other records types may hold data and others program debugging information for example A lot of the information in object files relates to psects Psects are an assembly domain construct and are essentially a block of something either instructions or data Every thing that contributes to the program is located in a psect See Section 4 3 8 Program Sections There is a particular record type that is used to hold the data in psects The bulk of each object file consists of psect records containing the executable code and variables etc We are now in a position to look at the fundamental tasks the linker performs which are e combining all the relocatable object files into one e relocation of psects contained in the object files into memory e fixup of symbolic references in the psects DS51865B page 148 2010 Microchip Technology Inc Linker There is typically at least two object files that are passed to the linker One will be pro duced from all the C code in the project including C library code There is only one of these files since the code generator compiles and combines all the C code of the pro gram and produces just the one assembly output The other file passed to the linker will be the object code produced from the runtime startup code see Section 2 4 2 Runtime Startup Code lf there are assembly source files in the proj
281. ect then there will also be one object file produced for each source file and these will be passed to the linker Existing object files or object file libraries can also be specified in a project and if present these will also be passed to the linker The output of the linker is also an object file but there is only ever one file produced The file is absolute since relocation will have been performed by the linker The output file will consist of the information from all input object files merged together Relocation consists of placing the psect data into the memory of the target device The target device memory specification is passed to the linker by the way of linker options These options are generated by the command line driver PICC There are no linker scripts or means of specifying options in any source file The default linker options rarely need adjusting but can be changed if required and with caution using the driver option L see Section 2 7 7 L Adjust Linker Options Directly Once psects are placed at actual memory locations symbolic references made in the psects data can be replaced with absolute values This is a process called fixup For each psect record in the object file there is a corresponding relocation record that indicates which bytes or bits in the psect record need to be adjusted once relocation is complete The relocation records also specify how the values are to be determined A linker fixup ov
282. ect le 143 symbols assembler generated ccccssssceeceeeseeeeeeees 122 WAKER COSTING EE E 113 LING tee ME 147 T E Tab leede 233 tanh AU CUOM ere 187 target device ws ssscccncecscisatec tice iansncedees saieesnccebadavedectouscs 30 temporary variables 1 0 eeeeceeeeeeeeeeeeeeeeeeeeeeeeeeeaees 73 LE XUN DSCC EE 83 92 98 109 ume Eiere EE 234 TUT OUI EE 41 THIS e de EE 137 POASGCITUNICUIO siete ae eee Meteo 235 TOIOWET TUG e EE 235 TOUDDEF TUNCUON E 235 tracked OD CIS E 86 e a Elei a Re acdc eee etic eee ashlee 9 36 iS TAS OUICTION nesese aa aaa 53 tune d i eidele EE 235 type Conversi n EE 80 aler Die EE 32 56 le Ce 33 56 Le VE 54 OAT AGUDI E 56 SOM MM i aie ee 54 SUL EE 58 UNO a E nace ted 58 ype sizene n N 54 58 U KEE SOM eege a a eudieti 66 unbanked Memory 00 eccccceeeseeeeeeceeeeseeeessesaeeeeeess 70 undefined symbols cccccccesseeeeeeeceeeseeeeeeaeaeees 103 elei e EE 147 undefining MACKOS satehe 22 ced dacs connteoeedeeeecs Melacnaoandedanes 28 WING CTC TUNCION isicivn eee owiehe eee 236 uninitilized variables cee cccceeeeececeeeeeeeeaeeeeeeeeaeeees 94 union data e 58 unions anony MOUS E 60 el WEE 59 Universal toolsuite poiugm 13 42 unnamed EE 125 unnamed structure membere 59 unused memory Uli Le E 30 168 unused variables nnnnnnnenaannenannnnneesennneennennnee 103 Reie le EE 68 utoa MUNGO EE 237 V va ANG TUMCHON E 238 va end fupnchon ccc cc
283. ect signature value for a routine is to write a C routine with the same prototype as the assembly routine and check the signature value determined by the code generator This will be shown in the assembly list file see Section 2 7 17 ASMLIST Generate Assembler List Files and Section 4 4 Assembly List Files 4 3 10 Assembler Controls Assembler controls may be included in the assembler source to control assembler operation These keywords have no significance anywhere else in the program The control is invoked by the directive oP T followed by the control name Some keywords are followed by one or more arguments For example OPT EXPAND A list of keywords is given in Table 4 7 and each is described further below TABLE 4 7 ASPIC ASSEMBLER CONTROLS con roo aoe nee conditional code in the list con INCLUDE Textually include another source INCLUDE lt pathname gt file Define options for listing output LIST lt listopt gt lt listopt gt NOCOND Leave conditional code out of the NOCOND listing NOEXPAND Disable macro expansion NOEXPAND NOLIST Disable listing output NOLIST NOXREF Disable generation of cross NOXREF reference file PAGE Start a new page in the listing PAGE output space Add blank lines to listing Specify the subtitle of the program SUBTITLE lt subtitle gt XREF Enable cross reference file XREF generation Note 1 The default options are listed with an asterisk
284. ectory include found in the compiler install location For files specified in quotes the search the current working directory first then directories specified by I options then in the standard compiler directory If the first character of the filename is a then it is assumed that a full or relative path to the file is specified On Windows compilers a path is also specified by either ora DOS drive letter followed by a colon e g C appearing first in the filename A 13 4 The support of quoted names for includable source files 6 8 2 Quoted names are supported 2010 Microchip Technology Inc DS51865B page 347 HI TECH C for PIC10 12 16 User s Guide A 13 5 The mapping of source file character sequences 6 8 2 source file characters are mapped to their corresponding ASCII values A 13 6 The behavior on each recognized pragma directive 6 8 6 See Section 3 15 3 Pragma Directives A 13 7 The definitions for DATE and TIME __ when respectively the date and time of translation are not available 6 8 8 These macros are always available from the environment A 14 LIBRARY FUNCTIONS G 3 14 A 14 1 The null constant to which the macro NULL expands 7 1 6 The macro NULL expands to 0 A 14 2 The diagnostic printed by and the termination behavior of the assert function 7 2 The function prints to stderr Assertion failed s line d s n where the placeholders are replaced with the filen
285. ects lists each compiler generated psect DS51865B page 286 2010 Microchip Technology Inc and what it contains Typically psect names which are or include text relate to pro gram code Names such as bss or data refer to variable blocks This error can be due to two reasons First the size of the program or the program s data has exceeded the total amount of Space on the selected device In other words some part of your device s memory has completely filled If this is the case then the size of the specified psect must be reduced The second cause of this message is when the total amount of memory needed by the psect being positioned is sufficient but that this memory is fragmented in such a way that the largest contiguous block is too small to accommodate the psect The linker is unable to split psects in this situation That is the linker cannot place part of a psect at one location and part somewhere else Thus the linker must be able to find a contigu ous block of memory large enough for every psect If this is the cause of the error then the psect must be split into smaller psects if possible To find out what memory is still available generate and look in the map file see Section 2 7 8 M Generate Map File for information on how to generate a map file Search for the string UNUSED ADDRESS RANGES Under this heading look for the name of the segment specified in the error message If the name is not present th
286. ed if strcmp scp hello world Q fred the characters in the string world and the last 6 characters of the string hello world the last character is the nul terminator character would be represented by the same RETLW instructions stored at the same memory locations The string hello would not overlap with the same characters in the string hello world as they differ in terms of the placement of the nul character Two adjacent string constants i e two strings separated only by white space are con catenated by the compiler Thus const char cp hello world will assign the pointer with the address of the string hello world 3 4 6 Standard Type Qualifiers Type qualifiers provide additional information regarding how an object may be used The HI TECH C compiler supports both ANSI C qualifiers and additional special qual ifiers which are useful for embedded applications and which take advantage of the PIC MCU architecture 3 4 6 1 CONST TYPE QUALIFIER The HI TECH C compiler supports the use of the ANSI type qualifiers const and vol atile The const type qualifier is used to tell the compiler that an object is read only and will not be modified If any attempt is made to modify an object declared const the com piler will issue a warning or error User defined objects declared const are placed in a special psect linked into the pro gram space Objects qualified const may be absolute The address cons
287. ed In order to match the cor rect signature the source code for widget needs to contain an assembler SIGNAT directive which defines the same signature value To determine the correct value you would write the following code char widget int argl int arg2 The resultant assembler code seen in the assembly list file includes the following line SIGNAT _widget 8249 The SIGNAT directive tells the assembler to include a record in the obj file which associates the value 8249 with symbol _widget The value 8249 is the correct signa ture for a function with two int arguments and a char return value lf this directive is copied into the assembly source file which contains the _widget code it will associate the correct signature with the function and the linker will be able to check for correct argument passing If a C source file contains the declaration extern char widget long then a different signature will be generated and the linker will report a signature mis match which will alert you to the possible existence of incompatible calling conventions 3 16 3 Linker Defined Symbols The linker defines some special symbols that can be used to determine where some psects where linked in memory These symbols can be used in code if required 2010 Microchip Technology Inc DS51865B page 113 HI TECH C for PIC10 12 16 User s Guide The link address of a psect can be obtained from the value of a global symbol with
288. ed by a percent sign that argument will be evaluated as an expression and passed as a decimal number rather than as a string This is useful if evaluation of the argument inside the macro body would yield a different result The nul operator may be used within a macro to test a macro argument for example IF nul arg3 argument was not supplied ELSE argument was supplied ENDIF See Section 4 3 9 13 LOCAL for use of unique local labels within macros By default the assembly list file will show macro in an unexpanded format i e as the macro was invoked Expansion of the macro in the listing file can be shown by using the EXPAND assembler control see Section 4 3 10 2 EXPAND 4 3 9 13 LOCAL The LOCAL directive allows unique labels to be defined for each expansion of a given macro Any symbols listed after the LOCAL directive will have a unique assembler generated symbol substituted for them when the macro is expanded For example down MACRO count DS51865B page 132 2010 Microchip Technology Inc Macro Assembler LOCAL more more DECFSZ count GOTO more ENDM when expanded will include a unique assembler generated label in place of more For example down foobar expands to 2 0001 DECFSZ foobar GOTO 220001 If invoked a second time the label more would expand to 0002 and multiply defined symbol errors will be averted 4 3 9 14 ALIGN The ALIGN directive aligns whatever is following data
289. ed start As with all user defined assembly code it must take into consideration program memory paging and or data memory banking as well as any applicable errata issues for the device you are using The program s entry point is already defined by the runtime startup code so this should not be specified in the power up routine with the END directive if used See Section 4 3 9 2 END for more information on this assembler directive 2010 Microchip Technology Inc DS51865B page 95 HI TECH C for PIC10 12 16 User s Guide 3 12 LIBRARY ROUTINES 3 12 0 1 USING LIBRARY ROUTINES Library functions or routines and any associated variables will be automatically linked into a program once they have been referenced in your source code The use of a func tion from one library file will not include any other functions from that library Only used library functions will be linked into the program output and consume memory Your program will require declarations for any functions or symbols used from libraries These are contained in the standard C header h files Header files are not library files and the two files types should not be confused Library files contain precompiled code typically functions and variable definitions the header files provide declarations as opposed to definitions for functions variables and types in the library files as well as other preprocessor macros include lt math h gt jf declare Eet Lon pro
290. ed symbol into the linker s symbol table as an undefined symbol This is useful for linking entirely from libraries or for linking a module from a library where the ordering has been arranged so that by default a later module will be linked 5 2 23 Vavmap To produce an Avocet format symbol file the linker needs to be given a map file to allow it to map psect names to Avocet memory identifiers The avmap file will normally be supplied with the compiler or created automatically by the compiler driver as required 5 2 24 Wnum The w option can be used to set the warning level in the range 9 to 9 or the width of the map file for values of num gt 10 W9 will suppress all warning messages w0 is the default Setting the warning level to 9 w 9 will give the most comprehensive warning messages 5 2 25 X Local symbols can be suppressed from a symbol file with this option Global symbols will always appear in the symbol file 5 2 26 Z Some local symbols are compiler generated and not of interest in debugging This option will suppress from the symbol file all local symbols that have the form of a single alphabetic character followed by a digit string The set of letters that can start a trivial symbol is currently k1 LSu The z option will strip any local symbols starting with one of these letters and followed by a digit string 5 2 27 DiSL message numbers Disable Messages This option is mainly used by the
291. ed to be reverted if it was ported to a compiler which did support reentrancy The compiler generated duplicate will have unique identifiers for the assembly symbols used within it The identifiers consists of the same name used in the original output pre fixed with i1 The output of the function called from main line code will not use any prefixes and the assembly names will be those normally used To illustrate in a program the function main calls a function called input This function is also called by an interrupt function Examination of the assembly list file will show assembly code for both the original and duplicate function outputs The output corresponding to the C function input will use the assembly label _input The corresponding label used by the duplicate func tion will be i1_ input Ifthe original function makes reference to a temporary variable the generated output will use the symbol zz input compared to i1_input forthe duplicate output Even local labels within the function output will be duplicated in the same way The call graph in the assembly list file will show the calls made to both of these functions as if they were independently written These symbols will also be seen in the map file symbol table 2010 Microchip Technology Inc DS51865B page 89 HI TECH C for PIC10 12 16 User s Guide 3 10 PSECTS This feature allows the programmer to use the same source code with compilers that use either re
292. edf C Program Files HI TECH Software PICC PRO 9 65pll dat en_msgs txt cs ht test sym z Q16F946 ol obj Mtest map EL ACODE 00h O7FFhx4 X ACONST 00h OFFhx32 AENTRY 00h 0FFhx32 ASTRING 00h OFFhx32 ARAM 020h 06Fh OAOh OEFh 0120h 016Fh 01A0h O1EFh AABS1 020h O0O7Fh 0OAOh OEFh 0120h 016Fh 01A0h O1EFh ABANKO 020h O7Fh ABANK1 0A0h OEFh ABANK2 0120h 016Fh ABANK3 01A0h O1EFh ACOMMON 070h O7Fh preset vec 00h intentry intcode int ret init init rend init pstrings CODE ppowerup CODE ptemp COMMON pcommon COMMON prbss_0 BANKO rbit_0O BANKO rdata_O BANKO idata_O CODE pnvram BANKO prbss_1 BANK1 rbit_1 BANK1 rdata_1 BANK1 idata_1 CODE pnvram_1 BANK1 nvbit_1 BANK1 ACONFIG 02007h 02007h pconfig CONFIG DCONFIG 2 AIDLOC 02000h 02003h pidloc IDLOC DIDLOC 2 AEEDATA 00h OFFh 02100h peeprom_data EEDATA DEEDATA 2 pfloat_text0 CODE float_text1 CODE float_text2 CODE pfloat_text3 CODE float_text4 CODE DCODE 2 startup obj test obj Object code version is 3 10 Machine type is 16F946 The Linker command line shows all the command line options and files that were passed to the linker for the last build Remember these are linker options and not command line driver options DS51865B page 150 2010 Microchip Technology Inc Linker The linker options are necessarily complex Fortunately they rarely need adjusting from their default settings T
293. ediate file format with HI TECH C Compiler for PIC10 12 16 MCUs will defeat many features the compiler uses to optimize code Always use p code files as the intermediate file format if you are using a make system to build projects 2 3 4 Compilation of Assembly Source Since the code generator performs many tasks that were traditionally performed by the linker there could be complications when assembly source is present in a project Assembly files are traditionally processed after C code but it is necessary to have this performed first so that specific information contained in the assembly code can be con veyed to the code generator The specific information passed to the code generator is discussed in more detail in Section 3 13 4 Interaction between Assembly and C Code When assembly source is present the order of compilation is as shown in Figure 2 4 FIGURE 2 4 COMPILATION SEQUENCE WITH ASSEMBLY FILES code assemble generation Any assembly source files are first assembled to form object files These files along with any other objects files that are part of the project are then scanned by the com mand line driver and information is then passed to the code generator when it subsequently builds the C files as has been described earlier 2 3 4 1 INTERMEDIATE FILES AND ASSEMBLY SOURCE The intermediate file format associated with assembly source files is the same as that used in traditional compilers i e an
294. eeeeeeeeeeees 102 Special characters ccccsesseecceseeeceeeeeeeeeeeees 121 Special comment eirmnges 121 STEEN 120 SIE 122 DS51865B page 352 2010 Microchip Technology Inc volatile objects eteiegeeeederg eege EE 121 Caspic h header ie 101 assembly identifiers Cell MMC VON sasa a 184 dala lV DUNG EE 122 COCIS TUNCUON eege 185 assembly list files cccseseeeeeeeeeees 17 29 117 137 char data Be 55 DlANK MNCS ninn ate ms Renee eceeeatagees 137 character constants cx aise cee asad cs 66 Gala EE 137 ASSEMDIV together Z tteg Sr 122 disabling macro expansion ssseeeserrererrenn 136 ONE E une e EE 91 excluding conditional code 136 CHECK SWIMS E 29 167 expanding Macros ccccceeeeeceeeeeeeeeeeees 117 136 leet die S coscire euzssete sy 30 167 OA ea een 117 118 136 endian EE 30 167 hexadecimal constants ccccceeseeeeeeeeeeees 117 SPECIICAUOINS echter ge 159 including conditional code 136 CNIDINTO WE 37 38 117 NOW DIE ege 137 EIDA 91 SUBE raa 137 class PSEC T TlaG E 128 E EAE ee 137 EE 143 assembly svmbols 100 address ranges nnnnnnenesennneensnnnnnnnneennennee 142 assert Tupchon 179 boundary argument 147 atan TUNC Le 180 Hat 38 39 128 atanz NONON ar enes aR ENE EAN 181 upper address Im 146 le Weer a E 181 clearing variables se pisses x scee de ee gekteeeEA Aere eege 94 ALOl SUNCOM BEE 182 CLAW DT MaC Ozen a aa A 185 Atol ING TON ch coco a esta
295. eeseueesseeeeseneeess 119 EENEG 137 2010 Microchip Technology Inc DS51865B page 3 HI TECH C for PIC10 12 16 User s Guide Chapter 5 Linker SCENE 1 9 Ieee ee aoe leet nave eee rt Ss ETS aoe Pence en 141 EES EEN 141 S3 MCIOC ATION AIG I SC CUS EE 148 Se a FIOS rese Yea pe atan ret aaenes ee e neces 149 Chapter 6 Utilities SES Te tee te de EE 155 OZ AID ANAN siutAbiieay ue iestecunstoceb unde aeeetantnan a a deeds se aecanee ee ees tee 155 BS ODON cini Meadoconstunatiaanianed eeemanaeicns 158 SE E 159 eS OMWEI erre 162 EE seoor Ea a leet ee ch a adele et cule acuta 165 Chapter 7 Library Functions Chapter 8 Error and Warning Messages scccessseeceenneeeseeseeeeeeneeesonseeseoneees 241 Appendix A Implementation Defined Behavior Pick MANSION Goal EE 343 A2 neien En LE E EE 343 AS identies E EE 343 Aa ee EE WEE 344 le et EH 344 AG Floaung Olli LE 345 Ail Abhay and POIMMCISAGiS A NEE 345 PO RECTE EE 346 AO Structures Unions Enumerations and Bit Fields G 3 9 0 eeeeeee 346 AT Quales EE TO NEE 347 En Re EE tee G 3 RE 347 Ale SlaleMe MS Geo U2 EE 347 A 13 Preprocessing Directives CG 313 347 A14 Library nee EE EE 348 Ile EE 351 Worldwide Sales and KEE LEE 364 DS51865B page 4 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 1 HI TECH C Compiler for PIC10 12 16 MCUs 1 1 INTRODUCTION This chapter provides an overview of the
296. efine ADD a b a b ADD 1 2 3 oops only two arguments required 172 formal parameter expected after Preprocessor The stringization operator not to be confused with the leading used for preproces sor control lines must be followed by a formal macro parameter e g define str x y oops did you mean x instead of y If you need to stringize a token you will need to define a special macro to do it e g ee mkstr X 3 then use _mkstr_ token wherever you need to convert a token into a string 173 undefined symbol in if 0 used Preprocessor A symbol on a if expression was not a defined preprocessor macro For the pur poses of this expression its value has been taken as zero This warning may be dis abled with some compilers Example if FOO BAR Jr e g FOO was never defined define GOOD endif WW 174 multi byte constant isn t portable Preprocessor Multi byte constants are not portable and in fact will be rejected by later passes of the compiler e g if CHAR ab 2010 Microchip Technology Inc DS51865B page 249 HI TECH C for PIC10 12 16 User s Guide define MULTI endif 175 division by Zero in if zero result assumed Preprocessor Inside a i expression there is a division by zero which has been treated as yielding Zero et if foo O divide by 0 was this what you were intending inte ee endif 176 missing newline Prepr
297. eing converted to an error for the instance in the function main void main void unsigned char c pragma warning error 359 readp amp 1 Compilation of this code would result in an error not the usual warning The error will force compilation to cease after the current module has concluded or immediately if the maximum error count has been reached 3 16 LINKING PROGRAMS The compiler will automatically invoke the linker unless the compiler has been requested to stop after producing an intermediate file The linker will run with options that are obtained from the command line driver These options specify the memory of the device and how the psects should be placed in the memory No linker scripts are used The linker options passed to the linker can be adjusted by the user but this is only required in special circumstances See Section 2 7 7 L Adjust Linker Options Directly for more information The linker creates a map file which details the memory assigned to psects and some objects within the code The map file is the best place to look for memory information see Section 5 4 Map Files for a detailed explanation of the detailed information in this file 3 16 1 Replacing Library Modules The HI TECH C compiler comes with a librarian LIBR which allows you to unpack a library file and replace modules with your own modified versions See Section 6 2 Librarian However you can easily replace a l
298. eing that the arguments and the members of the returned structure are all of type long int Example include lt stdlib h gt include lt stdio h gt void main void ldiv_t 1t lt ldiv 1234567 12345 printi Lld remainder ke It guot Lteremiy See Also div uldiv udiv Return Value Returns a structure of type ldiv_t 2010 Microchip Technology Inc DS51865B page 203 HI TECH C for PIC10 12 16 User s Guide LOCALTIME Synopsis include lt time h gt struct tm localtime time_t t Description The localtime function converts the time pointed to by t which is in seconds since 00 00 00 on Jan 1 1970 into a broken down time stored in a structure as defined in time h The routine localtime takes into account the contents of the global integer time_zone This should contain the number of minutes that the local time zone is west ward of Greenwich On systems where it is not possible to predetermine this value localtime will return the same result aS gmtime Example include lt stdio h gt include lt time h gt char wday r void main void time_t clock EE ETM rp time amp clock tp localtime amp clock printf is s n wday tp gt tm_wday See Also ctime asctime time Return Value Returns a structure of type tm Note The example will require the user to provide the time routine as one cannot
299. ell 1361 syntax error in configuration argument Parser The argument to pragma config was malformed pragma config WDT i QOS Ves WEL OM Or Or ke 2 1362 configuration setting redefined Code Generator The same config pragma setting have been issued more than once with different val ues pragma config WDT OFF pragma config WDT ON EX OOOS 19 WDT On Or EE Set 1363 unknown configuration setting used Driver The configuration value and setting is not known for the target device 2010 Microchip Technology Inc DS51865B page 339 HI TECH C for PIC10 12 16 User s Guide pragma config WDR ON 0ps did you mean WDT 1364 can t open configuration registers data file Driver The file containing value configuration settings could not be found 1365 missing argument to pragma varlocate Parser The argument to pragma varlocate was malformed pragma varlocate oops what do you want to locate amp where 1366 syntax error in pragma varlocate Parser The argument to pragma varlocate was malformed pragma varlocate fred E OOPS wiheh bank Tor fred 7y 1367 end of file in asm Parser An end of file marker was encountered inside a aam _endasm block 1368 assembler message Assembler Displayed is an assembler advisory message produced by the MESSG directive con tained in the assembler source 1369 can t open proc file Driver Th
300. en all the memory available for this psect has been allocated If it is present there will be one address range specified under this segment for each free block of memory Deter mine the size of each block and compare this with the number of words specified in the error message Psects containing code can be reduced by using all the compiler s optimizations or restructuring the program If a code psect must be split into two or more small psects this requires splitting a function into two or more smaller functions which may call each other These functions may need to be placed in new modules Psects containing data may be reduced when invoking the compiler optimizations but the effect is less dramatic The program may need to be rewritten so that it needs less variables If the default linker options must be changed this can be done indirectly through the driver using the driver L option see Section 2 7 7 L Adjust Linker Options Directly Section 2 7 8 M Generate Map File has information on inter preting the map file s call graph if the compiler you are using uses a compiled stack lf the string Call graph is not present in the map file then the compiled code uses a hardware stack If a data psect needs to be split into smaller psects the definitions for variables will need to be moved to new modules or more evenly spread in the existing modules Memory allocation for auto variables is entirely handled by the compil
301. enerated Psects for a list of all psects that the code generator defines Chapter 5 Linker has more infor mation on the operation of the linker and on options that can be used to control psect placement in memory The assembler associates no significance to the name of a psect and the linker is also not aware of which psects are compiler generated or which are user defined Unless defined as abs absolute psects are relocatable The following is an example showing some executable instructions being placed in the mytext psect and space being reserved in the mybss psect Neither of these psects are compiler defined PSECT mytext class CODE delta 2 adjust GOTO clear fred increment INCE _fred PSECT mybss class BANKO space 1 fred DG 2 PSECT mytext class CODE delta 2 clear fred CLRE _fred 1 RETURN Note that even though the two blocks of code in the mytext psect are separated by a block in the mybs s psect the two mytext psect blocks will be contiguous when loaded by the linker In other words the INCF _ fred instruction will be followed by the clrf instruction in the final output The actual location in memory of the mytext and mybss psects will be determined by the linker Code or data that is not explicitly placed into a psect will become part of the default unnamed psect 4 3 9 Assembler Directives Assembler directives or pSeudo ops are used in a similar way to instruction mnemon ics With the excep
302. ent space allocated to it Example include lt stdlib h gt include lt stdio h gt void main void char buf 10 Ee reet 1234 Voy printi butter holds s n but See Also Srrtol i 10a lteat ultoa Return Value This routine returns a copy of the buffer into which the result is written 2010 Microchip Technology Inc DS51865B page 237 HI TECH C for PIC10 12 16 User s Guide VA_START VA_ARG VA_END Synopsis include lt stdarg h gt void va_start va_list ap parmN type va_arg ap type void va_end Va list ap Description These macros are provided to give access in a portable way to parameters to a function represented in a prototype by the ellipsis symbol where type and number of arguments supplied to the function are not known at compile time The right most parameter to the function shown as parmn plays an important role in these macros as it is the starting point for access to further parameters In a function taking variable numbers of arguments a variable of type va_list should be declared then the macro va start invoked with that variable and the name of parmn This will initialize the variable to allow subsequent calls of the macro va_arg to access suc cessive parameters Each call to va_arg requires two arguments the variable previously defined and a type name which is the type that the next parameter is expected to be Note that any arguments thus acces
303. ent variables are given in Table 2 4 TABLE 2 4 MESSAGING ENVIRONMENT VARIABLES Variable ect O HTC_MSG_FORMAT All advisory messages HTC_WARN_FORMAT All warning messages HTC_ERR_FORMAT All error and fatal error messages The value of these environment variables are strings that are used as templates for the message format Printf like placeholders can be placed within the string to allow the message format to be customized The placeholders and what they represent are indicated in Table 2 5 TABLE 2 5 MESSAGING PLACEHOLDERS Placeholder Replacement Application name Re Column number ie Q e T ieene e enne e uesgenete OC AP AP o i D Fh o If these options are used in a DOS batch file two percent characters will need to be used to specify the placeholders as DOS interprets a single percent character as an argument and will not pass this on to the compiler For example SET HTC EPR FORMAT file f line 1 Environment variables in turn may be overridden by the driver options MSGFOR MAT WARNFORMAT and ERRFORMAT see Section 2 7 27 ERRFORMAT Define Format for Compiler Messages These options take a string as their argu ment The option strings are formatted and can use the same placeholders as their variable counterparts For example a project is compiled but as shown produces a warning from the parser and an error from the linker numbered 362 and 492 respecti
304. entrant or non reentrant models It does not handle cases where functions are called recursively Code associated with library functions are duplicated in the same way This also applies to implicitly called library routines such as those that perform division or float ing point operations associated with C operators 3 9 5 1 DISABLING DUPLICATION The automatic duplication of the function may be inhibited by the use of a special pragma This should only be done if the source code guarantees that an interrupt cannot occur while the function is being called from any main line code Typically this would be achieved by disabling interrupts before calling the function It is not sufficient to disable the interrupts inside the function after it has been called if an interrupt occurs when executing the function the code may fail See Section 3 9 4 Enabling Interrupts for more information on how interrupts may be disabled The pragma is pragma interrupt_level 1 The pragma should be placed before the definition of the function that is not to be dupli cated The pragma will only affect the first function whose definition follows For example if the function read is only ever called from main line code when the interrupts are disabled then duplication of the function can be prevented if it is also called from an interrupt function as follows pragma interrupt_level 1 int read char device ie Bibs In main line code this fun
305. equent objects will use the name of the file that contains them and their lexical name separated by an symbol e g 1lcd foobar would be the assembly symbol for the st atic variable foobar defined IK Je er 3 5 2 1 2 Non auto Variable Size Limits Arrays of any type including arrays of aggregate types are fully supported by the com piler So too are the structure and union aggregate types see 3 4 3 Structures and Unions These objects can often become large in size and may affect memory allo cation When compiling for enhanced Mid Range PIC devices the size of an object array or aggregate object is typically limited only by the total available data memory Single objects that will not fit into any of the available general purpose RAM ranges will be allo cated memory in several RAM banks and accessed using the device s linear GPR general purpose RAM Note that the special function registers which reside in the data memory space or memory reservations in general purpose RAM may prevent objects from being allo cated contiguous memory in the one bank In this case objects that are smaller than the size of a RAM bank may also be allocated across multi banks The generated code to access multi bank objects will always be slower and the associated code size will be larger than for objects fully contained within a single RAM bank DS51865B page 72 2010 Microchip Technology Inc C Language Features On baseline and oth
306. equired to be COD Intel HEX Motorola HEX COFF OMF51 P amp E or HI TECH 606 inconsistent symbol tables Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 291 HI TECH C for PIC10 12 16 User s Guide 607 inconsistent line number tables Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 608 bad path specification Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 609 missing processor spec after P Cromwell The p option to cromwell must specify a processor name 610 missing psect classes after N Cromwell Cromwell requires that the N option be given a list of the names of psect classes 611 too many input files Cromwell To many input files have been specified to be converted by CROMWELL 612 too many output files Cromwell To many output file formats have been specified to CROMWELL 613 no output file format specified Cromwell The output format must be specified to CROMWELL 614 no input files specified Cromwell CROMWELL must have an input file to convert 616 option Cbaseaddr is illegal with options R or L Linker The linker option Cbaseaddr cannot be used in conjunction with either the R or L linker options 618 error reading COD file data Cromwell An err
307. er Other than reducing the number of these variables used the programmer has little con trol over their operation This applies whether the compiled code uses a hardware or compiled stack For example after receiving the message Can t find 0x34 words 0x34 withtotal for psect text in segment CODE error look in the map file for the ranges of unused memory UNUSED ADDRESS RANGES CODE 00000244 O0000025F 00001000 0000102 RAM 002000 t400 30LFEB In the CODE segment there is 0x1c 0x25f 0x244 1 bytes of space available in one block and 0x30 available in another block Neither of these are large enough to accom modate the psect text which is 0x34 bytes long Notice however that the total amount of memory available is larger than 0x34 bytes 2010 Microchip Technology Inc DS51865B page 287 HI TECH C for PIC10 12 16 User s Guide IERT 492 attempt to position absolute psect is illegal Linker This psect is absolute and should not have an address specified in a P option Either remove the abs psect flag or remove the P linker option TP aL 493 origin of psect is defined more than once Linker The origin of this psect is defined more than once There is most likely more than one p linker option specifying this psect 494 bad P format Linker The P option given to the linker is malformed This option specifies placement of a psect e g Ptext 10g0h Maybe you meant Ptext
308. er s startup code however the persistent qualifier requests that this variable shall be unchanged by the compiler s startup code 1082 size of initialized array element is zero Code Generator This is an internal compiler error Contact HI TECH Software technical support with details DS51865B page 324 2010 Microchip Technology Inc WW 1088 function pointer Generator is used but never assigned a value Code A function call involving a function pointer was made but the pointer was never assigned a target address e g vorid PLO 100 Ehe E what Eer LON does To porn toy EE WW 1089 recursive function call to Code Generator A recursive call to the specified function has been found The call may be direct or indi rect using function pointers and may be either a function calling itself or calling another function whose call graph includes the function under consideration 1090 variable is not used Code Generator This variable is declared but has not been used by the program Consider removing it from the program WW 1091 main function not defined Code Generator The main function has not been defined Every C program must have a function called main 1094 bad derived type Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1095 bad call to typeSub Code Generator This is an internal compiler error
309. er Mid Range devices arrays and structures are limited to the maximum size of the available GPR memory in each RAM bank An error will result if an array is defined which is larger than this size Again memory reservations in general purpose RAM further restrict the contiguous memory in the one bank and may result in additional size limits 3 5 2 1 3 Changing the Default Non auto Variable Allocation There are several ways in which non auto variables can be located in locations other than the default Variables can be placed in other device memory spaces by the use of qualifiers For example if you wish to place variables in the program memory space then the const specifier should be used see Section 3 4 6 1 Const Type Qualifier If you wish to prevent all variables from using one or more data memory locations so that these locations can be used for some other purpose you are best reserving the memory using the memory adjust options See Section 2 7 48 RAM Adjust RAM Ranges for information on how to do this If only a few non auto variables are to be located at specific addresses in data space memory then the variables can be made absolute This allows individual variables to be explicitly positioned in memory at an absolute address Absolute variables are described in Section 3 5 4 Absolute Variables Once variables are made absolute their address is hard coded in generated output code they are no longer placed in
310. er Set the page length t ON OFF Truncate listing output lines The default wraps lines D Bree ren processor gt ssf a Set the processor type cn talk HEX Set the default radix to HEX dec or oct x ON OFF Turn macro expansion on or off See also the NOLIST control in Section 4 3 10 7 NOLIST 4 3 10 5 NOCOND Using this control will prevent conditional code from being included in the assembly list file output See also the COND control in Section 4 3 10 1 COND 4 3 10 6 NOEXPAND The NOEXPAND control disables macro expansion in the assembly list file The macro call will be listed instead See also the EXPAND control in Section 4 3 10 2 EXPAND Assembly macro are discussed in Section 4 3 9 12 MACRO and ENDM 4 3 10 7 NOS This control turns the listing output off from this point onward See also the LIST control in Section 4 3 10 4 LIST DS51865B page 136 2010 Microchip Technology Inc Macro Assembler 4 3 10 8 NOXREF The NOXREF control will disable generation of the rawcross reference file See also the XREF control in Section 4 3 10 13 XREF 4 3 10 9 PAGE The PAGE control causes a new page to be started in the listing output A Control L form feed character will also cause a new page when encountered in the source 4 3 10 10 SPACE The SPACE control will place a number of blank lines in the listing output as specified by its parameter 4 3 10 11 SUBTITLE
311. erflow error can occur if the value determined by the linker is too large to fit in the hole reserved for the value in the psect See Section 477 fixup over flow in expression location 0x 0x size value 0x Linker for information on finding the cause of these errors 5 4 MAP FILES The map file contains information relating to the relocation of psects and the addresses assigned to symbols within those psects 5 4 1 Generation If compilation is being performed via an IDE such as HI TIDE or MPLAB IDE a map file is generated by default without you having to adjust the compiler options If you are using the driver from the command line then you ll need to use the M option to request that the map file be produced see Section 5 2 15 Mmapfile Map files use the extension map Map files are produced by the linker If the compilation process is stopped before the linker is executed then no map file is produced The linker will still produce a map file even if it encounters errors which will allow you to use this file to track down the cause of the errors However if the linker ultimately reports too many errors then it did not run to completion and the map file will be either not created or not complete You can use the ERRORS option see Section 2 7 28 ERRORS Maximum Number of Errors on the command line to increase the number of errors before the linker exits 2010 Microchip Technology Inc
312. ermine the required memory space from the address and access either space accordingly Again this takes place without any change in the definition of the pointer 3 4 4 3 FUNCTION POINTERS The HI TECH C compiler fully supports pointers to functions which allows functions to be called indirectly These are often used to call one of several function addresses stored in a user defined C array which acts like a lookup table Function pointers are always one byte in size and hold an offset into a jump table that is output by the compiler This jump table contains jumps to the destination functions As with data pointers the target assigned to function pointers is tracked This is an eas ler process to undertake compared to that associated with data pointers as all function instructions must reside in program memory The pointer reference graph described in 2010 Microchip Technology Inc DS51865B page 63 HI TECH C for PIC10 12 16 User s Guide Section 4 4 2 Pointer Reference Graph will show function pointers in addition to data pointers as well as all their targets The targets will be names of functions that could possibly be called via the pointer One notable runtime feature is that if a function contains NULL the value 0 and is used to call a function indirectly the code will become stuck in a loop which branches to itself This endless loop can be used to detect this erroneous situation Typically calling a func
313. es is auto matically configured to what the IDE expects It recommended that you do not adjust the message formats if compiling using this IDE 2 7 39 NODEL Do not remove temporary files specifying NODEL when building will instruct PICC not to remove the intermediate and temporary files that were created during the build process 2 7 40 NOEXEC Don t Execute Compiler The NOEXEC option causes the compiler to assemble all the command lines for the compiler applications but not to perform any compilation or produce any output DS51865B page 34 2010 Microchip Technology Inc PICC Command line Driver This may be useful when used in conjunction with the v option Section 2 7 15 V Verbose Compile in order to see all of the command lines the compiler uses to drive the compiler applications 2 7 41 OBJDIR Specify a directory for intermediate files This option allows a directory to be nominated in PICC to locate its intermediate files If this option is omitted intermediate files will be created in the current working direc tory This option will not set the location of output files instead use OUTDIR See Section 2 7 43 OUTDIR Specify a directory for output files and Section 2 7 10 O Specify Output File for more information 2 7 42 OPT Invoke Compiler Optimizations The OPT option allows control of all the compiler optimizers If this option is not spec ified or it is speci
314. essfully setup using the setup driver option 883 setup failed Driver The compiler was not successfully setup using the set up driver option Ensure that the directory argument to this option is spelt correctly is syntactically correct for your host operating system and it exists 884 please ensure you have write permissions to the configuration file Driver The compiler was not successfully setup using the setup driver option because the driver was unable to access the XML configuration file Ensure that you have write per mission to this file The driver will search the following configuration files in order e the file specified by the environment variable HTC_XML e the file etc htsoft xml if the directory etc is writable and there is no htsoft xml file in your home directory e the file htsoft xml file in your home directory If none of the files can be located then the above error will occur 889 this compiler has expired Driver The demo period for this compiler has concluded 890 contact HI TECH Software to purchase and re activate this compiler Driver The evaluation period of this demo installation of the compiler has expired You will need to purchase the compiler to re activate it If however you sincerely believe the evaluation period has ended prematurely please contact HI TECH technical support 891 can t open psect usage map file Driver The driver was unable to open th
315. eters being eight data values Each value should be a byte in size Unused values should be specified as a parameter of zero The macro may be called multiple times to define the required amount of EEPROM data It is recommended that the macro be placed outside any function definitions The macro defines and places the data within a psect called eeprom_data This psect is automatically positioned by the linker This macro is not used to write to EEPROM locations during runtime it is used for pre loading EEPROM contents at program time only 3 3 8 2 EEPROM ACCESS FUNCTIONS The library functions eeprom_read and eeprom_write can be called to read from and write to the EEPROM during program execution For example to write a byte size value to an address in EEPROM and retrieve it using these functions would be include bt br void eetest void unsigned char value 1 unsigned char address 0 write value to EEPROM address eeprom_write address value 2010 Microchip Technology Inc DS51865B page 51 HI TECH C for PIC10 12 16 User s Guide read from EEPROM at address value eeprom_read address These functions test and wait for any concurrent writes to EEPROM to conclude before performing the required operation The eeprom_write function will initiate the pro cess of writing to EEPROM and this process will not have completed by the time that eeprom_write returns The new data written to
316. ether the full command lines for the compiler applications are displayed when building See Section 2 7 15 V Verbose Compile 7 Warning level This selector allows the warning level print threshold to be set See Section 2 7 59 WARN Set Warning Level 8 Operation Mode This selector allows the user to force another available operat ing mode e g Lite Standard or PRO other than the default See Section 2 7 36 MODE Choose Compiler Operating Mode 9 Address Qualifier This selector allows the user to select the behavior of the address qualifier See Section 2 7 18 ADDRQUAL Set Compiler Response to Memory Qualifiers 2 0 0 Linker Tab The options in this dialog control the link step of compilation See Figure 2 7 in conjunction with the following command line option equivalents DS51865B page 44 2010 Microchip Technology Inc PICC Command line Driver FIGURE 2 7 THE LINKER TAB A SS o gi 14 15 2010 Microchip Technology Inc Build Options For Project astestmcmn z E Directories Custom Build Trace Driver Compiler Linker Global M Runtime options Linker options W Clear bss Fill Codeoffset D lize ste Initialize heap Checksum Jh Initialize data TC Errata Keep generated startup as Format hes tile tor download Vectors ROR D zrmpcc skaje Callgraph Short form Wee ge overflow ee T E Trace type SSS Stack size Spe
317. f these are implementation defined Implementation defined behavior is fully docu mented in Appendix A Implementation Defined Behavior The following sections illustrate code operations that are often misunderstood as well as additional operations that the compiler is capable of performing 3 6 1 Integral Promotion When there is more than one operand to an operator they typically must be of exactly the same type The compiler will automatically convert the operands if necessary so they do have the same type The conversion is to a larger type so there is no loss of information however the change in type can cause different code be ha vi our to what is sometimes expected These form the standard type conversions Prior to these type conversions some operands are unconditionally converted to a larger type even if both operands to an operator have the same type This conversion is called integral promotion and is part of Standard C be ha vi our The HI TECH C com piler performs these integral promotions where required and there are no options that can control or disable this operation If you are not aware that the type has changed the results of some expressions are not what would normally be expected Integral promotion is the implicit conversion of enumerated types signed or unsigned varieties of char short int or bit field types to either signed int or unsigned int Ifthe result of the conversion can be represented by an s
318. f values are expected here 1024 syntax error in chipinfo file at line Driver The chip configuration file contains a syntax error at the line specified 1025 unknown architecture in chipinfo file at line Driver The attribute at the line indicated defines an architecture that is unknown to this com piler 1026 missing architecture in chipinfo file at line Assembler The chipinfo file has a processor section without an ARCH values The architecture of the processor must be specified Contact HI TECH Support if the chipinfo file has not been modified 1027 activation was successful Driver The compiler was successfully activated 1028 activation was not successful error code Driver The compiler did not activated successfully 1029 compiler not installed correctly error code Driver This compiler has failed to find any activation information and cannot proceed to exe cute The compiler may have been installed incorrectly or incompletely The error code quoted can help diagnose the reason for this failure You may be asked for this failure code if contacting HI TECH Software for assistance with this problem 1030 Hexmate Intel HEX editing utility Build 1 i Hexmate Indicating the version number of the HEXMATE being executed 1031 USAGE input1 HEX input2 HEX inputN HEX options Hexmate The suggested usage of HEXMATE 1032 use HELP lt option gt fo
319. fabs Return Value The absolute value of j Synopsis include lt math h gt double acos double f Description The acos function implements the inverse of cos i e it is passed a value in the range 1 to 1 and returns an angle in radians whose cosine is equal to that value Example include lt math h gt include lt stdio h gt Peine acos values for l to 1 An degrees 7 void main void float i a for i s07 2 lt LEE e a FS Orl 4 a EE i L80073 x1 A115927 printf f sf degrees n i a 2010 Microchip Technology Inc DS51865B page 177 HI TECH C for PIC10 12 16 User s Guide See Also sin cos tan asin atan atan2 j Return Value An angle in radians in the range 0 to x ASCTIME Synopsis include lt time h gt char asctime struct tm t Description The asctime function takes the time broken down into the struct tm structure pointed to by its argument and returns a 26 character string describing the current date and time in the format Sun Sep 16 01 03 52 1973 n 0 Note the newline at the end of the string The width of each field in the string is fixed The example gets the current time converts it to a struct tm with localtime it then converts this to ASCII and prints it The time function will need to be provided by the user see time for details Example include lt stdio h gt include lt time
320. fied as OPT a11 all optimizations are enabled Optimizations may be disabled by using OPT none or individual optimizers may be controlled e g OPT asm will only enable some assembler optimizations Table 2 12 lists the available optimization types The optimizations that are controlled through specifying a level 1 through 9 affect optimization during the code generation stage The level selected is commonly referred to as the global optimization level TABLE 2 12 OPTIMIZATION OPTIONS geng nation Do not use any compiler optimizations These optimizations are primarily concerned with getting variables into registers and the value in the option indicates how hard the compiler tries to make this happen Note that different suboptions control assembler optimizations of assembly source files and intermediate assembly files produced from C source code The speed and space suboptions are contradictory Soace optimizations are the default If speed and space suboptions are both specified then speed optimizations takes precedence These optimizations affect procedural abstraction which is per formed by the assembler and other optimizations at the code generation stage 2 7 43 OUTDIR Specify a directory for output files This option allows a directory to be nominated for PICC to locate its output files If this option is omitted output files will be created in the current working directory See also Section 2 7 41 OBJDIR
321. flagged here return sin b a 253 argument list conflicts with prototype Parser The argument list in a function definition is not the same as a previous prototype for that function Check that the number and types of the arguments are all the same extern ant RE bg this t5 Supposedly calcs prototype y int calc int a int b j hmm whieh AS CIRT Sy error flagged here return a bD 254 undefined Parser This is an internal compiler error Contact HI TECH Software technical support with details TP a 255 not a member of the struct union Parser This identifier is not a member of the structure or union type with which it used here e g struct int ay D DEE data if data d Tan GODS s there is no member d in this structure return 256 too much indirection Parser A pointer declaration may only have 16 levels of indirection 257 only register storage class allowed Parser The only storage class allowed for a function parameter is register g VOLO process static It het Ee 2010 Microchip Technology Inc DS51865B page 259 HI TECH C for PIC10 12 16 User s Guide 258 duplicate qualifier Parser There are two occurrences of the same qualifier in this type specification This can occur either directly or through the use of a typedef Remove the redundant qualifier For example typedef volatile int vint J OOPS gt Enis Mesules
322. followed by an incom patible declaration e g ine aj Chat ar 7A GOps what aS the correct typer E 985 qualifiers redeclared Parser This function or variable has different qualifiers in different declarations 986 enum member redeclared Parser A member of an enumeration is defined twice or more with differing values Does the member appear twice in the same list or does the name of the member appear in more than one enum list 987 arguments redeclared Parser The data types of the parameters passed to this function do not match its prototype 988 number of arguments redeclared Parser The number of arguments in this function declaration does not agree with a previous declaration of the same function 989 module has code below file base of h Linker This module has code below the address given but the c option has been used to specify that a binary output file is to be created that is mapped to this address This would mean code from this module would have to be placed before the beginning of the file Check for missing psect directives in assembler files 990 modulus by zero in if zero result assumed Preprocessor A modulus operation in a i f expression has a zero divisor The result has been assumed to be zero e g define ZERO 0 if FOOSZERO this will have an assumed result of 0 define INTERESTING endif 991 integer expression required Parser In an enum declaration
323. fore opening another SLEEP endasm DS51865B page 242 2010 Microchip Technology Inc 107 illegal directive Preprocessor Parser The compiler does not understand the directive It is probably a misspelling of a pre processor directive e g indef DEBUG oops that should be undef DEBUG 108 if n def without an argument Preprocessor The preprocessor directives if ifdef and ifndef must have an argument The argument to i should be an expression while the argument to ifdef or ifndef should be a single name e g TLT d Ener Do argument Tto check y output 10 else output 20 endif 109 include syntax error Preprocessor The syntax of the filename argument to include is invalid The argument to include must be a valid file name either enclosed in double quotes or angle brackets lt gt Spaces should not be included and the closing quote or bracket must be present There should be nothing else on the line other than comments e g include stdio h oops should b r include lt stdio h gt 110 too many file arguments usage cpp input output Preprocessor CPP should be invoked with at most two file arguments Contact HI TECH Support if the preprocessor is being executed by a compiler driver WW 111 redefining preprocessor macro Preprocessor The macro specified is being redefined to something different to the original definition If you
324. fore you can t use it anywhere an expression with a value is required e g as an operand to an arithmetic operator 207 simple type required for Parser A simple type i e not an array or structure is required as an operand to this operator 208 operands of not same type Parser The operands of this operator are of different pointer e g int F apy char py P cp flag gt ips ep2Z oO EE OT T EE De Int RE Oiar a 7 Maybe you meant something like Cp ilag 7 Lenhart sep 2010 Microchip Technology Inc DS51865B page 253 HI TECH C for PIC10 12 16 User s Guide 209 type conflict Parser The operands of this operator are of incompatible types 210 bad size list Parser This is an internal compiler error Contact HI TECH Software technical support with details 211 taking sizeof bit is illegal Parser lt is illegal to use the sizeof operator with the HI TECH C bit type When used against a type the sizeof operator gives the number of bytes required to store an object that type Therefore its usage with the bit type make no sense and is an illegal operation 212 missing number after pragma pack Parser The pragma pack requires a decimal number as argument This specifies the align ment of each member within the structure Use this with caution as some processors enforce alignment and will not operate correctly if word fetches are made on odd boundaries e g pra
325. ftware This is the context save or context switch code Enhanced Mid Range PIC devices save the W STATUS BSR and FSRx registers in hardware using special shadow registers and hence these registers do not need to be saved by software In fact the compiler will never have to produce code to save any other registers when compiling for an Enhanced Mid Range as no additional registers are ever used This makes interrupt functions on Enhanced Mid Range PIC devices very fast and efficient Other Mid Range PIC processors only save the entire PC excluding the PCLATH reg ister when an interrupt occurs The the W STATUS FSR and PCLATH registers and the BTEMP pseudo register must be saved by code produced by the compiler if required The compiler fully determines which registers and objects are used by an interrupt func tion or any of the functions that it calls based on the call graph generated by the com piler and saves these appropriately Assembly code placed in line within the interrupt function is not scanned for register usage Thus if you include in line assembly code into an interrupt function you may have to add extra assembly code to save and restore any registers or locations used The same is true for any assembly routines called by the interrupt code If the w register is to be saved by the compiler it may be stored to memory reserved in the common RAM If the processor for which the code is written does not have common
326. g compiler application has encountered too many errors and will exit immediately Other uncompiled source files will be processed but the compiler appli cations that would normally be executed in due course will not be run The number of errors that can be accepted can be controlled using the ERRORS option See Section 2 7 28 ERRORS Maximum Number of Errors 2 error warning generated but no description available all applications The executing compiler application has emitted a message advisory warning error but there is no description available in the message description file MDF to print This may be because the MDF is out of date or the message issue has not been translated into the selected language 3 malformed error information on line in file all applications The compiler has attempted to load the messages for the selected language but the message description file MDF was corrupted and could not be read correctly 100 unterminated if n def block from line Preprocessor A if or similar block was not terminated with a matching endif e g if INPUT error flagged here void main void run no endif was found in this module 2010 Microchip Technology Inc DS51865B page 241 HI TECH C for PIC10 12 16 User s Guide 101 may not follow else Preprocessor A else or elif has been used in the same conditional block as a else These can only follow
327. ge 169 HI TECH C for PIC10 12 16 User s Guide range 0 to 64k and that any data in the HEX file outside of this range can be safely disregarded In this case by generating the HEX file in INHX8M format the operation might succeed The HEXMATE option to do this would be FORMAT INHX8 amp M Now consider if the same bootloader also required every data record to contain eight bytes of data no more no less This is possible by combining the FORMAT with FILL options Appropriate use of F ILL can ensure that there are no gaps in the data for the address range being programmed This will satisfy the minimum data length require ment To set the maximum length of data records to eight bytes just modify the previous option to become FORMAT INHX8M 8 The possible types that are supported by this option are listed in Table 6 10 Note that INHX082 is not an actual INHX format Selection of this type generates an INHX32 file but will also initialize the upper address information to zero This is a requirement of some device programmers TABLE 6 10 INHX TYPES USED IN FORMAT OPTION Cannot program addresses beyond 64K Can program addresses beyond 64K with extended linear address records INHX32 with initialization of upper address to zero 6 6 1 11 HELP Using HELP will list all HEXMATE options By entering another HEXMATE option as a parameter of HELP will show a detailed help message for the given option For example HEL
328. gma pack what is the alignment value Maybe you meant something like pragma pack 2 214 missing number after pragma interrupt_level Parser The pragma interrupt_level requires an argument from 0 to 7 215 missing argument to pragma switch Parser The pragma switch requires an argument of auto direct Or simple g pragma switch oops this requires a switch mode maybe you meant something like pragma switch simple 216 missing argument to pragma Deech Parser The pragma psect requires an argument of the form oldname newname where old name is an existing psect name known to the compiler and newname is the desired new name e g pragma psect oops this requires an psect to redirect maybe you meant something like pragma psect text specialtext 218 missing name after pragma inline Parser The inline pragma expects the name of a function to follow The function name must be recognized by the code generator for it to be expanded other functions are not altered e g pragma inline what is the function name maybe you meant something like pragma inline memcpy DS51865B page 254 2010 Microchip Technology Inc 219 missing name after pragma printf check Parser The printf_check pragma expects the name of a function to follow This specifies printf style format string checking for the function e g pragma printf_check what function is to be checked
329. h details IERT 629 bad storage class in SDB file line column Cromwell This is an internal compiler error Contact HI TECH Software technical support with details IERT 630 invalid syntax for prefix list in SDB file Cromwell This is an internal compiler error Contact HI TECH Software technical support with details IERT 631 syntax error at token in SDB file line column Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 632 can t handle address size Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 633 unknown symbol class Cromwell Cromwell has encountered a symbol class in the symbol table of a COFF Microchip COFF or ICOFF file which it can t identify IERT 634 error dumping Cromwell Either the input file to CROMWELL is of an unsupported type or that file cannot be dumped to the screen 635 invalid HEX file on line Cromwell The specified HEX file contains an invalid line Contact HI TECH Support if the HEX file was generated by the compiler 636 checksum error in Intel HEX file on line Cromwell HEXMATE A checksum error was found at the specified line in the specified Intel HEX file The HEX file may be corrupt 2010 Microchip Technology Inc DS51865B page 293 HI TECH C for PIC10 12 16 User s Guide 637 unkno
330. h gt void main void time_t clock struct tm tp time amp clock tp localtime amp clock EELER ascteime ep See Also ctime gmtime localtime time Return Value A to the string Note The example will require the user to provide the time routine as it cannot be supplied with the compiler See time for more details E DS51865B page 178 2010 Microchip Technology Inc Library Functions ASIN ASSERT Synopsis include lt math h gt double asin double f Description The asin function implements the converse of sin i e itis passed a value in the range 1 to 1 and returns an angle in radians whose sine is equal to that value Example include lt math h gt include lt stdio h gt void main void float i a for i el 0 T lt DEE Lg T Aen EC a Asin Ke te LE printf f sf degrees n i a See Also sin cos tan acos atan atan2 Return Value An angle in radians in the range x Synopsis include lt assert h gt void assert int ei Description This macro is used for debugging purposes the basic method of usage is to place assertions liberally throughout your code at points where correct operation of the code depends upon certain conditions being true initially An assert routine may be used to ensure at run time that an assumption holds true For example the following statement asserts that the tp
331. har add unsigned char a void main void volatile unsigned char result a read_port result add 5 call the assembly routine 3 13 2 asm endasm and asm PIC MCU instructions may also be directly embedded in line into C code using the directives asm endasm or the statement asm The asm and endasm directives are used to start and end a block of assembly instructions which are to be embedded into the assembly output of the code generator The asm block is not syntactically part of the C program and thus it does not obey normal C flow of control rules This means that you should not use this form of in line assembly inside C constructs like if while and for statements However this is the easiest means of adding multiple assembly instructions The asm statement is used to typically embed a single assembler instruction This form looks and behaves like a C statement Only one assembly instruction may be encapsulated within each asm statement You can specify more than one assembly instruction inside one asm statement by separating the instructions with a n char acter e g asm movlw 55 nmovwf _x although code will be more readable if you one place one instruction in each statement and use multiple statements 2010 Microchip Technology Inc DS51865B page 99 HI TECH C for PIC10 12 16 User s Guide You may use the asm form of in line assembly at any point in the
332. he assembler list file look back up the file from the instruction at fault to determine which C statement has generated this instruction You will then need to examine the C code for possible errors incorrectly qualified pointers are an common trigger 478 range check failed location 0x 0x value 0x gt limit 0x Linker This is an internal compiler error Contact HI TECH Software technical support with details 479 circular indirect definition of symbol Linker The specified symbol has been equated to an external symbol which in turn has been equated to the first symbol 480 function signatures do not match 0x 0x Linker The specified function has different signatures in different modules This means it has been declared differently e g it may have been prototyped in one module and not another Check what declarations for the function are visible in the two modules spec ified and make sure they are compatible e g extern int get_value int in and in another module this is different to the declaration int get_value int in char type 481 common symbol psect conflict Linker A common symbol has been defined to be in more than one psect IERT 482 symbol is defined more than once in Assembler This symbol has been defined in more than one place The assembler will issue this error if a symbol is defined more than once in the same module e g Dest M
333. he output code of the code generator These are routines that perform tasks such as floating point oper ations integer division and type conversions and that may not directly correspond to a C function call in the source code The general form of the standard library names is htpic dc ext The meaning of each field is described by e The processor type is always pic e The double type a is for 24 bit doubles and a for 32 bit doubles e Library Type is always c e The extension is 1pp for p code libraries or 1ib for relocatable object libraries 2 4 1 2 USER DEFINED LIBRARIES User defined libraries may be created and linked in with programs as required Library files are more easy to manage and may result in faster compilation times but must be compatible with the target device and options for a particular project Several versions of a library may need to be created to allow it to be used for different projects 2010 Microchip Technology Inc DS51865B page 15 HI TECH C for PIC10 12 16 User s Guide Libraries can be created manually using the compiler and the librarian LIBR See Section 6 2 Librarian for more information on the librarian and creating library files using this application Alternatively library files can be created directly from the com piler by specifying a library output using the OUTPUT option see Section 2 7 44 OUTPUT type Specify Output File Type User created librar
334. hecksum The syntax of a checksum line is addril addr2 wherel where2 offset All of addri1 addr2 wherel where2 and offset are HEX numbers without the usual H suffix Such a specification says that the bytes at addri through to addr2 inclusive should be summed and the sum placed in the locations where through where2 inclusive For an 8 bit checksum these two addresses should be the same For a checksum stored low byte first wherei should be less than where2 and vice versa The offset value is optional but if supplied the value will be used to initialize the checksum Otherwise it is initialized to zero For example 0005 1FFF 3 4 1FFF This will sum the bytes in 5 through 1FFFH inclusive then add 1FFFH to the sum The 16 bit checksum will be placed in locations 3 and 4 low byte in 3 The checksum is ini tialized with 1FFFH to provide protection against an all zero ROM or a ROM misplaced in memory A run time check of this checksum would add the last address of the ROM being checksummed into the checksum For the ROM in question this should be 1FFFH The initialization value may however be used in any desired fashion 6 4 CREF The cross reference list utility CREF is used to format raw cross reference information produced by the compiler or the assembler into a sorted listing A raw cross reference file is produced with the CR command line driver option The assembler will generate a raw cross reference file with a
335. hey are formed by the command line driver PICC based on the selected target device and the specified driver options You can often confirm that driver options were valid by looking at the linker options in the map file For exam ple if you ask the driver to reserve an area of memory you should see a change in the linker options used lf the default linker options must be changed this can be done indirectly through the driver using the driver L option see Section 2 7 7 L Adjust Linker Options Directly If you use this option always confirm the change appears correctly in the map file 5 4 2 2 PSECT INFORMATION LISTED BY MODULE The next section in the map file lists those modules that made a contribution to the out put and information regarding the psects these modules defined This section is heralded by the line that contains the headings Name Link Load Length Selector Space Scale Under this on the far left is a list of object files These object files include both files gen erated from source modules and those that were extracted from object library files 1ib extension In the latter case the name of the library file is printed before the object file list Note that since the code generator combines all C source files and p code libraries there will only be one object file representing the entire C part of the program The object file corresponding to the runtime startup code is normally present in this list
336. hich bank will hold each variable and encode the output accordingly but it will not know the exact location within that bank The compiler will attempt to locate all variables in one bank i e place all variables in the psect destined for this bank but if this fills i e if the compiler detects that the psect has become too large for the free space in a bank variables will be located in other banks via different psects Qualifiers are not required to have these variables placed in banks other than bank 0 but can be used if you want to force a variable to a particular bank See Section 3 4 7 3 Bank Bank1 Bank and Bank3 Type Qualifiers and Section 2 7 18 ADDRQUAL Set Compiler Response to Memory Qualifiers for more information on how to do this If common memory is available on the target device this will also be considered for variables This memory is limited in size and may be reserved for special use so few variables can be allocated to it The compiler considers three categories of non auto variable which all relate to the value the variable should contain by the time the program begins Each variable cate gory has a corresponding psect which is used to hold the output code which reserves memory for each variable The basename of each psect category is tabulated below A full list of all psect names are listed in Section 3 9 Interrupts nv These psects are used to store variables qualified persistent whose values s
337. his table is normally 32768 bytes long Thus any macro expansion must not expand into a total of more than 32K bytes 150 illegal __ preprocessor macro Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details 151 too many arguments in preprocessor macro expansion Preprocessor There were too many arguments supplied in a macro invocation The maximum num ber allowed is 31 152 bad dp nargs in openpar c Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details IERT 153 out of space in preprocessor macro Preprocessor argument expansion A macro argument has exceeded the length of an internal buffer This buffer is normally 4096 bytes long 2010 Microchip Technology Inc DS51865B page 247 HI TECH C for PIC10 12 16 User s Guide TP aT 155 work buffer overflow concatenating Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details 156 work buffer overflow Preprocessor This is an internal compiler error Contact HI TECH Software technical support with details 157 can t allocate bytes of memory Code Generator Assembler This is an internal compiler error Contact HI TECH Software technical support with details Pa 158 invalid disable in preprocessor macro Preprocessor This is an internal compiler error
338. his may be a statement following the incomplete expression e g if a the closing parenthesis is missing here b 0 J tne error 1s flagged here 195 expression syntax Parser This expression is badly formed and cannot be parsed by the compiler e g a be oops maybe that should bee a Ze be 4 196 struct union required Parser A structure or union identifier is required before a dot e g inte aj ab Oe 7 Gps anis NOt a Structure 197 struct union member expected Parser A structure or union member name must follow a dot or arrow gt 198 undefined struct union Parser The specified structure or union tag is undefined e g struct WHAT what a definition for WHAT was never seen 199 logical type required Parser The expression used as an operand to if while statements or to boolean operators like and amp amp must be a scalar integral type e g Struct FORMAT format if format this operand must be a scaler type format a 0 200 taking the address of a register variable is illegal Parser A variable declared register may not have storage allocated for it in memory and thus it is illegal to attempt to take the address of it by applying the amp operator e g int proc register int in int ip amp 1n oops in may not have an address to take return ip 201 taking the address of this object is illegal Parse
339. hnical support with details 783 with psects are cyclic Assembler If Psect A is to be placed with Psect B and Psect B Is to be placed with Psect A there is no hierarchy The with flag is an attribute of a psect and indicates that this psect must be placed in the same memory page as the specified psect Remove a with flag from one of the psect declarations Such an assembler declara tion may look like psect my_text local class CODE with basecode which will define a psect called my_text and place this in the same page as the psect basecode 784 overfreed Assembler This is an internal compiler error Contact HI TECH Software technical support with details 785 too many temporary labels Assembler There are too many temporary labels in this assembler file The assembler allows a maximum of 2000 temporary labels 787 can t handle v rtvpe of in copyexpr Assembler This is an internal compiler error Contact HI TECH Software technical support with details TP aT 788 invalid character in number Assembler A number contained a character that was not part of the range 0 9 or 0 F 790 end of file inside conditional Assembler END of FILE was encountered while scanning for an endif to match a previous if 793 unterminated macro argument Assembler An argument to a macro is not terminated Note that angle brackets lt gt are used to quote macro arguments 794 in
340. hould not be altered by the runtime startup code They are not cleared or otherwise modified at startup bss These psects contain any uninitialized variables which are not assigned a value when they are defined or variables which should be cleared by the runtime startup code data These psects contain the RAM image of any initialized variables which are assigned a non zero initial value when they are defined and which must have a value copied to them by the runtime startup code As described in Section 3 10 Psects the basename of data space psects Is always used in conjunction with a linker class name to indicate the RAM bank in which the psect will be positioned This section also lists other variants of these psects and indi 2010 Microchip Technology Inc DS51865B page 71 HI TECH C for PIC10 12 16 User s Guide cates where these psect must be linked See also Section 3 11 Main Runtime startup and reset for more information on how initial values are assigned to the vari ables Note that the data psect used to hold initialized variables is the psect that holds the RAM variables themselves There is a corresponding psect called idata that is placed into program memory so it is non volatile and which is used to hold the initial values that are copied to the RAM variables by the runtime startup code 3 5 2 1 1 Static Variables All static variables have permanent storage duration even those defined inside a f
341. i IT EE 148 relocatable jini nei eae 148 SV MBO MOMMY EE 143 OBJTORMEX eeler te EE 158 OBJTOMEX ODO EE 158 OPT Control geet cxsccgienacteleciaeyale 135 leit rel oc siesta aie eal vores anes 34 35 103 SE eer 35 119 GEDUGGING erie ee an 35 119 gll et EE 35 speed VS EIERE 35 OPTION INSTFUCTION eiea 53 options see driver compiler options options see driver options ORG e Ee EE 102 129 oscillator calibration Constants c cceeeeeeeeeees 53 Wl Le EE 54 output file format American Automation HE A 36 EEN E ere a 36 Bytecraft COD 36 GOFF E 36 EE 36 WLC Re 36 err Te EE 36 Microchip COFF vireen e 36 Motorola S19 HEX cceeeeeseeceeeeeeeeeeeaeaes 36 TEKWONIC sorserien eee erent ne Ren ene ee 36 LIB ROE EE 36 output file formats BYU SX see asi i iar ees ea cea 17 SEENEN 35 158 UIT UIE TIS oe aaa reat a ae eel ale 27 35 GINS CORY arse 2 0e secs neew ask tdi astra neces eaeseenqees Seema 35 NAMES EE 17 PENANG eaea sce chats eaten A 27 specifying name of 27 overlaid memory areag rrenen eene 144 overlaid psects ccccccseeseeecceeeeeeeeeecaeeeeeeeeeseeaeaeees 128 ONIA PSEC THAO aoaie r oo reece 128 ovd PSECTRA 102 P pack pragma directive cccccseeeeeceeeeeeeeeeeeeeeeeeees 108 PAGE er EEN 137 paged memory selection in assembly code 120 134 PAGESEL directive serieen ia eke 134 parameters passing from assembly code 97 SION AGG e a EA A EROR ROEE Rrit 73 PATH environment variabl
342. iables can be accessed like any ordinary C variable so that no special syntax is required to access SFRs Bit variables as well as structures with bit fields can also be made absolute and so either can be used to represent bits within the register The SFR variables are predefined in header files and will be accessible once the lt htc h gt header file see Section 3 3 2 Device Header Files has been included into your source code Both bit variables and structures with bit fields are defined by the inclusion of this header file so you may use either in your source code The names given to the C variables which map over the registers and bit variables or bit fields within the registers are based on the names specified in the device data sheet However as there can be duplication of some bit names within registers there may be differences in the nomenclature The names of the structures that hold the bit fields will typically be those of the corresponding register followed by bits For example the following shows code that includes the generic header file clears PORTA as a whole sets bit 0 of PORTA using a bit variable and sets bit 2 of PORTA using the structure bit field definitions 2010 Microchip Technology Inc DS51865B page 49 HI TECH C for PIC10 12 16 User s Guide Finelude lt hte h gt void main void PORTA 0x00 RAO 1 PORTAbits RA2 1 To confirm the names that are relevant for the device yo
343. iately after reset you should use power up feature described later in Section 3 11 2 The Powerup Routine 2 5 COMPILER OUTPUT There are many files created by the compiler during the compilation A large number of these are intermediate files and some are deleted after compilation is complete but many remain and are used for programming the device or for debugging purposes DS51865B page 16 2010 Microchip Technology Inc PICC Command line Driver 2 5 1 Output Files The names of many output files use the same base name as the source file from which they were derived For example the source file input c will create a p code file called Inputs pl Some of the output files contain project wide information and are not directly associ ated with any one particular input file e g the map file If the names of these output files are not specified by a compiler option their base name is derived from the first C source file listed on the command line If there are no files of this type specified the name is based on the first input file regardless of type on the command line If you are using an IDE such as MPLAB IDE to specify options to the compiler there is typically a project file that is created for each application The name of this project is used as the base name for project wide output files unless otherwise specified by the user However check the manual for the IDE you are using for more details Note Thr
344. ibed later in Section 3 11 2 The Powerup Routine 3 11 1 1 INITIALIZATION OF OBJECTS One task of the runtime startup code is to ensure that any initialized variables contain their initial value before the program begins execution Initialized variables are those which are not auto objects and which are assigned an initial value in their definition for example input in the following example int input 88 void main void Such initialized objects have two components their initial value 0Ox0088 in the above example stored in program memory i e placed in the HEX file and space for the variable reserved in RAM it will reside and be accessed during program execution runtime The psects used for storing these components are described in Section 3 10 1 Compiler generated Psects The runtime startup code will copy all the blocks of initial values from program memory to RAM so the variables will contain the correct values before main is executed Since auto objects are dynamically created they require code to be positioned in the function in which they are defined to perform their initialization It is possible that the initial value of an auto object may change on each instance of the function and so the initial values cannot be stored in program memory and copied As a result initialized auto objects are not considered by the runtime startup code but are instead initialized by assembly code in each function output
345. ibrary module that is linked into your program without having to do this If you add to your project a source file which contains the definition for a routine with the same name as a library routine then the library routine will be replaced by your rou tine This works due to the way the compiler scans source and library files When trying to resolve a symbol a function name or variable name for example the compiler first scans all the source modules for the definition Only if it cannot resolve the symbol in these files does it then search the library files If the symbol is defined in a source file the compiler will never actually search the librar ies for this symbol and no error will result even if the symbol was present in the library files This may not be true if a symbol is defined twice in source files and an error may result if there is a conflict in the definitions All libraries are written C code and the p code libraries that contain these library rou tines are actually passed to the code generator not the linker but both these applica tions work in the way described above in resolving library symbols DS51865B page 112 2010 Microchip Technology Inc C Language Features You cannot replace a C library function with an equivalent written in assembly code using the above method If this is required you will need to use the librarian to edit or create a new library file 3 16 2 Signature Checking The compi
346. ich is specified after the assembler END directive must be a label in the current file 803 undefined temporary label Assembler A temporary label has been referenced that is not defined Note that a temporary label must have a number gt 0 804 write error on object file Assembler The assembler failed to write to an object file This may be an internal compiler error Contact HI TECH Software technical support with details 806 attempted to get an undefined object Assembler This is an internal compiler error Contact HI TECH Software technical support with details 807 attempted to set an undefined object Assembler This is an internal compiler error Contact HI TECH Software technical support with details 808 bad size in add_reloc Assembler This is an internal compiler error Contact HI TECH Software technical support with details 2010 Microchip Technology Inc DS51865B page 307 HI TECH C for PIC10 12 16 User s Guide 809 unknown addressing mode Assembler An unknown addressing mode was used in the assembly file 811 cnt too large in display Assembler This is an internal compiler error Contact HI TECH Software technical support with details 814 processor type not defined Assembler The processor must be defined either from the command line eg 16c84 via the PROCESSOR assembler directive or via the LIST assembler directive 815 syntax error in chip
347. ies that should be searched when building a project can be listed on the command line along with the source files As with Standard C library functions any functions contained in user defined libraries should have a declaration added to a header file It is common practice to create one or more header files that are packaged with the library file These header files can then be included into source code when required Library files specified on the command line are scanned first for unresolved symbols so these files may redefine anything that is defined in the C standard libraries See also Section 3 16 1 Replacing Library Modules 2 4 2 Runtime Startup Code A C program requires certain objects to be initialized and the processor to be ina particular state before it can begin execution of its function main It is the job of the runtime startup code to perform these tasks Section Section 3 11 1 Runtime Startup Code details specifically what actions are taken by this code and how it inter acts with programs you write Rather than the traditional method of linking in a generic precompiled routine the HI TECH C Compiler for PIC 10 12 16 MCUs uses a more effi cient method which actually determines what runtime startup code is required from the user s program Both the driver and code generator are involved in generating the runtime startup code The driver takes care of device setup and this code is placed into a separate assembly
348. ification giving a delta value to a class is invalid e g DCODE What is the delta value for this class Maybe you meant something like DCODE 2 440 bad delta value in D spec Linker The delta value supplied to a D specification is invalid This value should an integer of base 8 10 or 16 441 bad A spec Linker The format of a a specification giving address ranges to the linker is invalid e g ACODE What is the range for this class Maybe you meant ACODE 0h 1fffh 442 missing address in A spec Linker The format of a a specification giving address ranges to the linker is invalid e g ACODE What is the range for this class Maybe you meant ACODE 0h 1fffh 443 bad low address in A spec Linker The low address given in a A specification is invalid it should be a valid number in decimal octal or hexadecimal radix The radix is specified by a trailing O for octal or H for HEX A leading 0x may also be used for hexadecimal Case in not important for any number or radix Decimal is default e g ACODE 1fff 3fffh Did you forget the radix ACODE 1fffh 3fffh 444 expected in A spec Linker There should be a minus sign between the high and low addresses in a A linker option e g AROM 1000h maybe you meant AROM 1000h 1fffh 445 bad high address in A spec Linker The high address given in a a specification is invalid it should be a valid num
349. ified The case of the letter in the destination operand in not important The numerical destination operands cannot be used with ASPIC 4 3 1 2 LONG JUMPS AND CALLS The assembler also recognizes several mnemonics which expand into regular PIC MCU assembly instructions The mnemonics are FCALL and LUMP These instructions expand into regular CALL and GOTO instructions respectively but also include the instructions necessary to set the bits in PCLATH for mid range devices or STATUS for baseline devices when the destination is in another page of program memory These additional mnemonics should be used where possible as they make assembler code independent of the final position of the routines that are to be executed If the call or jump is determined to be within the current page the additional code to set the PCLATH bits may be optimized away The following example shows an FCALL instruction in the assembly list file You can see that the FCALL instruction has expanded to five instructions In this example there are two bit instructions which set clear bits in the PCLATH register Bits are also set cleared in this register after the call to reselect the page which was selected before the fcall 13 0079 3021 movlw 33 14 007A 120A 158A 2000 fcall _phantom 120A 118A 15 OO7F 3400 retlw O 4 3 2 Statement Formats Legal statement formats are shown in Table Section Table 4 2 ASPIC statement formats The label field is optional a
350. igned int then that is the destination type otherwise the conversion is to unsigned int DS51865B page 80 2010 Microchip Technology Inc C Language Features Consider the following example unsigned char count a 0 b 50 ifia b lt 10 count t The unsigned char result of a b is 206 which is not less than 10 but both a and b are converted to signed int via integral promotion before the subtraction takes place The result of the subtraction with these data types is 50 which is less than 10 and hence the body of the if statement is executed If the result of the subtraction is to be an unsigned quantity then apply a cast For example ia unsigned aie Gar pk lt 10 count t The comparison is then done using unsigned int in this case and the body of the if would not be executed Another problem that frequently occurs is with the bitwise compliment operator This operator toggles each bit within a value Consider the following code nsigned char Counte c 0x55 if c OxAA Counters If c contains the value 0x55 it often assumed that c will produce O0xAA however the result is OxFFAA and so the comparison in the above example would fail The compiler may be able to issue a mismatched comparison error to this effect in some circum stances Again a cast could be used to change this behavior The consequence of integral promotion as illustrated above is that operations are not perfo
351. iles need to be generated if creating p code library files however the compiler is able to generate library files in one step if required See Section 2 7 44 OUTPUT type Specify Output File Type for specifying a library output file type 2 7 46 PRE Produce Preprocessed Source Code The PRE option is used to generate preprocessed C source files also called mod ules or translation units with an extension pre This may be useful to ensure that pre processor macros have expanded to what you think they should Use of this option can also create C source files which do not require any separate header files If the pre files are renamed to c files that can be passed to the compiler for subsequent pro cessing This is useful when sending files to a colleague or to obtain technical support without having to send all the header files which may reside in many directories If you wish to see the preprocessed source for the printf family of functions do not use this option The source for this function is customized by the compiler but only after the code generator has scanned the project for printf usage Thus as the PRE option stops compilation after the preprocessor stage the code generator will not execute and no printf code will be processed If this option is omitted the pre processed source for printf will be automatically retained in the file doprnt pre DS51865B page 36 2010 Microchip Technology Inc
352. ime asctime time localtime Return Value Returns a structure of type tm 2010 Microchip Technology Inc DS51865B page 199 HI TECH C for PIC10 12 16 User s Guide Note The example will require the user to provide the time routine as one cannot be supplied with the compiler See time for more detail ISALNUM ISALPHA ISDIGIT ISLOWER ET AL Synopsis include lt ctype h gt int isalnum char c int isalpha char c int isascii char c int iscntrl char c we Tsdigrit tehar o int islower char c Mie ITSPrIint ehar es rat 8G han ehar C ine Lsp net char g int isspace char c int isupper char c int isxdigit char c Description These macros defined in ctype hn test the supplied character for membership in one of several overlapping groups of characters Note that all except isascii are defined for c if isascii c is true or if c EOF is in 0 9 or a z or A Z isalnum c Cc isalpha c c is in A Z or a z isascii c c is a 7 bit ascii character iscntrl c c IS a control character isdigit c c is a decimal digit i1slower c cis in a z isprint c c iS a printing char isgraph c c iS anon space printable character ispunct c c is not alphanumeric isspace c c IS a space tab or newline isupper c cls in A Z isxdigit c c Is in 0 9 or a f or A F Example include lt ctype h gt include lt stdio h gt void main void char buf 80
353. implied For example OPT asm is the same as the previous example See the HELP option Section 2 7 32 HELP Display Help for more information about options and suboptions 2 7 1 C Compile to Object File The c option is used to halt compilation after executing the assembler leaving a relo catable object file as the output It is frequently used when compiling assembly source files using a make utility See Section 2 3 3 Multi step Compilation for more information on generating and using intermediate files 2 1 2 D Define Macro The D option is used to define a preprocessor macro on the command line exactly as if it had been defined using a define directive in the source code This option may take one of two forms Dmacro which is equivalent to define macro 1 placed at the top of each module compiled using this option or Dmacro text which is equivalent to define macro text where text is the textual substitution required Thus the command PLCC CHIP L6FS FI AA Ddebug Dburters 10 crest cc will compile test c with macros defined exactly as if the C source code had included the directives define debug 1 define buffers 10 Defining macros as C string literals requires bypassing any interpretation issues in the operating system that is being used To pass the C string hello world including the quote characters in the Windows environment use DMY_STRING hello wor
354. in void char buf 0X299 0x792 char end SE EEN e n2 inl strtol buf amp end 16 in2 strtol end NULL 16 printf decimals Slo Slan anil 102 See Also Surtod Return Value Returns a long int representing the value of the converted input string using the specified base STRTOK Synopsis include lt string h gt char strtok char s1 const char s2 DS51865B page 232 2010 Microchip Technology Inc Library Functions TAN Description A number of calls to st rtok breaks the string si which consists of a sequence of zero or more text tokens separated by one or more characters from the separator string s2 into its separate tokens The first call must have the string s1 This call returns a to the first character of the first token or NULL If no tokens were found The inter token separator character is overwrit ten by a null character which terminates the current token For subsequent calls to st rtok sl should be set to a NULL These calls start searching from the end of the last token found and again return a to the first character of the next token or NULL if no further tokens were found Example include lt stdio h gt finclud lt string h gt void main void char per Char dent Eh T Ts string OL words char sep_tok per St reok burty SepLeok while ptr NULL Pence Se na pee DEP SlLECOR NU She EE ee Retur
355. info file at line Assembler The chipinfo file contains non standard syntax at the specified line IERT 816 duplicate ARCH specification in chipinfo file at line Assembler Driver The chipinfo file has a processor section with multiple ARCH values Only one ARCH value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 817 unknown architecture in chipinfo file at line Assembler Driver An chip architecture family that is unknown was encountered when reading the chip INI file 818 duplicate BANKS for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple BANKS values Only one BANKS value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 819 duplicate ZEROREG for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple ZEROREG values Only one ZEROREG value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 820 duplicate SPAREBIT for in chipinfo file at line Assembler The chipinfo file has a processor section with multiple SPAREBIT values Only one SPAREBIT value is allowed If you have not manually edited the chip info file contact HI TECH Support with details 821 duplicate INTSAVE for in chipinfo file at line Assembler The chipinfo file has a
356. ing for MPLAB ICD or Assigned 1 to indicate that the MPLAB ICD 2 3 debugger code is generated for use with the Microchip MPLAB ICD 1 Assigned 2 for MPLAB ICD 2 3 for MPLAB ICD 3 __MPLAB_PICKITX__ If compiling for MPLAB PICKIT Assigned 1 to indicate that the 2 3 code Is generated for use with the Microchip MPLAB PICKIT 2 or PICKIT 3 DS51865B page 106 2010 Microchip Technology Inc C Language Features TABLE 3 11 PREDEFINED MACROS CONTINUED __MPLAB_REALICE___ If compiling for MPLAB Assigned 1 to indicate that the REALICE code is generated for use with the Microchip MPLAB REALICE _ROMSIZE Always To indicate how many words of program memory are available _EEPROMSIZE Always To indicate how many bytes of EEPROM are available _CHIPNAME When chip selected To indicate the specific chip type selected e f _16F877 _ FILE __ Always To indicate this source file being preprocessed LINE Always To indicate this source line number DATE Always To indicate the current date e g May 21 2004 _ TIME _ Always To indicate the current time e g 08 06 31 Each symbol if defined is equated to 1 unless otherwise stated 3 15 3 Pragma Directives There are certain compile time directives that can be used to modify the behavior of the compiler These are implemented through the use of the ANSI standard pragma facility The format of a pragma is pragma keyword options where keyword is one of a set of keywords s
357. ing the key letter with an 1 indicates that the value argument is a long integer The letter x prints out hexadecimal numbers using the upper case letters A F rather than a f as would be printed when using x When the alternate format is specified a leading zero will be supplied for the octal format and a leading Ox or OX for the HEX format s Print a string the value argument is assumed to be a character Ar most n charac ters from the string will be printed in a field m characters wide c The argument is assumed to be a single character and is printed literally Any other characters used as conversion specifications will be printed Thus will produce a single percent sign The vprintf function is similar to printf but takes a variable argument list rather than a list of arguments See the description of va start for more information on variable argument lists An example of using vprintf Is given below 2010 Microchip Technology Inc DS51865B page 213 HI TECH C for PIC10 12 16 User s Guide Example printf S4ds 23 yields Total 23 55 printf is 61x size where size is a long prints size as hexadecimal Printi ee DH yields Name al234567 EEN os e A yields xx 4 le Voriner example 7 include lt stdio h gt int error char S va list ap va_start ap s PEINET i My VOT Ine ts api putchar n va_end ap void main void
358. inke Char puf const ehar tity va be dp Description The sprintf function operates in a similar fashion to printf exceptthat instead of placing the converted output on the stdout stream the characters are placed in the buffer at ouf The resultant string will be null terminated and the number of characters in the buffer will be returned The vsprintf function is similar to sprintf O but takes a variable argument list rather than a list of arguments See the description of va_start for more informa tion on variable argument lists See Also printr s sSeane Return Value Both these routines return the number of characters placed into the buffer Synopsis include lt math h gt double sort double f Description The function sqrt implements a square root routine using Newton s approximation DS51865B page 220 2010 Microchip Technology Inc Library Functions SRAND Example include lt math h gt dree lide lt stdio h gt void main void double i for i 0 i lt 20 0 i 1 0 Pranere root of rlf E AER Ee See Also exp Return Value Returns the value of the square root Note A domain error occurs if the argument is negative Synopsis include lt stdlib h gt void srand unsigned int seed Description The srana function initializes the random number generator accessed by rand with the given seea This provides a mecha
359. input case a oops can t use variable as part of a case label APUC a a 189 illegal type for array dimension Parser An array dimension must be either an integral type or an enumerated value int array 12 5 oops twelve and a half elements eh 190 illegal type for index expression Parser An index expression must be either integral or an enumerated value e g ine ip array EE i array 3 5 WEE DEEN s exactly which element do you mean 191 cast type must be scalar or void Parser A typecast an abstract type declarator enclosed in parentheses must denote a type which is either scalar i e not an array or a structure or the type void e g lao ss long anpute 7 060s Maybe Lip rong input 7 2010 Microchip Technology Inc DS51865B page 251 HI TECH C for PIC10 12 16 User s Guide 192 undefined identifier Parser This symbol has been used in the program but has not been defined or declared Check for spelling errors if you think it has been defined TP a 193 not a variable identifier Parser This identifier is not a variable it may be some other kind of object e g a label 194 expected Parser A closing parenthesis was expected here This may indicate you have left out this character in an expression or you have some other syntax error The error is flagged on the line at which the code first starts to make no sense T
360. int i gets buf i 0 while isalnum buf i SE burii SOs SE Beet eres is the wordin Duty DS51865B page 200 2010 Microchip Technology Inc Library Functions ISDIG ITOA See Also toupper tolower toascii Synopsis include lt ctype h gt ine ee 10G C Description The isdig function tests the input character c to see if is a decimal digit 0 9 and returns true is this is the case false otherwise Example include lt ctype h gt void main void d char buri 0 if isdig buf 0 PrinkEe type detected ns See Also isdigit listed under isalnum Return Value Zero if the character is a decimal digit a non zero value otherwise Synopsis include lt stdlib h gt char itoa char buf int val int base Description The function itoa converts the contents of val into a string which is stored into buf The conversion is performed according to the radix specified in base buf IS assumed to reference a buffer which has sufficient space allocated to it Example include lt stdlib h gt include lt stdio h gt void main void char buf 10 itoa buf L234 6 printi p ffer holds sei Duri 2010 Microchip Technology Inc DS51865B page 201 HI TECH C for PIC10 12 16 User s Guide See Also strtol utoa Lttoa ultoa Return Value This routine returns a copy of the buffer into which the resul
361. ion but can be quali fied static allowing them to be defined locally within a function as in vord myFune void 4 static near unsigned char local_fred Note that the compiler may store some temporary objects in the common memory so not all of this space may be available for user defined variables If the PICC option STRICT is used this type qualifier is changed to near 3 4 7 3 BANKO BANK1 BANK2 AND BANK3 TYPE QUALIFIERS The bankO bank1 bank and bank3 type qualifiers are recognized by the compiler and allow some degree of control of the placement of objects in the PIC MCU data memory banks They can be used to allow portability of legacy code or to define C objects that are assumed to be located in certain memory banks by hand written assembly code The compiler automatically allocates variables to all data banks so these qualifiers are not normally needed 2010 Microchip Technology Inc DS51865B page 69 HI TECH C for PIC10 12 16 User s Guide These qualifiers are controlled by the compiler option ADDRQUAL which determines their effect see Section 2 7 18 ADDRQUAL Set Compiler Response to Memory Qualifiers Based on this option s settings these qualifiers may be binding or ignored which is the default operation Qualifiers which are ignored will not produce an error or warning but will have no effect Objects qualified with any of these qualifiers cannot be auto or parameters to a func tion
362. ion of the quicksort algorithm It sorts an array of nel items each of length width bytes located contiguously in memory at base The argument func is a toa function used by gsort to compare items It calls func with s to two items to be compared If the first item is considered to be greater than equal to or less than the second then func should return a value greater than zero equal to zero or less than zero respectively Example Finclude lt stdio h gt include lt stdlib h gt int array s 567 23 456 1024 17 567 66 JI int sortem Const void Pl COnSt wold P2 BERUF asa EE v ee og void main void register int i qsort aray sizeof array sizeof array 0 sizeof array O sortem for i 0 i sizeof array sizeof array 0 i rinti aye each TE p tchar An y Note The function parameter must be a to a function of type similar to int func const void const void i e it must accept two const void parameters and must be prototyped DS51865B page 216 2010 Microchip Technology Inc Library Functions RAND ROUND Synopsis tinclude lt stdlib h gt int rand void Description The rana function is a pseudo random number generator It returns an integer in the range 0 to 3276 7 which changes in a pseudo random fashion on each call The algo rithm will produce a deterministic sequence if started from the same point The starting
363. ions See Also ctime asctime Return Value The time contained in the tm structure represented as the number of seconds since the 1970 Epoch or 1 if this time cannot be represented MODF Synopsis include lt math h gt double modf double value double iptr Description The mod f function splits the argument value into integral and fractional parts each having the same sign as value For example 3 17 would be split into the integral part 3 and the fractional part 0 17 The integral part is stored as a double in the object pointed to by iptr Example include lt math h gt include lt stdio h gt void main void double i_val f_val f_val modf 3 17 amp i_val Return Value The signed fractional part of value NOP Synopsis include lt htc h gt NOP Description Execute NOP instruction here This is often useful to finetune delays or create a handle for breakpoints The NOP instruction is sometimes required during some sensitive sequences in hardware 2010 Microchip Technology Inc DS51865B page 211 HI TECH C for PIC10 12 16 User s Guide Example include lt htc h gt void crude_delay unsigned char x while x NOP J y Do nothing Tor Z cycles NOP NOP POW Synopsis rinclude lt math ba double pow double f double p Description The pow function raises its first argument f to the power
364. irective is different from a previous PSECT directive e g psect spdata class RAM reloc 4 elsewhere psect spdata class RAM reloc 8 868 argument to delta psect flag must specify a positive constant Assembler The parameter to the PSECT assembler directive s DELTA option must be a positive constant number e g PSECT text class CODE delta 2 negative delta value doesn t make sense DS51865B page 312 2010 Microchip Technology Inc 869 psect flag delta redefined Assembler The DELTA option of a psect has been redefined more than once in the same module 870 argument to pad psect flag must specify a positive constant Assembler The parameter to the PSECT assembler directive s PAD option must be a non zero positive integer 871 argument to space psect flag must specify a positive constant Assembler The parameter to the PSECT assembler directive s space option must be a positive constant number e g PSECT text class CODE space l space values start at zero 872 psect flag space redefined Assembler The space flag to the PSECT assembler directive is different from a previous PSECT directive e g psect spdata class RAM space 0 elsewhere psect spdata class RAM space 1 873 a psect may only be in one class Assembler You cannot assign a psect to more than one class The psect was defined differently at this point than when it was defined elsewhere
365. irective sre 118 processor selection ccccsseeeeeceeseeeecesseeeesaaeeess 146 dlreielccivbe ef e 122 program entry point cccseeeecceeeeeeeeceesseesseeeeeeeens 95 program Memory GEET 77 128 OJSC nn EE 17 projects assembly Ties 14 DUNG NAG EE 13 incremental ee E 13 CEBUANO krsni a acetates Vt eel rat 13 psect EI eebe 71 93 94 EE 91 EI 91 CONIO BEE 91 2010 Microchip Technology Inc e Le 74 93 DUSCHEN 215 et EE 71 93 o SIE 125 eeprom EELER eee 91 qsort function EEN 21 6 PeDOM Ee e 51 qualifier grouping TANE va ciated tual EEN 1 23 auto EE 13 82 EE ER 91 E 69 doc 92 DANK ue 69 Loi EE 92 Eiere 69 intentry eleng whee A E EE let ot ot aT 92 bank3 ANES eal EE EE E GO jmp_tab ENEE ene eee git EE 92 bankx Sgr Siac ost oa ENNEN NEES EEN CN NN NENNEN Gere NEE ERC NR 29 maintext EEN 83 92 const EE 67 78 powerup EE EE 92 95 control E E er T A E E A E A E EE 53 ER e chs caetiea aoe analog setnalabeastascsuncatcaeues 92 PILOT le E 8 ERTE 92 NOAM EE 29 69 SNIS e Geena ce 92 PErSIStEN EEN 69 94 95 stringtext BCEE Pe ERT eer SET Se a Eee 92 special ERKANNT 68 4 0 83 92 98 109 KETTEN 68 103 121 OL TO EE 84 93 qualifiers PSECT directive eneee 127 and auto varlables ENEE 73 PSECT flag and SIFUCIUIES canan a Ae Cen 59 Ge AEEA EEA ere 127 guler ModE EE 28 Dea need eeeuse eae nes eau ees 127 R CAS EE 128 oe radix specifiers SE E ISS CIMDIY oere aa E o TAES 121 A NM i ee ght eg ee ery
366. irst raw cross ref information file specified 6 4 3 Llen specify the length of the paper on which the listing is to be produced e g if the listing is to be printed on 55 line paper you would use a 155 option The default is 66 lines 6 4 4 Ooutfile Allows specification of the output file name By default the listing will be written to the standard output and may be redirected in the usual manner Alternatively out file may be specified as the output file name 6 4 5 Pwidth This option allows the specification of the width to which the listing is to be formatted e g P132 will format the listing for a 132 column printer The default is 80 columns 6 4 6 Sstoplist The s option should have as its argument the name of a file containing a list of sym bols not to be listed in the cross reference Symbols should be listed one per line in the file Use the C domain symbols Multiple stoplists may be supplied with multiple S options DS51865B page 160 2010 Microchip Technology Inc Utilities 6 4 7 X prefix The x option allows the exclusion of symbols from the listing based on a prefix given as argument to X For example if it was desired to exclude all symbols starting with the character sequence xyz then the option Xxyz would be used If a digit appears in the character sequence then this will match any digit in the symbol e g xx0 would exclude any symbols starting with the letter x followed by a digit
367. is include lt htc h gt void flash_copy const unsigned char source_addr unsigned char length unsigned short dest_addr Description This utility function is useful for copying a large section of memory to a new location in Flash memory Note it is only applicable to those devices which have an internal set of Flash buffer registers 2010 Microchip Technology Inc DS51865B page 193 HI TECH C for PIC10 12 16 User s Guide When the function is called it needs to be supplied with a const tothe source address of the data to copy The may point to a valid address in either RAM or Flash memory A length parameter must be specified to indicate the number of words of the data to be copied Finally the Flash address where this data is destined must be specified Example include lt htc h gt const unsigned char ROMSTRING Di void main void const unsigned char ptr amp ROMSTRING 0 flash_copy ptr 5 0x70 ka See Also EEPROM _READ EEPROM_WRITE FLASH_READ FLASH_WRITE Note This function is only applicable to those devices which use internal buffer registers when writing to Flash Ensure that the function does not attempt to overwrite the section of program memory from which it is currently executing and extreme caution must be exercised if modifying code at the device s reset or interrupt vectors A reset or interrupt must not be triggered while this sector is in erasu
368. is zero This sets the bit type apart from the C99 Standard Gool which is a boolean type nota 1 bit wide integer The __Boo1 type is not supported on the HI TECH C compiler If you want to set a bit variable to be 0 or 1 depending on whether the larger integral type is zero false or non zero true use the form bitvar data 0 The psects in which bit objects are allocated storage are declared using the bit PSECT directive flag see Section 4 3 9 3 PSECT All addresses specified for bit objects and psects will be bit addresses Take care when comparing these addresses to byte addresses used by all other variables If the PICC flag STRICT is used the bit keyword becomes unavailable 3 4 2 Floating Point Data Types The HI TECH C compiler supports 24 and 32 bit floating point types Floating point is implemented using either a IEEE 754 32 bit format or a modified truncated 24 bit form of this Table 3 3 shows the data types and their corresponding size and arithmetic type TABLE 3 3 FLOATING POINT DATA TYPES Size bits Arithmetic Type SECHER For both float and double values the 24 bit format is the default The options FLOAT 24 and DOUBLE 24 can also be used to specify this explicitly The 32 bit format is used for double values if the DOUBLE 32 option is used and for float values if FLOAT 32 Is used Variables may be declared using the float and double keywords respectively to hold values of the
369. it is desired to produce a symbol only object file that can be used again in a subsequent linker run to supply symbol values The F option will suppress data and code bytes from the output file leaving only the symbol records This option can be used when part of one project i e a separate build is to be shared with other as might be the case with a bootloader and application The files for one project are compiled using this linker option to produce a symbol only object file this is then linked with the files for the other project 2010 Microchip Technology Inc DS51865B page 143 HI TECH C for PIC10 12 16 User s Guide 5 2 7 Gspec When linking programs using segmented or bank switched psects there are two ways the linker can assign segment addresses or selectors to each segment A segment is defined as a contiguous group of psects where each psect in sequence has both its link and load address concatenated with the previous psect in the group The segment address or selector for the segment is the value derived when a segment type relocation is processed by the linker By default the segment selector will be generated by dividing the base load address of the segment by the relocation quantum of the segment which is based on the reloc flag value given to psects at the assembler level see Section 4 3 9 3 10 Reloc The G option allows an alternate method for calculating the segment selector The argument to G is a
370. ivisor signs In the case where the second operand is zero division by zero the result will always be zero TABLE A 1 INTEGRAL DIVISION Dividend omiso Setet Remainder EE E E E E E E EE EE A 5 5 The result of a right shift of a negative valued signed integral type 6 3 7 The right shift operator sign extends signed values Thus an object with the signed int value 0x0124 shifted right one bit will yield the value 0x0092 and the value 0x8024 shifted right one bit will yield the value 0xC012 Right shifts of unsigned integral values always clear the most significant bit of the result Left shifts lt lt operator signed or unsigned always clear the least significant bit of the result Ab FLOATING POINT G 3 6 A 6 1 The representations and sets of values of the various types of floating point numbers 6 1 2 5 see Section 3 4 2 Floating Point Data Types A 6 2 The direction of truncation when an integral number is converted to a floating point number that cannot exactly represent the original value 6 2 1 3 The integer value is rounded to the nearest floating point value that can be repre sented A 6 3 The direction of truncation or rounding when a floating point number is converted to a narrower floating point number 6 2 1 4 The floating point number is truncated to the smaller floating point number A 7 ARRAYS AND POINTERS G 3 7 A 7 1 The type of integer required to hold the maximum
371. king over the others This all minimizes disk I O when linking It should be noted that the library format is not a general purpose archiving mechanism as is used by some other compiler systems This has the advantage that the format may be optimized toward speeding up the linkage process 6 2 2 Using the Librarian Library files can be built directly using the command line driver see Section 2 7 44 OUTPUT type Specify Output File Type In this case the driver will invoke LIBR with the appropriate options saving you from having to use the librar ian directly You may wish to perform this step manually or you may need to look at the contents of library files for example This section shows how the librarian can be exe cuted from the command line The librarian cannot be called from IDEs such as MPLAB IDE The librarian program is called LIBR and the formats of commands to it are as follows LIBR options amp bite wtop fitelwel Prle2z spl ee LIBR TODCLOnS A biie tip Fale eer Filer Obs aew 2010 Microchip Technology Inc DS51865B page 155 HI TECH C for PIC10 12 16 User s Guide The options are zero or more librarian options which affect the output of the program These are listed in Table 6 1 TABLE 6 1 LIBRARIAN COMMAND LINE OPTIONS wn SSS cty pag with OOO OO OO OO Cem Suppress non fatal errors A key letter k denotes the command requested of the librarian replacing extracting or deleting m
372. l variables See Section 3 13 3 1 Equivalent Assembly Symbols for a complete description of mappings between C and assembly identifiers An assembly routine is required which can add an 8 bit quantity passed to the routine with the contents of PORTB and return this as an 8 bit quantity Most compiler generated executable code is placed in psects called text n where n is a number see Section 3 10 1 Compiler generated Psects We will create our own text psect based on the psect the compiler uses Check the assembly list file to see how the text psects normally appear You may see a psect such as the following generated by the code generator PSECT text0O local class CODE delta 2 See Section 4 3 9 3 PSECT for detailed information on the flags used with the PSECT assembler directive This psect is called texto It is flagged local which means that it is distinct from other psects with the same name It lives in the CODE class This flag is important as it means it will be automatically placed in the area of memory set aside for code With this flag in place you do not need to adjust the default linker options to have the psect correctly placed in memory The last option the delta value is also very important This indicates that the memory space in which the psect will be placed is word addressable value of 2 The PIC10 12 16 program memory space is word addressable the data space is byte addressable We simply need t
373. label but not make a contribution to the output file Uninitialized const objects are often made absolute see Section 3 5 4 Absolute Variables Here are examples of const object definitions const char I0type A initialized const object Const Ghar butter 10s I just define a label The data held by non auto const variables is placed in the strings psect See Section 3 10 1 Compiler generated Psects for the limitations associated with where this psect can be linked See Section 3 13 3 1 Equivalent Assembly Symbols for the equivalent assembly symbols that are used to represent const qualified variables in program memory 3 5 3 1 SIZE LIMITATIONS OF CONST VARIABLES Arrays of any type including arrays of aggregate types can be qualified const and placed in the program memory So too can structure and union aggregate types see 3 4 3 Structures and Unions These objects can often become large in size and may affect memory allocation For Baseline PIC devices the maximum size of a single const object is 255 bytes However you can define as many const objects as required provided the total size does not exceed the available program memory size of the device Note that as well as other program code there is also code required to be able to access const qualified data in the program memory space Thus you may need additional program memory space over the size of the object itself This additional code to
374. ld you must include the quote characters around the entire option as there is a space character in the macro definition Under Linux or Mac OS X use DMY STRING hello world see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 3 E Redirect Compiler Errors to a File This option has two purposes The first is to change the format of displayed messages The second is to optionally allow messages to be directed to a file as some editors do not allow the standard command line redirection facilities to be used when invoking the compiler The general form of messages produced with the E option in force is DS51865B page 24 2010 Microchip Technology Inc PICC Command line Driver filename line_number message number message string type If a filename is specified immediately after it is treated as the name of a file to which all messages errors warnings etc will be printed For example to compile x c and redirect all errors to x err use the command PICC CHIP 16F877AA Ex err x c The E option also allows errors to be appended to an existing file by specifying an addition character at the start of the error filename for example PLCC CHIP L6P TIAA EFXverr yaC If you wish to compile several files and combine all of the errors generated into a single text file use the E option to create the file then use E when compiling all the other
375. le CR test crf PICC will invoke CREF to process the cross reference information into the listing file in this case test crf If multiple source files are to be included in the cross reference listing all must be com piled and linked with the one PICC command For example to generate a cross refer ence listing which includes the source modules main c modulel c and nvram c compile and link using the command PICC CHIP 16F877AA CR main crf main c modulel c nvram c Thus this option cannot be used when using any compilation process that compiles each source file separately using the c or PASS1 options Such is the case for most IDEs including MPLAB IDE and make utilities See Section 6 4 Cref for information on the CREF utility 2 7 24 DEBUGGER Select Debugger Type This option is intended for use for compatibility with development tools which can act as a debugger PICC supports several debuggers and using this option will configure the compiler to conform to the requirements of that selected The possible selections for this option are defined in Table 2 8 TABLE 2 8 SELECTABLE DEBUGGERS For example PICC CHIP 16F877AA DEBUGGER icd2 main c Choosing the correct debugger is important as they can use memory resources which might be used by the project if this option is omitted Such a conflict would lead to run time failure If the debugging features of the development tool are not to be used for examp
376. le include lt string h gt include lt stdio h gt void main void char buffer 256 Char gT S27 Surcpy buUrtier vor Line sl buffer S2 Tsx ENO Of Line strcat s1 s2 printf d n strlen buffer prancEet ATSA Tn urter DS51865B page 222 2010 Microchip Technology Inc Library Functions See Also Stropy i stremo St rncat strlen E Return Value The value of s1 is returned STRCHR STRICHR Synopsis include lt string h gt Char strchr const char s int c char strichr const char s int c Description The strchr function searches the string s for an occurrence of the character c If one is found a to that character is returned otherwise NULL is returned The strichr function is the case insensitive version of this function Example include lt strings h gt include lt stdio h gt void main void Statre char temp Ho DEE char c ses if strchr temp c printi zO was found an string n g else printf character was found in Strang See Also SErPLChe tt Sse Lent Seroemp Return Value A to the first match found or NULL if the character does not exist in the string Note Although the function takes an integer argument for the character only the lower 8 bits of the value are used 2010 Microchip Technology Inc DS51865B page 223 HI TECH C for PIC10 12 16 User s Guide STRCMP S
377. le As indicated in the diagram CPP and then P1 are executed to form this intermediate file For clarity the CPP and P1 applications have been represented by the same block in the diagram In the second stage the code generator reads in all the intermediate p code files and produces a single assembly file output which is then passed to the subsequent appli cations that produce the final output The desirable attribute of this method of compilation is that the code generator which is the main application that transforms from the C to the assembly domain sees the entire project source code via the intermediate files Traditional compilers have always used intermediate files that are object files obj extension output by the assembler These intermediate object files are then combined by the linker and further processed to form the final output This method of compilation is shown in Figure 2 3 and shows that the code generator is executed once for each source file Thus the code generator can only analyze that part of the project that is con tained in the source file currently being compiled Using object files as the intermediate file format with HI TECH C Compiler for PIC10 12 16 MCUs will defeat many features the compiler uses to optimize code Always use p code files as the intermediate file format if you are using a make system to build projects FIGURE 2 3 THE TRADITIONAL COMPILATION SEQUENCE l Intermediate files N prepr
378. le may consist of several source and header files A module is also often referred to as a translation unit These terms can also be applied to assembly files as they too can include other header and source files 2 3 THE COMPILATION SEQUENCE 2 3 1 The Compiler Applications The main internal compiler applications and files are illustrated in Figure 2 1 You can consider the large underlying box to represent the whole compiler which is controlled by the command line driver PICC You may be satisfied just knowing that C source files shown on the far left are passed to the compiler and the resulting output files shown here as a HEX and COFF debug file on the far right are produced how ever internally there are many applications and temporary files being produced An understanding of the internal operation of the compiler while not necessary does assist with using the tool The driver will call the required compiler applications These applications are shown as the smaller boxed inside the large driver box The temporary file produced by each application can also be seen in this diagram 2010 Microchip Technology Inc DS51865B page 9 HI TECH C for PIC10 12 16 User s Guide FIGURE 2 1 COMPILER APPLICATIONS AND FILES N N y assembly p code p1 pp code f as source libraries files files processed relocatable files module object file Command line driver C source files UN c gt preprocessor pme gg
379. le the MPLAB ICD 3 is only being used as a programmer then the debugger option can be set to none aS no memory resources will be used by the tool when operating in this way see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2010 Microchip Technology Inc DS51865B page 31 HI TECH C for PIC10 12 16 User s Guide 2 7 25 DOUBLE Select kind of Double Types This option allows the kind of double precision floating point types to be selected By default the compiler will choose the truncated IEEE754 24 bit implementation for dou ble types With this option this can be changed to the full 32 bit IEEE754 implemen tation see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 26 ECHO Echo command line before processing Use of this option will result in the driver command line being echoed to the stdout stream before compilation commences Each token of the command line will be printed on a separate line and will appear in the order in which they are placed on the com mand line 2 7 27 ERRFORMAT Define Format for Compiler Messages If the ERRFORMAT option is not used the default behavior of the compiler is to dis play any errors in a human readable form This standard format is perfectly accept able to a person reading the error output but is not generally usable with environments which support compiler erro
380. led with the HEX code 34h 2010 Microchip Technology Inc DS51865B page 171 HI TECH C for PIC10 12 16 User s Guide 6 6 1 18 STRPACK This option performs the same function as STRING but with two important differences Firstly only the lower seven bits from each character are stored Pairs of 7 bit charac ters are then concatenated and stored as a 14 bit word rather than in separate bytes This is known as string packing This is usually only useful for devices where program Space is addressed as 14 bit words PIC10 12 16 devices The second difference is that STRING s t specifier is not applicable with the STRPACK option na DS51865B page 172 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 7 Library Functions The functions and preprocessor macros within the standard compiler library are alpha betically listed in this chapter The synopsis indicates the header file in which a declaration or definition for function or macro is found It also shows the function prototype for functions or the equivalent prototype for macros CONFIG Synopsis include lt htc h gt CONFIG data Description This macro is used to program the configuration fuses that set the device s operating modes The macro assumes the argument is a16 bit value which will be used to program the configuration bits 16 bit masks have been defined to describe each progra
381. ler automatically produces signatures for all functions A signature is a 16 bit value computed from a combination of the function s return data type the number of its parameters and other information affecting the calling sequence for the function This signature is output in the object code of any function referencing or defining the function At link time the linker will report any mismatch of signatures HI TECH C is only likely to issue a mismatch error from the linker when the routine is either a precompiled object file or an assembly routine Other function mismatches are reported by the code generator lt is sometimes necessary to write assembly language routines which are called from C using an extern declaration Such assembly language functions should include a signature which is compatible with the C prototype used to call them The simplest method of determining the correct signature for a function is to write a dummy C func tion with the same prototype and check the assembly list file using the ASMLIST option see Section 2 7 17 ASMLIST Generate Assembler List Files For example suppose you have an assembly language routine called _ widget which takes two int arguments and returns a char value The prototype used to call this function from C would be extern char widget int int Where a call to __widget is made in the C code the signature for a function with two int arguments and a char return value would be generat
382. lified as const but there is no initial value supplied at the def inition As this object cannot be written by the C program this may imply the initial value was accidently omitted 747 unrecognized option to Z Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 748 variable may be used before set Code Generator This variable may be used before it has been assigned a value Since it is an auto vari able this will result in it having a random value e g void main void int aj if a oops a has never been assigned a value process WW 749 unknown register name used with pragma Linker This is an internal compiler error Contact HI TECH Software technical support with details 750 constant operand to or amp amp Code Generator One operand to the logical operators or amp amp is a constant Check the expression for missing or badly placed parentheses This message may also occur if the global opti mizer is enabled and one of the operands is an auto or static local variable whose value has been tracked by the code generator e g bAt as a 6 ari Cay Il b a is 6 therefore this is always true b 751 arithmetic overflow in constant expression Code Generator A constant expression has been evaluated by the code generator that has resulted in a value that is too big for the type of the expression
383. lifiers to the right of the i e next to the pointer s name relate to the pointer variable itself The type and any qualifiers to the left of the relate to the pointer s tar gets This makes sense since it is also the operator that dereferences a pointer which allows you to get from the pointer variable to its current target DS51865B page 60 2010 Microchip Technology Inc C Language Features Here are three examples of pointer definitions using the volatile qualifier The fields in the definitions have been highlighted with spacing volatile int EE ENE z yolatile ave j volatile int volatile vivp The first example is a pointer called vip It contains the address of int objects that are qualified volatile The pointer itself the variable that holds the address is not volatile however the objects that are accessed when the pointer is derefer enced are treated as being volatile In other words the target objects accessible via the pointer may be externally modified The second example is a pointer called ivp which also contains the address of int objects In this example the pointer itself is volatile that is the address the pointer contains may be externally modified however the objects that can be accessed when dereferencing the pointer are not volatile The last example is of a pointer called vivp which is itself qualified volatile and which also holds the address of volatile objects Be
384. lso produces a warning if the maximum stack depth appears to have been exceeded For the above reasons this warning too is intended to be a only a guide to potential stack problems DS51865B page 140 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 5 Linker 5 1 INTRODUCTION This chapter describes the theory behind and the usage of the linker The application name of the linker is HLINK In most instances it will not be necessary to invoke the linker directly as the compiler driver PICC will automatically execute the linker with all necessary arguments Using the linker directly is not simple and should be attempted only by those with a sound knowledge of the compiler and linking in gen eral The compiler often makes assumptions about the way in which the program will be linked If the psects are not linked correctly code failure may result If it is absolutely necessary to use the linker directly the best way to start is to copy the linker arguments constructed by the compiler driver and modify them as appropriate This will ensure that the necessary startup module and arguments are present 5 2 OPERATION A command to the linker takes the following form hlink options files The options are zero or more linker options each of which modifies the behavior of the linker in some way The files is one or more object files and zero or more object code library names
385. luacene 82 FUNCTION duplication cccccseseeeeeeeeeeeeeeeeeeeeanaaeeeeess 89 GIS ln e EE 90 function POINTE E 63 functions ler 83 argument passing essers sinia a e iaae 84 calling GCONVE TON E 86 Creating prototypes ccccseeeccsseseeeceeeseeeeeeees 37 Hale d re EE 87 placing at specific addresses nn00000nnnnn 108 Prototype S iscri TEE 113 135 retur Bel 86 signature S sisane E 113 135 SEH run HE 84 stack USAC EE 86 Se 83 written IN assembler A 97 G get Cal data function eaaannnnnannnannnnnnannnnnnnnnnne 198 getchar ue EE 197 GETS Di Le BEE 198 GLOBAL directive cccccccesseeeeeeeeeeeeees 98 123 126 global optimization cccceceseeeeeeeeeeseeeeeeeeeaes 35 104 global PSEC T Hagae ete 128 gmUme UNCION EE 199 H hardware AGU ZONOP Geet ee Sa 95 MO et 96 ENEE 48 50 seden NEE 25 hex files address algnment 39 168 addres ES aena aa N 128 EE N 39 167 embedding serial numbere 171 embedding etmges 171 extended address record 169 filing unused memonm ccccccceeeeeeeeeeaeaeeeeeees 32 Leit EE 169 MUDIE EE 143 record engt 39 168 169 renamihg EE 27 SLAS UCS saringane aR 170 hexadecimal constants ST le E 121 DS51865B page 356 HEXMATE application onnnnaennnnnennnnnennenneennne 11 165 HEXMATE option o E E E te 166 ADDRESSING ssccscecsssucearecs deeg 167 EISE 167 EE 167 file SPECIFICATIONS cceseeceecceeeeceesseeeeeaeeees 166
386. lved This can happen if the checksum result was to be stored within the address range of the checksum calculation 948 checksum result width must be between 1 and 4 bytes Hexmate The requested checksum byte size is illegal Checksum results must be within 1 to 4 bytes wide Check the parameters to the CKSUM option 949 start of checksum range must be less than end of range Hexmate The CKSUM option has been given a range where the start is greater than the end The parameters may be incomplete or entered in the wrong order 951 start of fill range must be less than end of range Hexmate The FILL option has been given a range where the start is greater than the end The parameters may be incomplete or entered in the wrong order 953 unknown HELP sub option Hexmate Invalid sub option passed to HELP Check the spelling of the sub option or use HELP with no sub option to list all options 2010 Microchip Technology Inc DS51865B page 317 HI TECH C for PIC10 12 16 User s Guide 956 SERIAL value must be between 1 and bytes long Hexmate The serial number being stored was out of range Ensure that the serial number can be stored in the number of bytes permissible by this option 958 too many input files specified file maximum Hexmate Too many file arguments have been used Try merging these files in several stages rather than in one command 960 unexpected record type on line
387. mbol table in the map file will be sorted by name The N option will cause it to be sorted numerically based on the value of the symbol The Ns and Nc options work similarly except that the symbols are grouped by either their space value or class 5 2 17 Oouttfile This option allows specification of an output file name for the linker The default output file name is 1 obj Use of this option will override the default 5 2 18 Pspec Psects are linked together and assigned addresses based on information supplied to the linker via P options The argument to the P option consists basically of comma separated sequences thus Ppsect lnkaddr min ldaddrt min psect lnkaddr ldaddr There are several variations but essentially each psect is listed with its desired link and load addresses and a minimum value All values may be omitted in which case a default will apply depending on previous values If present the minimum value min is preceded by a sign It sets a minimum value for the link or load address The address will be calculated as described below but if it is less than the minimum then it will be set equal to the minimum The link and load addresses are either numbers or the names of other psects classes or special tokens lf the link address is a negative number the psect is linked in reverse order with the top of the psect appearing at the specified address minus one Psects following a negative address
388. mentation does use ASCII as the character representation 2010 Microchip Technology Inc DS51865B page 55 HI TECH C for PIC10 12 16 User s Guide A function may return abit object by using the bit keyword in the function s prototype in the usual way The 1 or 0 value will be returned in the carry flag in the STATUS reg ister The bit variables behave in most respects like normal unsigned char variables but they may only contain the values 0 and 1 and therefore provide a convenient and effi cient method of storing flags Eight bit objects are packed into each byte of memory storage so they don t consume large amounts of internal RAM Operations on bit objects are performed using the single bit instructions osf and bcf wherever possible thus the generated code to access bit objects is very effi cient lt is not possible to declare a pointer to bit types or assign the address of abit object to any pointer Nor is it possible to statically initialize bit variables so they must be assigned any non zero starting value i e 1 in the code itself Bit objects will be cleared on startup unless the bit is qualified persistent When assigning a larger integral type to a bit variable only the Least Significant bit is used For example if the bit variable bitvar was assigned as in the following int data 0x54 bit bitvar bitvar data it will be cleared by the assignment since the Least Significant bit of data
389. mitations in where these psects can be moved to See Section 3 10 Psects for more information on changing the default linker options for these psects 3 5 4 Absolute Variables Most variables can be located at an absolute address by following its declaration with the construct address where address is the location in memory where the vari able is to be positioned Such a variables is known as an absolute variables DS51865B page 78 2010 Microchip Technology Inc C Language Features 3 5 4 1 ABSOLUTE VARIABLES IN DATA MEMORY Absolute variables are primarily intended for equating the address of a C identifier with a special function register but can be used to place ordinary variables at an absolute address in data memory For example volatile unsigned char Portvar 0x06 will declare a variable called Portvar located at 06h in the data memory The compiler will reserve storage for this object and will equate the variable s identifier to that address The compiler generated assembler will include a line similar to _Portvar EQU 06h No auto variables can be made absolute as they are located in a compiled stack See Section 3 5 2 2 1 Compiled Stack Operation The compiler does not make any checks for overlap of absolute variables with other absolute variables so this must be considered when choosing the variable locations There is no harm in defining more than one absolute variable to live at the same addres
390. mmable attribute available on each device These masks can be found in the chip specific header files included via SDE E Multiple attributes can be selected by ANDing them together Example include lt htc h gt __CONFIG RC amp UNPROTECT void main void See also _ EEPROM_DATA TDLOC ___ IDLOC7 2010 Microchip Technology Inc DS51865B page 173 HI TECH C for PIC10 12 16 User s Guide __DELAY_MS DELAY US Synopsis __delay_ms x request a delay in milliseconds __delay_us x request a delay in microseconds Description As it is often more convenient request a delay in time based terms rather than in cycle counts the macros de lay_ms x and__delay_us x are provided These mac ros simply wrap around _delay n and convert the time based request into instruction cycles based on the system frequency In order to achieve this these macros require the prior definition of preprocessor symbol _XTAL_FREQ This symbol should be defined as the oscillator frequency in Hertz used by the system An error will result if these macros are used without defining oscillator frequency symbol or if the delay period requested is too large See also delay __EEPROM DATA Synopsis include lt htc h gt EEPROM_DATA a b c d e f g h Description This macro is used to store initial values into the device s EEPROM registers at the time of programming The macro must be given blocks of
391. move t0 tl oops these registers cannot be used in the 16 bit instruction set 1335 instruction is deprecated Assembler An assembly instruction was used that is deprecated erh EE ECK E OOS This Instruction 1S ho longer supported 1336 a psect may belong to only one ISA Assembler Psects that have a flag that defines the allowed instruction set architecture A psect has been defined whose ISA flag conflicts with that of another definition for the same psect mytext global isa mips32r2 reloc 4 delta 1 mytext global isa mipsl6e reloc 4 delta 1 COPS is this the right psect name or the wrong ISA value 1337 instruction macro is not part of psect ISA Assembler An instruction from one instruction set architecture has been found in a psect whose ISA flag specifies a different architecture type psect my_text 1isa mipsl6e reloc 4 Pose TOFEL d ODS Chis 36 4 B2 b re anstruction 1338 operand must be a bit value Assembler The constant operand to an instruction is too large to fit in the instruction field width psect my_text 1isa mips32r2 reloc 4 Li SCO pOxI2 3456760 ft Oops this constant as too large 1339 operand must be a bit value Assembler The constant operand to an instruction is too large to fit in the instruction field width and must have the indicated type addiu a3 a3 0x123456 Fe COpSs the constant operand to this MIPS16E instruction is
392. mp amp bitwise AND operator c cccccescesesesseseseseeseseeees 121 LXXXX type SYMDOIS EE 114 preprocessor operaior 104 MPLAB_ICD__ meng EE 106 107 preprocessor Operator eeeeeeeeeeeeieeeeeeee 104 Pl MACO En 106 ASIN CIRC EE 99 _ powerdown variable EE 95 define directive ccccccccccssscsessesssessssseceesssesesseesees 24 fesetbits variable EE 95 endasm directive ERAN 99 Sera lapel aaea Steed S 40 Ainclude drective ooooooccoooccoooecooececocececeececeeccccce 9 25 40 MME un Le EE 107 pragma timeout variable EE 95 Te 108 16FXXX TYPO margin 107 interrupt_level E 108 BANKBITS_ MACIO EE 106 pack 108 COMMON _ mam EE 106 OMIM ENEE 108 delay UNCON En 108 176 BEE Ee 108 EEPROMSIZE Macr0 EE 02 107 S10 210 NR E A Pr Re TA 110 GPRBITS_ MACTO En 106 ENEE 110 HTC_EDITION_ Macro En 106 pragma directives ceccecsceseceseceeeeeseseseseeeeeseeees 107 HI VER MAOR mam 106 undef directive iveextccsincie leita cecaccserthl etnias te ctees 28 HI VER MINOPn Macro en 106 MACrO ALQUMENE Dietz 132 HTC_VER_PATCH_ maen 106 message format placeholder character 20 SIMI Ce ROESER 106 uU psect pragma placeholder eeeeeeeeeee 109 PIC 12 mam EE 106 SUDO DUO EE 24 SPICITA in Led EE EE 106 lt gt macro argument characters ess e0een 121 132 PIC RAE MACIO ee eege Ee 106 assembly label character ccccscscsseseseseeseseeees 122 _READ_OSCCAL_DATA meng en 93 location
393. mparing an unsigned number with a negative value or comparing a variable with a value greater than the largest number it can represent e g unsigned int a if a 10 fe At a 2S UNS Lone Now Cate it be 107 7 b 9 769 no space for macro definition Assembler The assembler has run out of memory 772 include files nested too deep Assembler Macro expansions and include file handling have filled up the assembler s internal stack The maximum number of open macros and include files is 30 773 macro expansions nested too deep Assembler Macro expansions in the assembler are nested too deep The limit is 30 macros and include files nested at one time 774 too many macro parameters Assembler There are too many macro parameters on this macro definition 776 can t allocate space for object offs Assembler The assembler has run out of memory 777 can t allocate space for opnd structure within object offs Assembler The assembler has run out of memory 780 too many psects defined Assembler There are too many psects defined Boy what a program 2010 Microchip Technology Inc DS51865B page 305 HI TECH C for PIC10 12 16 User s Guide 781 can t enter abs psect Assembler This is an internal compiler error Contact HI TECH Software technical support with details 782 REMSYM error Assembler This is an internal compiler error Contact HI TECH Software tec
394. mpiler for PIC10 12 16 MCUs package is called PIcc The driver and its options are discussed in Section 2 7 PICC Driver Option Descrip tions Following this view compiler options should be considered command line driver options unless otherwise specified in this manual Similarly compilation refers to all or some part of the steps involved in generating source code into an executable binary image 1 3 DEVICE DESCRIPTION This compiler supports Microchip PIC devices with Baseline Mid Range and Enhanced Mid Range cores All are 8 bit devices The Baseline core uses a 12 bit wide instruction set and is available in PIC10 PIC12 and PIC16 part numbers The Mid Range core utilizes a 14 bit wide instruction set that includes additional instructions to those provided by Baseline parts Its data memory banks and program memory pages are larger than those on Baseline devices It is available in PIC12 PIC14 and PIC16 part numbers The Enhanced Mid Range core also uses a 14 bit wide instruction set but incorporates additional instructions and fea tures over the Mid Range devices There are both PIC12 and PIC16 part numbers that are based on the Enhanced Mid Range core 2010 Microchip Technology Inc DS51865B page 5 HI TECH C for PIC10 12 16 User s Guide The compiler takes advantage of the target device s instruction set addressing modes memory and registers where ever possible See Section 2 7 21 CHIPINFO Di
395. n is never called Linker This function is never called This may not represent a problem but space could be saved by removing it If you believe this function should be called check your source code Some assembler library routines are never called although they are actually exe cute In this case the routines are linked in a special sequence so that program exe cution falls through from one routine to the next 521 call depth exceeded by function Linker The call graph shows that functions are nested to a depth greater than specified 522 library is badly ordered Linker This library is badly ordered It will still link correctly but it will link faster if better ordered 523 argument to W option illegal and ignored Linker The argument to the linker option w is out of range This option controls two features For warning levels the range is 9 to 9 For the map file width the range is greater than or equal to 10 524 unable to open list file Linker The named list file could not be opened The linker would be trying to fixup the list file so that it will contain absolute addresses Ensure that an assembler list file was gener ated during the compilation stage Alternatively remove the assembler list file genera tion option from the link step 525 too many address memory spaces space ignored Linker The limit to the number of address spaces specified with the PSECT assembler dir
396. n see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 50 RUNTIME Specify Runtime Environment The RUNTIME option is used to control what is included as part of the runtime envi ronment The runtime environment encapsulates any code that is present at runtime which has not been defined by the user instead supplied by the compiler typically as library code or compiler generated source files All required runtime features are enabled by default and this option is not required for normal compilation Note that the code that clears or initializes variables which is included by default will clobber the contents of the STATUS register If you need to check the cause of reset using the TO or PD bits in this register then you must enable the resetbits subop tion as well See 3 11 1 3 STATUS Register Preservation for how this feature is used The usable suboptions include those shown in Table 2 14 TABLE 2 14 RUNTIME ENVIRONMENT SUBOPTIONS on impli The code present in the main pro The ROM image is copied into RAM gram module that copies the and initialized variables will contain ROM image of initial values to RAM _ their initial value at main variables eli The inclusion of library files into the Library files are linked into the output code by the linker output The code present in the main pro Uninitialized variables are cleared gram module that clears uni
397. n Value Returns a to the first character of a token or a null if no token was found Note The separator string s2 may be different from call to call Synopsis include lt math h gt double tan double f Description The tan function calculates the tangent of f BEER 2010 Microchip Technology Inc DS51865B page 233 HI TECH C for PIC10 12 16 User s Guide TIME Example include lt math h gt include lt stdio h gt define C 3 141592 180 0 void main void double i for i 0 i lt 180 0 i 10 PEINE T aUi Eege i tani C See Also Sin cos aSin acos atan atan2 Return Value The tangent of Synopsis include lt time h gt time _t time time t t Description This function is not provided as it is dependant on the target system supplying the cur rent time This function will be user implemented When implemented this function should return the current time in seconds since 00 00 00 on Jan 1 1970 If the argu ment t is not equal to NULL the same value is stored into the object pointed to by t Example include lt stdio h gt include lt time h gt void main void time_t clock time amp clock Printers etine clock I See Also ctime gmtime localtime asctime Return Value This routine when implemented will return the current time in seconds since 00 00 00 on Jan 1 1970 DS51865B page 2
398. n record type Cromwell A record type could not be determined when reading this UBROF file 1053 additional RAM ranges larger than bank size Driver A block of additional RAM being requested exceeds the size of a bank Try breaking the block into multiple ranges that do not cross bank boundaries 1054 additional RAM range out of bounds Driver The RAM memory range as defined through custom RAM configuration is out of range 1055 RAM range out of bounds Driver The RAM memory range as defined in the chip configuration file or through custom configuration is out of range 1056 unknown chip architecture Driver The compiler is attempting to compile for a device of an architecture that is either unsupported or disabled 1057 fast double option only available on 17 series processors Driver The fast double library cannot be selected for this device These routines are only avail able for PIC17 devices 1058 assertion Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 1059 rewrite loop Code Generator This is an internal compiler error Contact HI TECH Software technical support with details WW 1081 static initialization of persistent variable Generator Parser Code A persistent variable has been assigned an initial value This is somewhat contradictory as the initial value will be assigned to the variable during execution of the compil
399. nc DS51865B page 269 HI TECH C for PIC10 12 16 User s Guide void process int a Int en SES local bl ckscope input a input this will use the local variable Ts Chis right 7 347 external declaration inside function Parser A function contains an extern declaration This is legal but is invariably not desirable as it restricts the scope of the function declaration to the function body This means that if the compiler encounters another declaration use or definition of the extern object later in the same file it will no longer have the earlier declaration and thus will be unable to check that the declarations are consistent This can lead to strange behavior of your program or signature errors at link time It will also hide any previous declarations of the same thing again subverting the compiler s type checking As a general rule always declare extern variables and functions outside any other functions For exam ple int process int a this would be better outside the function extern int away return away t a 348 auto variable should not be qualified Parser An auto variable should not have qualifiers such as near or far associated with it Its storage class is implicitly defined by the stack organization An auto variable may be qualified with static but it is then no longer auto 349 non prototyped function declaration for Parser A function has been declared using
400. nce of SFRs at the lower address of each bank the general purpose memory becomes fragmented and this lim its the size of most objects The Enhanced Mid Range devices overcome this limitation by allowing a linear addressing mode which allows the general purpose memory to be accessed as one contiguous chunk Thus when compiling for these devices the max imum allowable size of objects typically increases See Section 3 5 2 3 Auto Vari able Size Limits and Section 3 5 2 1 2 Non auto Variable Size Limits Many devices have several bytes which can be accessed regardless of which bank is currently selected This memory is called common memory Since no code Is required to select a bank before accessing these locations access to objects in this memory is typically faster and produces smaller code The program memory space is primarily for executable code but variables can also be located here There are several ways the different device families locate and read data from this memory but all objects located here will be read only 3 5 2 Variables in Data Space Memory Most variables are ultimately positioned into the data space memory The exceptions are non auto variables which are qualified as const which are placed in the program memory space DS51865B page 70 2010 Microchip Technology Inc C Language Features Due to the fundamentally different way in which auto variables and non auto vari ables are allocated mem
401. nd if present should contain one identifier A label may appear on a line of its own or precede a mnemonic as shown in the second format The third format is only legal with certain assembler directives such aS MACRO SET and EQU The name field is mandatory and should also contain one identifier If the assembly file is first processed by the C preprocessor see Section 2 7 11 P Preprocess Assembly Files then it may also contain lines that form valid preproces sor directives See Section 3 15 1 Preprocessor Directives for more information on the format for these directives There is no limitation on what column or part of the line in which any part of the statement should appear TABLE 4 2 ASPIC STATEMENT FORMATS Formati tabels Format4 comment onty empty line P d O DS51865B page 120 2010 Microchip Technology Inc Macro Assembler 4 3 3 Characters The character set used is standard 7 bit ASCII Alphabetic case is significant for identifiers but not mnemonics and reserved words Tabs are treated as equivalent to spaces 4 3 3 1 DELIMITERS All numbers and identifiers must be delimited by white space non alohanumeric characters or the end of a line 4 3 3 2 SPECIAL CHARACTERS There are a few characters that are special in certain contexts Within a macro body the character is used for token concatenation To use the bitwise operator within a macro body escape it by using amp
402. ned symbol in the FNADDR record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code DS51865B page 282 2010 Microchip Technology Inc 468 undefined symbol in FNCALL record Linker The linker has found an undefined symbol in the FNCALL record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code 469 undefined symbol in FNROOT record Linker The linker has found an undefined symbol in the FNROOT record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code 470 undefined symbol in FNSIZE record Linker The linker has found an undefined symbol in the FNSIZE record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code 471 recursive function calls Linker These functions or function call each other recursively One or more of these functions has statically allocated local variables compiled stack Either use the reentrant keyword if supported with this compiler or recode to avoid recursion e g int test int a if a 5 recursion may not be supported by some compilers return test att return 0 IERT 472 non reentrant function appears in multiple call graphs rooted at and Linker This function can be called from both main line code and interrupt code Use the reen trant keyword if this c
403. need to be read to clear hardware flags To accommodate this in some instances the code generator does produce code for a statement which only consists of a variable ID This may happen for variables which are qualified as volatile Typically the output code will read the variable but not do anything with the value read 760 portion of expression has no effect Code Generator Part of this expression has no side effects and no effect on the value of the expression e g int a Dr G5 a des reueg f Ap has no effect was that meant to be a comma 761 sizeof yields 0 Code Generator The code generator has taken the size of an object and found it to be zero This almost certainly indicates an error in your declaration of a pointer e g you may have declared a pointer to a zero length array In general pointers to arrays are of little use If you require a pointer to an array of objects of unknown length you only need a pointer to a single object that can then be indexed or incremented 762 constant truncated when assigned to bitfield Code Generator A constant value is too large for a bitfield structure member to which it is being assigned e g struct INPUT unsigned a 3 unsigned b D E Anput Gib input_grp a 0x12 12h cannot fit into a 3 bit wide object 763 constant left operand to operator Code Generator The left operand to a conditional operator is constant thus the result of the tertiary
404. nerated Psects and typically have a name based on the initialism oss Block Started by Symbol DS51865B page 94 2010 Microchip Technology Inc C Language Features The runtime startup code will clear all the memory location occupied by uninitialized variables so they will contain zero before main is executed Variables whose contents should be preserved over a reset should be qualified with persistent See Section 3 4 7 1 Persistent Type Qualifier for more information such variables are linked at a different area of memory and are not altered by the run time startup code in any way If this action is required the code executed will destroy the contents of the STATUS reg ister If the contents of this register particularly the TO and PD bits are required to determine the cause of reset you can choose to have a copy of this register taken so that it can later be examined See Section 3 11 1 3 STATUS Register Preservation for more information 3 11 1 3 STATUS REGISTER PRESERVATION The resetbits suboption of the RUNTIME option see 2 7 50 RUNTIME Spec ify Runtime Environment preserves some of the bits in the STATUS register before being clobbered by the remainder of the runtime startup code The state of these bits can be examined after recovering from a reset condition to determine the cause of the reset The entire STATUS register is saved to an assembly variable resetbits This variable c
405. nerated file is valid assembly code which could be passed to PICC as a source file however this should only be done for exploratory reasons To take advantage of the benefits of the compilation technology in the compiler it must compile and link all the C source code in a single step See the PASS1 option Section 2 7 45 PASS1 Compile to P code to generate intermediate files if you wish to compile code using a two step process or use intermediate files This option is useful for checking assembly code output by the compiler The file pro duced by this option differs to that produced by the ASMLIST option see Section 2 7 17 ASMLIST Generate Assembler List Files in that it does not contain op codes or addresses and it may be used as a source file in subsequent com pilations The assembly list file is more human readable but is not a valid assembly source file 2 7 14 U Undefine a Macro The u option the inverse of the D option is used to undefine predefined macros This option takes the form Umacro where macro is the name of the macro to be undefined The option Udraft for example is equivalent to undef draft placed at the top of each module compiled using this option see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 15 V Verbose Compile The v option specifies verbose compilation When used the compiler will display the command line
406. nes specifying common access bank memory in the chip con figuration file 828 inverted common bank in chipinfo file at line Assembler Driver The second HEX number specified in the COMMON field in the chipinfo file must be greater in value than the first Contact HI TECH Support if you have not modified the chipinfo INI file 829 unrecognized line in chipinfo file at line Assembler The chipinfo file contains a processor section with an unrecognized line Contact HI TECH Support if the INI has not been edited IERT 830 missing ARCH specification for in chipinfo file Assembler The chipinfo file has a processor section without an ARCH values The architecture of the processor must be specified Contact HI TECH Support if the chipinfo file has not been modified IERT 832 empty chip info file Assembler The chipinfo file contains no data If you have not manually edited the chip info file con tact HI TECH Support with details 833 no valid entries in chipinfo file Assembler The chipinfo file contains no valid processor descriptions 834 page width must be gt 60 Assembler The listing page width must be at least 60 characters Any less will not allow a properly formatted listing to be produced e g LIST C 10 the page width will need to be wider than this 2010 Microchip Technology Inc DS51865B page 309 HI TECH C for PIC10 12 16 User s Guide 835 form length must be gt 1
407. ngle step Compilation Figure 2 1 showed us the files that are generated by each application and the order in which these applications are executed However this does not indicate how these appli cations are executed when there is more than one source file being compiled Consider the case when there are two C source files that form a complete project and that are to be compiled as is the case shown in Figure 2 2 If these files are called main and io c these could be compiled with a single command such as PICC chip l16F877A main c io c 1 Assembly file will be preprocessed before being passed to the assembler if the P option is selected 2010 Microchip Technology Inc DS51865B page 11 HI TECH C for PIC10 12 16 User s Guide This command will compile the two source files all the way to the final output but inter nally we can consider this compilation as consisting of two stages The first stage involves processing of each source file separately and generating some sort of intermediate file for each source file The second stage involves combining all these intermediate files and further processing to form the final output An intermediate file is a particular temporary file that is produced and marks the mid point between the first and second stage of compilation The intermediate file used by PICC is the p code p1 extension file output by the parser so there will be one p code file produced for each C source fi
408. ning associated with assigning the address of a const object to a pointer to non const objects Such code normally produces warning number 359 int readp int ip return ip const int i d void main void unsigned char c pragma warning disable 359 readp amp 1 pragma warning enable 359 This same affect would be observed using the following code pragma warning push pragma warning disable 359 readp amp i pragma warning pop Here the state of the messaging system is saved by the warning push pragma Warning 359 is disabled then after the source code which triggers the warning the state of the messaging system is retrieved by using the warning pop pragma 3 15 3 8 2 The Warning Error warning Pragma lt is also possible to change the type of some messages 2010 Microchip Technology Inc DS51865B page 111 HI TECH C for PIC10 12 16 User s Guide This is only possible by the use of the warning pragma and only affects messages generated by the parser or code generator The position of the pragma is only signifi cant for the parser i e a parser message number may have its type changed for one section of the code to target specific instances of the message Specific instances of a message produced by the code generator cannot be individually controlled and the pragma will remain in force during compilation of the entire module The following shows the warning produced in the previous example b
409. nism for varying the starting point of the pseudo random sequence yielded by rand Example include lt stdlib h gt include lt stdio h gt include lt time h gt void main void tine E ere int i time amp toc srand int toc for i 0 i 10 i EE A AAE EE pucchar e See Also rand 2010 Microchip Technology Inc DS51865B page 221 HI TECH C for PIC10 12 16 User s Guide SSCANF VSSCANF STRCAT Synopsis ftinclude lt stdio h gt int sscanf const char buf const char fmt include lt stdio h gt include lt stdarg h gt int VSSCane eors t Char bui Const Char Fmt Wallet ap Description The sscanf function operates in a similar manner to scanf except that instead of the conversions being taken from stdin they are taken from the string at buf The vsscanf function takes an argument rather than a list of arguments See the description of va start for more information on variable argument lists See Also SCaner EE EE Return Value Returns the value of EOF if an input failure occurs else returns the number of input items Synopsis include lt string h gt char strcat char s1 const char s2 Description This function appends concatenates string s2 to the end of string s1 The result will be null terminated The argument s1 must point to a character array big enough to hold the resultant string Examp
410. nitialized and will contain 0 at main variables download Conditioning of the Intel HEX file for Data records in the Intel HEX file are use with bootloaders padded out to 16 byte lengths and will align on 16 byte boundaries Startup code will not assume reset values in certain registers osccal Initialize the oscillator with the Oscillator will be calibrated oscillator constant oscval value Set the internal clock oscillator Oscillator will be calibrated with calibration value value supplied keep Whether the start up module source The start up module and main file is deleted after compilation program are not deleted resetbits Preserve Power down and Time out STATUS bits are preserved STATUS bits at start up stackcall Allow function calls to use a table Functions called via CALL instruc look up method once the hardware __ tion while stack not exhausted then stack has filled called via a look up table 2010 Microchip Technology Inc DS51865B page 39 HI TECH C for PIC10 12 16 User s Guide 2 7 51 SCANDEP Scan for Dependencies When this option is used a dep dependency file is generated The dependency file lists those files on which the source file is dependant Dependencies result when one file is included into another 2 7 52 SERIAL Store a Value at this Program Memory Address This option allows a hexadecimal code to be stored at a particular address in program memory A typi
411. nker options relating to this psect idata These psects contain the ROM image of any initialized variables These psects are copied into the data psects at startup In this case the class name is used to describe the class of the corresponding RAM based data psect These psects will be stored in program memory not the data memory space These psects are implicitly linked to a location that is anywhere within the CODE linker class The linker options can be changed allowing this psect to be placed at any address in the program memory provided it does not inter 2010 Microchip Technology Inc DS51865B page 91 HI TECH C for PIC10 12 16 User s Guide fere with the requirements of other psects idloc Used to store the ID location words This psect must be stored in a special location in the HEX file Do not change the default linker options relating to this psect init Used by assembly code in the runtime startup assembly module The code in this and the cinit define the runtime startup code If no interrupt code is defined code from the reset vector may fall through into this psect It is recommended that the default linker options relating to this psect are not changed in case this situation is in effect intentry Contains the entry code for the interrupt service routine which is linked to the interrupt vector This code saves the necessary registers and jumps to the main interrupt code in the case of Mid Range devices for
412. not contain more than one charac ter e g c 12 ZS oops only one character may be specified 227 expected after Parser The only context in which two successive dots may appear is as part of the ellipsis sym bol which must have 3 dots An ellipsis is used in function prototypes to indicate a vari able number of parameters Either was meant to be an ellipsis symbol which would require you to add an extra dot or it was meant to be a structure member operator which would require you remove one dot 2010 Microchip Technology Inc DS51865B page 255 HI TECH C for PIC10 12 16 User s Guide 228 illegal character Parser This character is illegal in the C code Valid characters are the letters digits and those comprising the acceptable operators e g c a oops did you mean c a WW 229 unknown qualifier given to A Parser This is an internal compiler error Contact HI TECH Software technical support with details 230 missing argument to A Parser This is an internal compiler error Contact HI TECH Software technical support with details IERT 231 unknown qualifier given to l Parser This is an internal compiler error Contact HI TECH Software technical support with details 232 missing argument to l Parser This is an internal compiler error Contact HI TECH Software technical support with details 233 bad Q option Parser Thi
413. not relocated on 0x byte boundary Linker This psect is not relocated on the required boundary Check the relocatability of the psect and correct the p option if necessary 456 psect not loaded on 0x boundary Linker This psect has a relocatability requirement that is not met by the load address given in a p option For example if a psect must be on a 4K byte boundary you could not start it at 100H 459 remove failed error xstrip The creation of the output file failed when removing an intermediate file 460 rename failed error xstrip The creation of the output file failed when renaming an intermediate file 461 can t create file Assembler Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 464 missing key in avmap file Linker This is an internal compiler error Contact HI TECH Software technical support with details 465 undefined symbol in FNBREAK record Linker The linker has found an undefined symbol in the FNBREAK record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code 466 undefined symbol in FNINDIR record Linker The linker has found an undefined symbol in the FNINDIR record for a non reentrant function Contact HI TECH Support if this is not handwritten assembler code 467 undefined symbol in FNADDR record Linker The linker has found an undefi
414. not represented in the basic execution character set or the extended character set for a wide character constant 6 1 3 4 lt is the numerical value of the rightmost character A 4 6 The value of an integer character constant that contains more than one character or a wide character constant that contains more than one multibyte character 3 1 3 4 Not supported A 4 7 Whether a plain char has the same range of values as signed char or unsigned char 6 2 1 1 A plain char is treated as an unsigned char A 5 INTEGERS G3 5 A 5 1 The representations and sets of values of the various types of integers 6 1 2 5 See Section 3 4 1 Integer Data Types A 5 2 The result of converting an integer to a shorter signed integer or the result of converting an unsigned integer to a signed integer of equal length if the value cannot be represented 6 2 1 2 The low order bits of the original value are copied to the signed integer or all the low order bits of the original value are copied to the signed integer DS51865B page 344 2010 Microchip Technology Inc Implementation Defined Behavior A 5 3 The results of bitwise operations on signed integers 6 3 The bitwise operations act as if the operand was unsigned A 5 4 The sign of the remainder on integer division 6 3 5 The remainder has the same sign as the dividend Table A 1 shows the expected sign of the result of division for all combinations of dividend and d
415. ns In most situations it is always the command line driver P ICC that is being executed If you need to add alter nate linker settings in the Linker tab in the Project gt MPLAB Build options dialogue you must add driver options not linker options These driver options will be used by the driver to generate the appropriate linker options during the linking process The L option is a means of allowing a linker option to be specified via a driver option The L option is especially useful when linking code which contains non standard pro gram sections or psects as may be the case if the program contains hand written assembly code which contains user defined psects see 4 3 9 3 PSECT or C code which uses the pragma psect directive see 3 15 3 5 The pragma psect Direc tive Without this L option it would be necessary to invoke the linker manually to allow the linker options to be adjusted This option can also be used to replace default linker options If the string starting from the first character after the L up to the first equal character matches a psect or class name in the default options then the reference to the psect or class name in the default option and the remainder of that option are deleted that default linker option is replaced by the option specified by the L For example if a default linker option was preset_vec 00h intentry init end_init the driver option L pinit 100h would re
416. nsists of any valid assembly identifier and optionally followed by a colon The definition may appear on a line by itself or be positioned before a state ment Here are two examples of legitimate labels interspersed with assembly code frank MOVLW 1 GOTO fin simon44 CLRF _input Here the label frank will ultimately be assigned the address of the MOVLW instruction and simon44 the address of the CLRF instruction Regardless of how they are defined the assembler list file produced by the assembler will always show labels on a line by themselves Note that the colon following the label is optional but is recommended Symbols which are not interpreted in any other way are assumed to be labels Mistyped assembler instructions can sometimes be treated as labels without an error message being issued Thus the code mistake MOVLW 23h MOVWF 37h REUTRN 5 OOPS defines a symbol called REUTRN which was intended to be the RETURN instruction Labels may be used and are preferred in assembly code rather than using an abso lute address Thus they can be used as the target location for jump type instructions or to load an address into a register Like variables labels have scope By default they may be used anywhere in the mod ule in which they are defined They may be used by code before their definition To make a label accessible in other modules use the GLOBAL directive See Section 4 3 9 1 GLOBAL for more information
417. ntains PSECT lkuptbl class RAM space 1 abs ovlrd ORG 110h Lookup DS 20h An absolute psect always starts at address 0 For such psects you can specify a non zero starting address by using the ORG directive See Section 4 3 9 4 org for important information on this directive When the project is compiled this file is assembled and the resulting relocatable object file scanned for absolute psects As this psect is flagged as being abs and ovird the bounds and space of the psect will be noted in this case a memory range from address 0x110 to 0x12F in memory space 1 is being used This information is passed to the code generator to ensure that this address range are not used by the C code The linker handles all of the allocation into program memory and so only the psects located in data memory need be defined in this way 3 13 4 2 UNDEFINED SYMBOLS If a variable needs to be accessible from both assembly and C source code it can be defined in assembly code if required but it is easier to do so in C source code DS51865B page 102 2010 Microchip Technology Inc C Language Features A problem could occur if there is a variable defined in C source but is only ever refer enced in the assembly code In this case the code generator would remove the vari able believing it is unused The linker would be unable to resolve the symbol referenced by the assembly code and an error will result To work around this issue
418. nts in the W register or in the auto parameter block APB of the called function f the first parameter is one byte in size it is passed in the W register All other parameters are passed in the APB This applies to basic types and to aggregate types like structures The parameters are grouped along with the function s auto variables in the APB and are placed in the compiled stack See Section 3 5 2 2 1 Compiled Stack Operation for detailed information on the compiled stack The parameter variables will be refer enced as an offset from the symbol _ function where function isthe name of the function in which the parameter is defined i e the function that is to be called DS51865B page 84 2010 Microchip Technology Inc C Language Features Unlike auto variables parameter variables are allocated memory strictly in the order in which they appear in the function s prototype This means that the parameters will always be placed in the same memory bank even if the other auto variables for that function have been allocated across multiple banks The parameters for functions that take a variable argument list defined using an ellipsis in the prototype are placed in the parameter memory along with named parameters Take for example the following ANSI style function void test char a int b The function test will receive the parameter b in its function auto parameter block and a in the w register A call to this func
419. ny value is negative unsigned otherwise If a char type is sufficient to hold the range of values then this chosen otherwise an int type is chosen Enumerated must fit within an int type and will be truncated if this is not the case QUALIFIERS G3 10 A 10 1 What constitutes an access to an object that has volatile qualified type 6 5 5 3 Each reference to the name of a volatile qualified object constitutes one access to the object DECLARATORS G3 11 A 11 1 The maximum number of declarators that may modify an arithmetic structure or union type 6 5 4 No limit is imposed by the compiler STATEMENTS G 3 12 A 12 1 The maximum number of case values in a switch statement 6 6 4 2 There is no practical limit to the number of case labels inside a switch statement PREPROCESSING DIRECTIVES G 3 13 A 13 1 Whether the value of a single character character constant in a constant expression that controls conditional inclusion matches the value of the same character constant in the execution character set 6 8 1 The character constant evaluates to the same value in both environments A 13 2 Whether such a character constant may have a negative value 6 8 1 It may not be negative A 13 3 The method for locating includable source files 6 8 2 For files specified in angle brackets lt gt the search first takes place in the directories specified by I options then in the standard compiler directory this is the dir
420. o lt digits gt Objtohex The second value to the OBJTOHEX n m HEX length rounding option is invalid 406 bad argument to A Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 407 bad argument to U Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 408 bad argument to B Objtohex This option requires an integer argument in either base 8 10 or 16 If you are invoking objtohex directly then see Section 6 3 Objtohex for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical support with details 409 bad argument to P Objtohex This option requires an integer argument in either base 8 10 or 16 If you are invoking objtohex directly then see Section 6 3 Objtohex for more details Otherwise this may be an internal compiler error and you should contact HI TECH Software technical support with details 410 bad combination of options Objtohex The combination of options supplied to OBJTOHEX Is invalid 412 text does not start at 0 Objtohex Code in some things must start at zero Here it doesn t IERT 413 write error on Assembler Linker Cromwell A write error occurred on the named file This probably means you have run out of disk space 2010 Microchip Technology Inc DS51865B page 277 HI TECH C for PIC10 12 16 User s Gui
421. o choose a different name so we might choose the name mytext as the psect name in which we will place out routine so we have PSECT mytext local class CODE delta 2 Let s assume we would like to call this routine add in the C domain In assembly domain we must choose the name _add as this then maps to the C identifier add If we had chosen add as the assembly routine then it could never be called from C code The name of the assembly routine is the label that we will place at the beginning of the assembly code The label we would use would look like this _add We need to be able to call this from other modules some make this label globally accessible by using the GLOBAL assembler directive Section 4 3 9 1 GLOBAL GLOBAL _add By compiling a dummy C function with a similar prototype to this assembly routine we can determine the signature value The C equivalent prototype to this routine would look like int add int int Check the assembly list file for the signature value of such a function Signature values are not mandatory but allow for additional type checking to be made by the linker We determine that the following SIGNAT directive Section 4 3 9 20 SIGNAT can be used SIGNAT _add 4217 The w register will be used for passing in the argument DS51865B page 98 2010 Microchip Technology Inc C Language Features Here is an example of the complete routine for a Mid Range device which could be
422. o enable this checking for printf You may also use this for any user defined function that accepts printf style format strings The qualifier following the function name is to allow automatic conversion of pointers in variable argument lists The above example would cast any pointers to strings in RAM to be pointers of the type const char Note that the warning level must be set to 1 or below for this option to have any visible effect See Section 2 7 59 WARN Set Warning Level 3 15 3 5 THE PRAGMA PSECT DIRECTIVE Normally the object code generated by the compiler is broken into the standard psects as described in 3 10 1 Compiler generated Psects This is fine for most applica tions but sometimes it is necessary to redirect variables or code into different psects when a special memory configuration is desired Some code and data compiler generated psects may be redirected using a pragma psect directive The general form of this pragma looks like pragma psect standardPsect newPsect DS51865B page 108 2010 Microchip Technology Inc C Language Features and instructs the code generator that anything that would normally appear in the stan dard psect standardPsect will now appear in a new psect called newPsect This psect will be identical to standardPsect in terms of its flags and attributes however will have a unique name Thus you can explicitly position this new psect without affecting the placement of
423. o or static local and the global optimizer must be enabled possi bly at higher level than 1 and the warning level threshold may need to be lower than the default level of O DS51865B page 302 2010 Microchip Technology Inc The global optimizer keeps track of the contents of local variables for as long as is pos sible during a function For C code that compares these variables to constants the result of the comparison can be deduced at compile time and the output code hard coded to avoid the comparison e g int a b a D this can never be false always perform the true statement if a 4 b 6 will produce code that sets a to 5 then immediately sets b to 6 No code will be pro duced for the comparison if a 4 If awas a global variable it may be that other functions particularly interrupt functions may modify it and so tracking the variable cannot be performed This warning may indicate more than an optimization made by the compiler It may indi cate an expression with missing or badly placed parentheses causing the evaluation to yield a value different to what you expected This warning may also be issued because you have written something like while 1 To produce an infinite loop use for A similar situation arises with for loops e g int a b this loop must iterate at least once for a 0 a 10 a b func a In this case the code generator can again pick up th
424. ocess D code C file amp assemble OPI parse generation A preprocess ae C file i amp assemble parse generation First stage of compilation Second stage of compilation When compiling files of mixed types this can still be achieved with just one invocation of the compiler driver As discussed in Section 2 3 The Compilation Sequence the driver will pass each input file to the appropriate compiler application For example the files main c io c mdef as and c_sb 1pp are to be compiled To perform this in a single step the following command line could be used PICC chip LoFG 7A main c Ze mdef as c_sb lpp DS51865B page 12 2010 Microchip Technology Inc PICC Command line Driver As shown in Figure 2 1 and Figure 2 2 the two C files main c and io cl willbe com piled to intermediate p code files these along with the p code library file c_sb 1lpp will be passed to the code generator The output of the code generator as well as the assembly source file mdef as will be passed to the assembler The driver will recompile all source files regardless of whether they have changed since the last build IDEs such as MPLAB IDE and make utilities must be employed to achieve incremental builds if desired See also Section 2 3 3 Multi step Compila tion Unless otherwise specified a HEX file and Microchip COFF file are produced as the final output All intermediate files remain after compila
425. ocessor A new line is missing at the end of the line Each line including the last line must have a new line at the end This problem is normally introduced by editors 177 symbol in U option was never defined Preprocessor A macro name specified in a U option to the preprocessor was not initially defined and thus cannot be undefined 179 nested comments Preprocessor This warning is issued when nested comments are found A nested comment may indi cate that a previous closing comment marker is missing or malformed e g output 0 a comment that was left unterminated flag TRUE next comment hey where did this line go 180 unterminated comment in included file Preprocessor Comments begun inside an included file must end inside the included file 181 non scalar types can t be converted to other types Parser You can t convert a structure union or array to another type e g struct TEST test struct TEST sp sp test oops did you mean sp amp test 182 illegal conversion between types Parser This expression implies a conversion between incompatible types e g a conversion of a structure type into an integer e g struct LAYOUT layout SEET Ste layout i Jm Vive Cannot be converted to struck y Note that even if a structure only contains an int for example it cannot be assigned to an int variable and vice versa 183 function or function pointer
426. odules listing modules or symbols These commands are listed in Table 6 2 TABLE 6 2 LIBRARIAN KEY LETTER COMMANDS ey Meaning e Leni e L engermeide S The first file name listed after the key is the name of the library file to be used The following files if required are the modules of the library required by the command specified If you are building a p code library the modules listed must be p code files If you are building an object file library the modules listed must be object files When replacing or extracting modules the names of the modules to be replaced or extracted must be specified If no names are supplied all the modules in the library will be replaced or extracted respectively Adding a file to a library is performed by requesting the librarian to replace it in the library Since it is not present the module will be appended to the library If the r key is used and the library does not exist it will be created When using the d key letter the named modules will be deleted from the library In this instance it is an error not to give any module names The mand s key letters will list the named modules and in the case of the s key letter the global symbols defined or referenced within A D or U letter is used to indicate whether each symbol is defined in the module or referenced but undefined As with the r and x key letters an empty list of modules means all the modules in the library The o ke
427. of the form textn_split_s So for example if the text102 psect exceeds the size ofa page it may be split intoatext102_split_l andatext102_split_2 psect This process is fully automatic but you should be aware that if the code associated with a function does become larger than one page in size the efficiency of that code may drop fractionally due to any longer jump and call instruction sequences being used to trans fer control to code in other pages The basename of each psect category is tabulated below A full list of all program mem ory psects psect names are listed in Section 3 10 1 1 Program space psects maintext The generated code associated with the special function main is placed in this psect Some optimizations and features are not applied to this psect textn These psects where nis a decimal number contain all other executable code that does not require a special link location 3 8 3 Changing the Default Function Allocation The assembly code associated with a C function can be placed at an absolute address This can be accomplished by using an address construct in a similar fashion to that used with absolute variables Such functions are called absolute functions The following example of an absolute function will place the function at address 400h int mach _status int mode 0x400 E FUNCETLOn body 2 If you check the assembly list file you will see the function label and the first assembly ins
428. old style K amp R arguments It is preferable to use prototype declarations for all functions e g int process input SEELEN warning flagged here This would be better written int process int input 350 unused from line Parser The indicated object was never used in the function or module being compiled Either this object is redundant or the code that was meant to use it was excluded from com pilation or misspelt the name of the object Note that the symbols resia and sccsid are never reported as being unused 352 float parameter coerced to double Parser Where a non prototyped function has a parameter declared as float the compiler converts this intoa double float This is because the default C type conversion con ventions provide that when a floating point number is passed to a non prototyped func tion it will be converted to double It is important that the function declaration be consistent with this convention e g double inc_flt f f will be converted to double float f warning flagged here DS51865B page 270 2010 Microchip Technology Inc d return f 2 Pa 353 sizeof external array is zero Parser The size of an external array evaluates to zero This is probably due to the array not having an explicit dimension in the extern declaration 354 possible pointer truncation Parser A pointer qualified far has been assigned to a
429. ome of which are followed by certain options A list of the keywords is given in Table 3 12 Those keywords not discussed elsewhere are detailed below TABLE 3 12 PRAGMA DIRECTIVES Wein weaning Eege inline Specify function is inine pragma inline fabs interrupt level Allow call from interrupt pragma interrupt_level 1 and main line code printf_check Enable printf style format pragma string checking printi check print Gonst psect Rename compiler gener pragma psect ated psect nvBANKO my_nvram regsused Specify registers used by pragma regsused wreg fsr function switch Specify code generation for pragma switch direct switch statements warning Control messaging pragma warning disable parameters 2997407 2010 Microchip Technology Inc DS51865B page 107 HI TECH C for PIC10 12 16 User s Guide 3 15 3 1 THE PRAGMA INLINE DIRECTIVE The pragma inline directive is used to indicate to the compiler that a function will be inlined The directive is only usable with special functions that the code generator will handle specially e g the _delay function Note Use ofthis pragma with a user defined function does not mean that function will be in lined 3 15 3 2 THE PRAGMA INTERRUPT LEVEL DIRECTIVE The pragma interrupt_level directive can be used to prevent function duplica tion of functions called from main line and interrupt code See Section 3 9 5 1 Disabling Duplication for more
430. ompiler supports it or recode to avoid using local variables or parameters or duplicate the function e g void interrupt my_isr void scan 6 7 SCan is called from an interrupt function 7 void process int a scan a scan is also called from main line code 473 function is not called from specified interrupt_level Linker The indicated function is never called from an interrupt function of the same interrupt level e g pragma interrupt_level 1 void Too void d pragma interrupt_level 1 void interrupt bar void this function never calls foo 2010 Microchip Technology Inc DS51865B page 283 HI TECH C for PIC10 12 16 User s Guide 474 no psect specified for function variable argument allocation Linker The FNCONF assembler directive which specifies to the linker information regarding the auto parameter block was never seen This is supplied in the standard runtime files if necessary This error may imply that the correct run time startup module was not linked Ensure you have used the FNCONF directive if the runtime startup module is hand written 475 conflicting FNCONF records Linker The linker has seen two conflicting FNCONF directives This directive should only be specified once and is included in the standard runtime startup code which is normally linked into every program 476 fixup overflow referencing location 0x 0x size valu
431. on ADDRESSING 2 will configure HEXMATE to Interpret all command line address fields as word addresses The affect of this setting is global and all HEXMATE options will now interpret addresses according to this setting This option will allow specification of addressing modes from one byte per address to four bytes per address 6 6 1 4 BREAK This option takes a comma separated list of addresses If any of these addresses are encountered in the HEX file the current data record will conclude and a new data record will recommence from the nominated address This can be useful to use new data records to force a distinction between functionally different areas of program space Some HEX file readers depend on this 6 6 1 5 Ch The CK option is for calculating a checksum The usage of this option is CK start end destination offset wwidth tCode gAlogithm where e start and end specify the address range over which the checksum will be calculated e destination Is the address where the checksum result will be stored This value cannot be within the range of calculation e offset is an optional initial value to add to the checksum result e Width is optional and specifies the byte width of the checksum result Results can be calculated for byte widths of 1 to 4 bytes If a positive width is requested the result will be stored in big endian byte order A negative width will cause the result to be stored in little endian byte order
432. on produced by cromwell may not be accurate This warning does not indicate any potential code failure 1290 buffer overflow in DWARF debugging information entry Cromwell A buffer associated with the ELF DWARF debug file has overflowed Contact HI TECH Support with details 1291 bad ELF string table index Cromwell An ELF file passed to Cromwell is malformed and cannot be used 1292 malformed define in SDB file Cromwell The named SDB file passed to Cromwell is malformed and cannot be used 1293 couldn t find type for in DWARF debugging information entry Cromwell The tye of symbol could not be determined from the SDB file passed to Cromwell Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details 1294 there is only one day left until this licence expires Driver The compiler is running as a demo and will be unable to run in PRO mode after the evaluation license has expired in less than one day s time After expiration the compiler can be operated in Lite mode indefinitely but will produce a larger output binary 1295 there are days left until this licence will expire Driver The compiler is running as a demo and will be unable to run in PRO mode after the evaluation license has expired in the indicated time After expiration the compiler can be operated in Lite mode indefinitely but will produce a larger output binary 1296 source file
433. onjunction with the following command line option equivalents 1 Define macros The buttons and fields grouped in the bracket can be used to define preprocessor macros See Section 2 7 2 D Define Macro 2 Undefine macros The buttons and fields grouped in the bracket can be used to undefine preprocessor macros See Section 2 7 14 U Undefine a Macro 3 Preprocess assembly This checkbox controls whether assembly source files are scanned by the preprocessor See Section 2 7 11 P Preprocess Assembly Files 2010 Microchip Technology Inc DS51865B page 43 HI TECH C for PIC10 12 16 User s Guide FIGURE 2 6 THE COMPILER TAB Build Options For Project demo mcp Directories Custom Build Trace Driver Compiler Linker Global Define macros mmm Undefine macros j Jh Freprocess assembler Identifier length Ei T Optimization settings Messages M Global E Verbose Jh Assembler Speed Warning level E Debug Operation mode FRO MM Address qualifiers Bank Banki Bank Bank W Eeprom Cancel Apply Hele 4 Optimization settings These controls are used to adjust the different optimiza tions the compiler employs See Section 2 7 42 OPT Invoke Compiler Opti mizations 5 Identifier length This selector controls the maximum identifier length in C source See Section 2 7 9 N Identifier Length 6 Verbose This checkbox controls wh
434. only the 3d placeholder is used and the doprnt c module that is linked into the program will only contain code that handles printing of decimal integers Consider now that the code is changed and another call to printf is added The new call looks like printi Output 18 6d Now the compiler will detect that additional code to handle printing decimal integers to a specific width must be enabled as well As more features of printf are detected the size of the code generated for the printf function will increase DS51865B page 96 2010 Microchip Technology Inc C Language Features lf the format string in a call to printf is nota string literal as above but is rather a pointer to a string then the compiler will not be able to reliably predict the printf usage and so it forces a more complete version of printf to be generated However even without being able to scan printf placeholders the compiler can still make certain assumptions regarding the usage of the function In particular the compiler can look at the number and type of the additional arguments to printf those following the format string expression to determine which placeholders could be valid This enables the size and complexity of the generated printf routine to be kept to a minimum even in this case For example if printf was called as follows PrintL MyFormacel rang 4 Gl the compiler could determine that for example
435. ons is that EEPROM_READ the macro does not test nor wait for any prior write operations to complete EVAL POLY Synopsis include lt math h gt double eval_poly double x const double d int n Description The eval_poly function evaluates a polynomial whose coefficients are contained in the array d at x for example Vo tS REO se Sy Ae EE The order of the polynomial is passed in n Example include lt stdio h gt include lt math h gt void main void double x y doune ais Lyle ae E XS Ze y eval_poly x d 2 printf polynomial evaluated at f is Sf n x y Return Value A double value being the polynomial evaluated at x EXP Synopsis Finclude math bas double exp double f Description The exp routine returns the exponential function of its argument i e e to the power of f DS51865B page 192 2010 Microchip Technology Inc Library Functions Example include lt math h gt dree lide lt stdio h gt void main void double f for f 0 0 f lt 5 f 1 0 Praner to GC EE ern Ty EXPT See Also log 1og10 pow FABS Synopsis include lt math h gt double fabs double f Description This routine returns the absolute value of its double argument Example Finca lt stdio h gt include lt math h gt void main void PEINE Si n Gabe 1 5 7 fabs 1 5 See Also abs labs FLASH COPY Synops
436. operator will always be the same e g a 8 b c this is the same as saying a b 764 mismatched comparison Code Generator A comparison is being made between a variable or expression and a constant value which is not in the range of possible values for that expression e g unsigned char c tte gt 300 FA GOPS how can Chis De trus SS close 765 degenerate unsigned comparison Code Generator There is a comparison of an unsigned value with zero which will always be true or false e g unsigned char c if c gt 0 DS51865B page 304 2010 Microchip Technology Inc will always be true because an unsigned value can never be less than zero 766 degenerate signed comparison Code Generator There is acomparison of a signed value with the most negative value possible for this type such that the comparison will always be true or false e g char c if c gt 128 will always be true because an 8 bit signed char has a maximum negative value of 128 767 constant truncated to bitfield width Code Generator A constant value is too large for a bitfield structure member on which it is operating e g struct INPUT unsigned a 3 unsigned b D k ZE see Oy input_grp a 0x13 13h to large for 3 bit wide object 768 constant relational expression Code Generator There is a relational expression that will always be true or false This may be because e g you are co
437. options passed to the driver resemble those that the Microchip MPLAB IDE would pass to a previous version of this compiler Some of these options are now obsolete however they were still interpreted It is recommended that you install an updated HI TECH options plug in for the MPLAB IDE 1210 Visit the HI TECH Software website www htsoft com for a possible update Driver Visit our website to see if an update is available to address the issue s listed in the previous compiler message Please refer to the on line self help facilities such as the Frequently asked Questions or search the On line forums In the event of no details being found here contact HI TECH Software for further information 1212 Found 0 IXh at address h Hexmate The code sequence specified in a FIND option has been found at this address 1213 duplicate ARCH for in chipinfo file at line Assembler Driver The chipinfo file has a processor section with multiple ARCH values Only one ARCH value is allowed If you have not manually edited the chip info file contact HI TECH Support with details DS51865B page 328 2010 Microchip Technology Inc 1218 can t create cross reference file Assembler The assembler attempted to create a cross reference file but it could not be created Check that the file s path name is correct 1228 unable to locate installation directory Driver The compiler cannot determine the directory where
438. or occurred reading the input COD file Confirm the spelling and path of the file specified on the command line 619 I O error reading symbol table Cromwell The COD file has an invalid format in the specified record 620 filename index out of range in line number record Cromwell The COD file has an invalid value in the specified record 621 error writing ELF DWARF section on 7 Cromwell An error occurred writing the indicated section to the given file Confirm the spelling and path of the file specified on the command line 622 too many type entries Cromwell This is an internal compiler error Contact HI TECH Software technical support with details DS51865B page 292 2010 Microchip Technology Inc 623 bad class in type hashing Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 624 bad class in type compare Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 625 too many files in COFF file Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 626 string lookup failed in COFF get_string Cromwell s i an internal compiler error Contact HI TECH Software technical support with etails WW 627 missing in SDB file line column Cromwell This is an internal compiler error Contact HI TECH Software technical support wit
439. ory they are discussed separately To use the C language ter minology these two groups of variables are those with automatic storage duration and those with permanent storage duration respectively Note The terms local and global are commonly used to describe variables but are not ones defined by the language Standard The term local variable is often taken to mean a variable which has scope inside a function and global variable is one which has scope throughout the entire program However the C language has three common scopes block file i e internal linkage and program i e external linkage so using only two terms to describe these can be confusing For example a static variable defined outside a function has scope only in that file so it is not globally accessible but it can be accessed by more than one function inside that fie so it is not local to any one function either In terms of memory allocation there are two ways this is performed and this purely relates to whether a variable is an auto or not hence the grouping in this section 3 5 2 1 NON AUTO VARIABLE ALLOCATION Non auto variables those with permanent storage duration are located by the com piler into any of the available data banks This is done in a two stage process placing each variable into an appropriate psect and later linking that psect into a predetermined bank Thus during compilation the code generator can determine w
440. oughout this manual the term project name will refer to either the name of the project created in the IDE or the base name file name without extension of the first C source file specified on the command line The compiler is able to directly produce a number of the output file formats which are used by PIC10 12 16 development tools The default behavior of PICC Is to produce a Microchip format COFF and Intel HEX output Unless changed by a driver option the base names of these files will be the project name The default output file types can be controlled by compiler options e g the OUTPUT option The extensions used by these files are fixed and are listed together with this option s description in Section 2 7 44 OUTPUT type Specify Output File Type The COFF file is used by debuggers to obtain debugging information about the project Table 2 13 shows all output format options available with PICC using the OUTPUT option The File Type column lists the filename extension which will be used for the output file 2 5 1 1 SYMBOL FILES PICC creates two symbol files which are used to generate the debug output files such as COFF and ELF files These are the SYM files sym extension produced by the linker and the SDB file sdb extension produced by the code generator The SDB file contains type information and the SYM file contains address informa tion These two files in addition to the HEX file are combined by the
441. ource level Symbol File override any name or path information provided by o relevant to the MAP and SYM file To change the directory in which all output and intermediate files are written use the OUTDIR option see Section Section 2 7 43 OUTDIR Specify a directory for output files Note that if o specifies a path which is inconsistent with the path specified in the OUTDIR option this will result in an error 2 7 11 P Preprocess Assembly Files The P option causes assembler source files to be preprocessed before they are assembled thus allowing the use of preprocessor directives such as include and C style comments with assembler code By default assembler files are not preprocessed see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2010 Microchip Technology Inc DS51865B page 27 HI TECH C for PIC10 12 16 User s Guide 2 7 12 Q Quiet Mode This option places the compiler in a quiet mode which suppresses the Microchip Technology Incorporated copyright notice from being displayed 2 7 13 S Compile to Assembler Code The s option stops compilation after generating an assembly output file One assembly file will be generated for all the C source code including p code library code The command PICC CHIP 16F877A S test c will produce an assembly file called test as which contains the assembly code gen erated from test c The ge
442. page 131 HI TECH C for PIC10 12 16 User s Guide The MACRO directive should be preceded by the macro name and optionally followed by a comma separated list of formal arguments When the macro is used the macro name should be used in the same manner as a machine opcode followed by a list of arguments to be substituted for the formal parameters For example macro movil args argl the literal value to load arg2 the NAME of the source variable descr Move a literal value into a nominated file register movilf MACRO ge GE ge MOVLW argi MOVWF arg2 mod 080h ENDM When used this macro will expand to the 2 instructions in the body of the macro with the formal parameters substituted by the arguments Thus movlf 2 tempvar expands to MOVLW 2 MOVWF tempvar mod 080h The amp character can be used to permit the concatenation of macro arguments with other text but is removed in the actual expansion For example loadPort MACRO port value MOVLW value MOVWE PORT amp port ENDM will load PORTA if port is a when called etc A comment may be suppressed within the expansion of a macro thus saving space in the macro storage by opening the comment with a double semicolon When invoking a macro the argument list must be comma separated If it is desired to include a comma or other delimiter such as a space in an argument then angle brackets lt and gt may be used to quote If an argument is preced
443. piler s messaging system DS51865B page 118 2010 Microchip Technology Inc Macro Assembler 4 3 4 2 17 EDF Set Message File Path This option is mainly used by the command line driver PICC to specify the path of the message description file The default file is located in the dat directory in the compiler s installation directory see Section 2 6 Compiler Messages for full information about the compiler s messaging system 4 2 18 EMAX Specify Maximum Number of Errors This option is mainly used by the command line driver PICC to specify the maximum number of errors that can be encountered before the assembler terminates The default number is 10 errors This option is applied if compiling using PICC the command line driver and the ERRORS driver option see Section 2 7 28 ERRORS Maximum Number of Errors See Section 2 6 Compiler Messages for full information about the compiler s messaging system 4 2 19 OPT Specify Optimization Type This option complements the assembler 0 option and indicates specific information about optimizations required The suboptions speed space and debug may be spec ified to indicate preferences related to procedural abstraction Abstraction is enabled when the space option is set disabled when speed Is set The debug suboption limits the application of some optimizations which otherwise may severely corrupt debug information used by debuggers
444. piler application to another since each application reports information about different file formats 2010 Microchip Technology Inc DS51865B page 19 HI TECH C for PIC10 12 16 User s Guide some applications for example the parser are typically able to pinpoint the area of interest down to a position on a particular line of C source code whereas other appli cations such as the linker can at best only indicate a module name and record number which is less directly associated with any particular line of code Some messages relate to issues in driver options which are in no way associated with any source code There are several ways of changing the format in which message are displayed which are discussed below The driver option E with or without a filename alters the format of all displayed mes sages See Section 2 7 3 E Redirect Compiler Errors to a File Using this option produces messages that are better suited to machine parsing and are less user friendly Typically each message is displayed on a single line The general form of messages produced when using the E option is filename line message number message string type The E option also has another effect When used the driver first checks to see if spe cial environment variables have been set If so the format dictated by these variables are used as a template for all messages produced by all compiler applications The names of these environm
445. point is set using the srand call The example shows use of the time function to generate a different starting point for the sequence each time Example include lt stdlib h gt include lt stdio h gt include lt time h gt void main void time t ToC int i time amp to i C srand int toc fOr i D i 10 i Prane EH rand EK EE eet vnn See Also srand Note The example will require the user to provide the time routine as one cannot be supplied with the compiler See time for more detail Synopsis include lt math h gt double round double x Description The rouna function round the argument to the nearest integer value but in floating point format Values midway between integer values are rounded up 2010 Microchip Technology Inc DS51865B page 217 HI TECH C for PIC10 12 16 User s Guide Example include lt math h gt void main void double input rounded input 1234 5678 rounded round input See Also trunc SETJMP Synopsis include lt setjmp h gt int setyjmp Jmp buf buf Description The set jmp function is used with long jmp for non local goto s See long jmp for further information Example Poin lade lt stdio h gt include lt setjmp h gt include lt stdlib h gt jmp_buf jb void inner void longjmp jb 5 void main void int i LECL Sec pe Ib 4 EE E
446. pointer reference graph which is described in Section 4 4 2 Pointer Reference Graph This graph is printed in the assembly list file which is controlled by the option described in Section 2 7 17 ASMLIST Generate Assembler List Files Consider the following program in the early stages of development It consists of the following code int i j int getValue const int ip return ip void main void J getValue amp 1i lf was Gode that Uses j A pointer ip is a parameter to the function get Value The pointer target type uses the qualifier const since we do not want the pointer to be used to write to any objects whose addresses are passed to the function The const qualification serves no other purpose and does not alter the format of the pointer variable If the compiler allocates the variable i defined in main to bank 0 data memory it will also be noted that the pointer ip parameter to get Value only points to one object that resides in bank 0 of the data memory In this case the pointer ip is made an 8 bit wide data pointer The generated code that dereferences ip in getValue will be generated assuming that the address can only be to an object in bank 0 As the program is developed another variable x is defined and unknown to the pro grammer is allocated space in bank 2 data memory The main function now looks like int i Jy allocated to bank 0 in this example Ee
447. pplicable ROM ranges This field allows the default ROM program space memory used to be adjusted See Section 2 7 49 ROM Adjust ROM Ranges a oND DS51865B page 46 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 3 C Language Features 3 1 INTRODUCTION HI TECH C Compiler for PIC 10 12 16 MCUs supports a number of special features and extensions to the C language which are designed to ease the task of producing ROM based applications This chapter documents the special language features which are specific to these devices 3 2 ANSI C STANDARD ISSUES This compiler conforms to the ISO IEC 9899 1990 Standard for programming lan guages This is commonly called the C90 Standard It is referred to as the ANSI C Stan dard in this manual Some violations to the ANSI C Standard are indicated below in Section 3 2 1 Divergence from the ANSI C Standard Some features from the later standard C99 are also supported 3 2 1 Divergence from the ANSI C Standard HI TECH C diverges from the ANSI C Standard in one area function recursion Due to limited memory and no hardware implementation of a data stack recursion is not sup ported and functions are not reentrant 3 2 2 Implementation defined behavior Certain features of the ANSI C standard have implementation defined behavior This means that the exact behavior of some C code can vary from compiler to compiler
448. psects or that the psect be placed anywhere in a compiler defined or user defined range of address See Chapter 5 Linker for the features and options available when linking See also 2 7 7 L Adjust Linker Options Directly for information on controlling the linker from the driver or in MPLAB IDE 2010 Microchip Technology Inc DS51865B page 109 HI TECH C for PIC10 12 16 User s Guide 3 15 3 6 THE PRAGMA REGSUSED DIRECTIVE The pragma regsused directive allows the programmer to indicate register usage for functions that will not be seen by the code generator for example if they were writ ten in assembly code It has no effect when used with functions defined in C code but in these cases the register usage of these functions can be accurately determined by the compiler and the pragma is not required The compiler will determine only those registers and objects which need to be saved for an interrupt function defined and use of this pragma allows the code generator to also determine register usage for routines written in assembly code The general form of the pragma is pragma regsused routineName registerList where rout ineName is the C equivalent name of the function or routine whose register usage is being defined and registerList is a Space separated list of registers names as shown in Table 3 13 Those registers not listed are assumed to be unused by the function or routine The code generator ma
449. ption is used any matching sequences will be removed This function should be used with extreme caution and is not normally recommended for removal of executable code 6 6 1 9 FIND REPLACE If the REPLACE form of the FIND option is used any matching sequences will be replaced or partially replaced with new codes The usage for this sub option is FIND REPLACE Code mMask where e Code Is a little endian hexadecimal code to replace the sequences that match the FIND criteria e Mask is an optional bit mask to specify which bits within Code will replace the code sequence that has been matched This may be useful if for example it is only necessary to modify 4 bits within a 16 bit instruction The remaining 12 bits can masked and be left unchanged 6 6 1 10 FORMAT The FORMAT option can be used to specify a particular variant of INHX format or adjust maximum record length The usage of this option is FORMAT Type Length where e Type specifies a particular INHX format to generate e Length is optional and sets the maximum number of bytes per data record A valid length is between 1 and 16 with 16 being the default Consider the case of a bootloader trying to download an INHX3z2 file which fails because it cannot process the extended address records which are part of the INHX32 standard You know that this bootloader can only program data addressed within the 2010 Microchip Technology Inc DS51865B pa
450. r The expression which was the operand of the amp operator is not one that denotes mem ory storage an lvalue and therefore its address can not be defined e g DS51865B page 252 2010 Microchip Technology Inc ip amp 8 oops you can t take the address of a literal 202 only Ilvalues may be assigned to or modified Parser Only an lvalue i e an identifier or expression directly denoting addressable storage can be assigned to or otherwise modified e g Te array LUNs mE Tp ehar array ip array isn t a variable it can t be written to A typecast does not yield an Ivalue e g the contents of c cast to int is only a intermediate value int c 1 However you can write this using pointers Hne Fee H 203 illegal operation on bit variable Parser Not all operations on bit variables are supported This operation is one of those e g bit b Int S Ip ip bf JE oops cannot take the address of a bit object 204 void function can t return a value Parser A void function cannot return a value Any return statement should not be followed by an expression e g void run void step return 1 either run should not be void or remove the 1 205 integral type required Parser This operator requires operands that are of integral type only 206 illegal use of void expression Parser A void expression has no value and there
451. r s INCLUDE directive see Section 4 3 10 3 INCLUDE or use the C preprocessor s include directive If you are using the latter method make sure you compile with the P driver option to prepro cess assembly files see Section 2 7 11 P Preprocess Assembly Files The symbols in this header file look similar to the identifiers used in the C domain when including lt htc h gt e g PORTA EECON1 etc They are different symbols in different domains but will map to the same memory location Bits within registers are defined as the registerName bitNumber So for example RAO is defined aS PORTA 0 Here is an example of an assembly module that uses SFRs include lt aspic h gt GLOBAL _setports PSECT text class CODE local delta 2 _setports MOVLW OxAA BANKSEL PORTA MOVWE BANKMASK PORTA BANKSEL PORTB BSF RB1 If you wish to access register definitions from assembly that is in line with C code a different header file is available for this purpose Include the header file lt caspic h gt into the assembly code 2010 Microchip Technology Inc DS51865B page 101 HI TECH C for PIC10 12 16 User s Guide The symbols used for register names will be the same as those defined by lt aspic h gt however the names assigned to bit variables within the registers will include the suffix _bit So for example the example given previously could be rewrit ten as in line assembly as follows asm MOVLW
452. r ee a EE 18 ees eae ete seemed eee esas tee eee cates 27 error files OB ET enseia a Abee esl ect etee ao 35 EH 143 EI EE 35 44 117 GEERT EES 18 19 241 HEEN 35 43 elt EE 19 QUT RE 17 35 45 TOPTMAUUG siisninsivareaancedasaenndoanieniacaddaasbanded R 32 EE 27 43 101 104 riet EE 33 D EE 36 BI EE 157 a 36 104 maximum number of 32 PROTO EE 37 eval_poly FUNCTION oonnnnnennnnnnnnnnnnnnnnnnsnnnnnennnnnnne 192 E E Nese ace lec T EE asta 28 OND UNCON WEE 192 kee geed ege 37 46 EXPAND control an 132 136 ROM ee heeten ege ee ee 38 46 le E 57 SARICK RI EE 16 39 45 53 86 expressions Ee 28 ISSO e 124 SCAND EI erate ete ce ee eaa 40 Kleer le 124 EEN 40 F SE FOP HON eee ne tn ne oe Br ae ee en er eee 115 OETA 19 33 F constant suffix EE 66 E ENEE 40 tabs UNCON EE 193 STRICI EE 40 fatal error MESSAGES ENEE 19 SUMMARY k 41 45 fcall pseudo mstruchon 120 TIME 41 NE E Ee E 9 RE 28 43 file formats Wee lte 28 35 44 ASSEMDIY Tetmg EEN 29 WADN 21 41 44 Avocet symbol Eeer 147 WADNEODMAT 20 21 32 42 COMMMANG EE 157 EE 29 Creating with CrOMWEL Ee 162 driver options cross reference file 31 116 159 general FORMAL sien tewseteuvedeeisencatendnriiinawecdans 23 CFOSS reference IISTINGS En 31 RE Se 33 CEPONCENCY ENEE 40 DS directive EE 130 enhanced embol ENEE 144 DW directive EE 130 rom En 195 157 dynamic memory alocatton 80 EE 142 ODJECE eege 24 145 157 E EE 36 EEPROM Siten 37 al EE 51 SVIMDOl Ee eege 144 EEPRO
453. r handling This option allows the exact format of printed error messages to be specified using spe cial placeholders embedded within a message template See Section 2 6 Compiler Messages for full details of the messaging system employed by PICC and the place holders which can be used with this option This section is also applicable to the WARNFORMAT and MSGFORMAT options which adjust the format of warning and advisory messages respectively If you are compiling using MPLAB IDE the format of the compiler messages is auto matically configured to what the IDE expects It recommended that you do not adjust the message formats if compiling using this IDE 2 7 28 ERRORS Maximum Number of Errors This option sets the maximum number of errors each compiler application as well as the driver will display before execution is terminated By default up to 20 error mes sages will be displayed by each application see Section 2 6 Compiler Messages for full details of the messaging system employed by PICC 2 7 29 FILL Fill Unused Program Memory This option allows specification of a hexadecimal opcode that can be used to fill all unused program memory locations Multi byte codes should be entered in little endian byte order see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE DS51865B page 32 2010 Microchip Technology Inc PICC Command line Driver 2 7 30 F
454. r if you are using a compiler driver H invoking the linker manually ensure that only one instance of this option is present on the command line See Section 2 7 8 M Generate Map File for information on the correct syntax for this option 389 illegal or too many O options Linker This linker o flag is illegal or another o option has been encountered A o option to the linker must be immediately followed by a filename with no intervening space 390 missing argument to P Linker There have been too many p options passed to the linker or a p option was not fol lowed by any arguments The arguments of separate p options may be combined and separated by commas 391 missing argument to Q Linker The Q linker option requires the machine type for an argument 392 missing argument to U Linker The u undefine option needs an argument 393 missing argument to W Linker The w option listing width needs a numeric argument 394 duplicate D or H option Linker The symbol file name has been specified to the linker for a second time This should not occur if you are using a compiler driver If invoking the linker manually ensure that only one instance of either of these options is present on the command line 395 missing argument to J Linker The maximum number of errors before aborting must be specified following the j linker option 397 usage hlink options files obj files lib Linker
455. r is a bitfield An integral constant must appear after the colon to define the num ber of bits in the bitfield e g struct 4 unsigned first cops Should be unsigned firsts ed unsigned second my_struct If this was meant to be a structure with bitfields then the following illustrates an exam ple struct unsigned tivrst z 43 A Dits Wide 7 unsigned second 4 another 4 bits my_struct 266 storage class illegal Parser A structure or union member may not be given a storage class Its storage class is determined by the storage class of the structure e g struct no additional qualifiers may be present with members static Int ErLrst E 267 bad storage class Code Generator The code generator has encountered a variable definition whose storage class Is invalid e g auto int foo auto not permitted with global variables int power static int a parameters may not be static return foo sas 268 inconsistent storage class Parser A declaration has conflicting storage classes Only one storage class should appear in a declaration e g extern static int where so is it static or extern 269 inconsistent type Parser Only one basic type may appear in a declaration e g inte float Tie fF is 1t Int or float 47 270 variable can t have storage class register Parser Only function parameters or auto variables may be declared using the
456. r two minus signs in the case of multi letter options The assembler options must be specified on the command line before any files 2010 Microchip Technology Inc DS51865B page 115 HI TECH C for PIC10 12 16 User s Guide A full list of possible options is given in Table 4 1 and a full description of each option follows TABLE 4 1 ASPIC COMMAND LINE OPTIONS Option Meaning faut Fa Produce assembler output Produce object code Ke Produce cross reference tie No cross reference Cem aghi Sat rer destnatontormat OOOO Henan Seiston 66 o Output HEX values for Decimal values constants pz usta expansions Jemen Cx sabe merang optimizations Merging opimizalons enabled o Perform optimization No optimizaton Fe d Sey non standar ROM Coman Secure 80S Fv Produce fine number info No ine numbers VER version Specify full version information for list file title meei L t 0S EE nee Specty devicename spr pach Specty message fle location EMAX number Specify maximum number of errors 4 2 OPTIONS The command line options recognized by ASPIC are described in the followings sections 4 2 1 A Generate Assembly File An assembler file will be produced if this option is used rather than the usual object file format This is useful when checking the optimized assembler produced using the 0 optimization option By default the output file will an extension opt unless the
457. r usage of these command line options Hexmate More detailed information is available for a specific option by passing that option to the HELP option 1033 available command line options Hexmate This is a simple heading that appears before the list of available options for this appli cation 1034 type for available options Hexmate lt looks like you need help This advisory suggests how to get more information about the options available to this application or the usage of these options DS51865B page 322 2010 Microchip Technology Inc 1035 bad argument count Parser The number of arguments to a function is unreasonable This is an internal compiler error Contact HI TECH Software technical support with details 1036 bad optional header length 0x expected Cromwell The length of the optional header in this COFF file was of an incorrect length 1037 short read on Cromwell When reading the type of data indicated in this message it terminated before reaching its specified length 1038 string table length too short Cromwell The specified length of the COFF string table is less than the minimum 1039 inconsistent symbol count Cromwell The number of symbols in the symbol table has exceeded the number indicated in the COFF header 1040 bad checksum record 0x checksum 0x Cromwell A record of the type specified failed to match its own checksum value 1041 short recor
458. r will automatically declare the function to be of type int with unspecified K amp R style parameters If a definition of the function is subsequently encountered it is possible that its tyoe and arguments will be different from the earlier implicit declaration causing a compiler error The solution is to ensure that all functions DS51865B page 272 2010 Microchip Technology Inc are defined or at least declared before use preferably with prototyped parameters If it is necessary to make a forward declaration of a function it should be preceded with the keywords extern Or static as appropriate For example may PLEVent an error arising from calls below void sert long a int b void main void by here a prototype for set should have seen set 10L 6 362 redundant amp applied to array Parser The address operator amp has been applied to an array Since using the name of an array gives its address anyway this is unnecessary and has been ignored e g rnt array 5 InG SERA array is a constant not a variable the amp is redundant ip array 363 redundant amp or applied to function address Parser The address operator amp has been applied to a function Since using the name of a function gives its address anyway this is unnecessary and has been ignored e g extern void Too void void main void void bar void both assignments are equiv
459. rage class specifier 6 5 1 This specifier has no effect A 9 STRUCTURES UNIONS ENUMERATIONS AND BIT FIELDS G3 9 A 9 1 A member of a union object is accessed using a member of a different type 6 3 2 3 The value stored in the union member is accessed and interpreted according to the type of the member by which it is accessed A 9 2 The padding and alignment of members of structures 6 5 2 1 No padding or alignment is imposed on structure members A 9 3 Whether a plain int bit field is treated as a signed int bit field or as an unsigned int bit field 6 5 2 1 It is treated as an unsigned int Signed bit fields are not supported A 9 4 The order of allocation of bit fields within an int 6 5 2 1 The first bit field defined in a structure is allocated the least significant bit position in the storage unit Subsequent bit fields are allocated higher order bits A 9 5 Whether a bit field can straddle a storage unit boundary 6 5 2 1 A bit field may not straddle a storage unit Any bit field that would straddle a storage unit will be allocated to the least significant bit position in a new storage unit E DS51865B page 346 2010 Microchip Technology Inc Implementation Defined Behavior A 10 A 11 A 12 A 13 A 9 6 The integer type chosen to represent the values of an enumeration type 6 5 2 2 The type chosen to represent an enumerated type depend on the enumerated values A signed type is chosen if a
460. rc IERT 1258 possible stack overflow when calling function Code Generator The call tree analysis by the code generator indicates that the hardware stack may overflow This should be treated as a guide only Interrupts the assembler optimizer and the program structure may affect the stack usage The stack usage is based on the C program and does not include any call tree derived from assembly code 1259 can t optimize for both speed and space Driver The driver has been given contradictory options of compile for soeed and compile for space e g opt speed space 1260 macro redefined Assembler More than one definition for a macro with the same name has been encountered e g MACRO fin ret ENDM MACRO fin oops was this meant to be a different macro reti ENDM 1261 string constant required Assembler A string argument is required with the DS or DSU directive e g DS ONE oops did you mean DS ONE 1262 object lies outside available space Code Generator An absolute variable was positioned at a memory location which is not within the mem ory defined for the target device e g int data H 0x800 E GOpsS is this Ene correct address SE 1264 unsafe pointer conversion Code Generator A pointer to one kind of structure has been converted to another kind of structure and the structures do not have a similar definition e g struct ONE unsigned a l ng
461. rd type Linker There is an error in an object file This is either an invalid object file or an internal error in the linker Contact HI TECH Support with details if the object file was created by the compiler 424 record too long Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 425 incomplete record Objtohex Libr The object file passed to OBJTOHEX or the librarian is corrupted Contact HI TECH Support with details DS51865B page 278 2010 Microchip Technology Inc 427 syntax error in checksum list Objtohex There is a syntax error in a checksum list read by OBJTOHEX The checksum list is read from standard input in response to an option 428 too many segment fixups Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 429 bad segment fixups Objtohex This is an internal compiler error Contact HI TECH Software technical support with details 430 bad checksum specification Objtohex A checksum list supplied to OBJTOHEX Is syntactically incorrect 431 bad argument to E Objtoexe This option requires an integer argument in either base 8 10 or 16 If you are invoking ob jtoexe directly then check this argument Otherwise this may be an internal com piler error and you should contact HI TECH Software technical support with details 432 usage objtohex ssymfile object file exe file
462. re FLASH ERASE FLASH READ Synopsis include lt hte h gt void flash_erase unsigned short addr unsigned int flash read unsigned short addr Description These functions allow access to the Flash memory of the microcontroller if supported Reading from the Flash memory can be done one word at a time with use of the flash_read function flash_read returns the data value found at the specified word address in Flash memory Entire sectors of 32 words can be restored to an unprogrammed state value FF with use of the flash_erase function Specifying an address to the flash_erase function will erase all 32 words in the sector that contains the given address a aaa El DS51865B page 194 2010 Microchip Technology Inc Library Functions FMOD Example include lt htc h gt void main void unsigned int data unsigned short address 0x1000 data flash_read address flash_erase address Return Value flash_read returns the data found at the given address aS an unsigned int Note The functions flash_erase and flash_read are only available on those devices that support such functionality Synopsis include lt math h gt double fmod double x double y Description The function fmod returns the remainder of x y as a floating point quantity Example include lt math h gt void main void double rem x x 12 34 rem fmod xy 2 1 3 Return V
463. re using a linker that is out of date or that there is an internal error in the assembler or linker Contact HI TECH Support with details if the object file was created by the com piler 510 complex relocation not supported for R or L options Linker The linker was given a R or L option with file that contain complex relocation 511 bad complex range check Linker This is an internal compiler error Contact HI TECH Software technical support with details 512 unknown complex operator 0x Linker This is an internal compiler error Contact HI TECH Software technical support with details 513 bad complex relocation Linker The linker has been asked to perform complex relocation that is not syntactically cor rect Probably means an object file is corrupted 514 illegal relocation type Linker An object file contained a relocation record with an illegal relocation type This probably means the file is corrupted or not an object file Contact HI TECH Support with details if the object file was created by the compiler 2010 Microchip Technology Inc DS51865B page 289 HI TECH C for PIC10 12 16 User s Guide 515 unknown symbol type Linker This is an internal compiler error Contact HI TECH Software technical support with details 516 text record has bad length 1 lt 0 Linker This is an internal compiler error Contact HI TECH Software technical support with details 520 functio
464. re added Thus the option L1 when compiling for a 16F877A will for example scan the library pic42c 1 1ib and the option Lxx will scan a library called pic42c xx 1lib All libraries must be located in the 1ib directory of the compiler installation directory As indicated the argument to the L option is not a complete library filename If you wish the linker to scan libraries whose names do not follow the above naming conven tion or whose locations are not in the 1ib subdirectory simply include the libraries names on the command line along with your source files or add these to your project 2 7 7 L Adjust Linker Options Directly The 1 driver option can be used to specify an option which will be passed directly to the linker If L is followed immediately by text starting with a dash character the text will be passed directly to the linker without being interpreted by PICC If the L option is not followed immediately by a dash character it is assumed the option is the library scan option Section 2 7 6 L Scan Library For example if the option L N is specified the N option will be passed on to the linker without any subsequent interpretation by the driver The linker will then process this option when and if it is invoked and perform the appropriate operation Take care with command line options The linker cannot interpret command line driver options similarly the driver cannot interpret linker optio
465. re first grouped in an order strictly determined by the lexical order in which they appear in the source code These are then followed by any auto objects however the auto objects may be placed in any order So we see mem ory for a is followed by that for b and lastly c Once these variables have been grouped the exact location of each object is not important at this point and we can represent this memory by one block the APB for this function The APBs are formed for all functions in the program Then by analyzing the call graph these blocks are assigned positions or bases values in the compiled stack Memory can be saved if the following point is observed If two functions are never active at the same time then their APBs can be overlapped In the example shown in the figure F4 and F1 are active at the same time in fact F1 calls F4 However F2 F3 and F1 are never active at the same time F1 mustreturn before F2 or F3 can be called by main The function main will always be active and so its APB can never overlap with that of an other function In the compiled stack you can see that the APB for main is allocated unique mem ory The blocks for F1 F2 and F3 are all placed on top of each other and the same base value in the compiled stack however the memory taken up by the APBs for F1 and F4 are unique and do not overlap Our example also has an interrupt function isr and It
466. re tells us main has 6 bytes of memory allo cated at an offset of 4 in the compiled stack section that lives in common memory It also has 4 bytes of memory allocated in bank 0 memory at an offset of 16 in the bank 0 compiled stack component Below the information for main outside the orange box you will see the same infor mation repeated for the functions that main called viz rv rvx and rvy Indentation is used to indicate the maximum depth that function reaches in the call graph The arrows in the figure highlight this indentation After each tree in the call graph there is an indication of the maximum call stack depth that might be realized by that tree This may be used as a guide to the stack usage of the program No definitive value can be given for the program s total stack usage for several reasons e Certain parts of the call tree may never be reached reducing that tree s stack usage e The contribution of interrupt or other trees to the main tree cannot be deter mined as the point in main s Call tree at which the interrupt or other function invocation will occur cannot be known e The assembler optimizer may have replaced function calls with jumps to functions reducing that tree s stack usage e The assembler s procedural abstraction optimizations may have added in calls to abstracted routines Checks are made to ensure this does not exceed the maximum stack depth The code generator a
467. re used in the program The compiler tracks the memory location of all targets as well as the size of all targets to determine the size and scope of a pointer The size of a target is important as well particularly with arrays of structures A pointer must be able to be incremented to point to all the elements of an array for example There are several pointer classifications used with the HI TECH C Compiler for PIC10 12 16 MCUs such as those indicated below e An 8 bit pointer capable of accessing common memory and two consecutive banks e g banks 0 and 1 or banks 7 and 8 etc e A 16 bit pointer capable of accessing the entire data memory space e An 8 bit pointer capable of accessing up to 256 bytes of program space data e A 16 bit pointer capable of accessing up to 64 kbytes of program space data e A 16 bit pointer capable of accessing the entire data space memory and up to 64 2010 Microchip Technology Inc DS51865B page 61 HI TECH C for PIC10 12 16 User s Guide kbytes of program space data Each data pointer will be allocated one of the available classifications after preliminary scans of the source code There is no mechanism by which the programmer can spec ify the style of pointer required other than by the assignments to the pointer If the C code does not convey the required information to the compiler then it is not complete or accurate Information about the pointers and their targets are shown in the
468. ready the tag for an enumer ated type and thus should only follow the keyword enum e g enum IN ONE 1 TWO struct IN oops IN is already defined int ay EC J 979 this identifier is already a struct tag Parser This identifier following a union or enum keyword is already the tag for a structure and thus should only follow the keyword struct e g struct IN EE ap Jog J enum IN ONE 1 TWO oops IN is already defined 980 this identifier is already a union tag Parser This identifier following a struct or enum keyword is already the tag for a union and thus should only follow the keyword union e g union IN LoG arn D J enum IN ONE 1 TWO oops IN is already defined 981 pointer required Parser A pointer is required here e g struct DATA dataj data gt a 9 ZS data is a structure not a pointer toe at structure 2010 Microchip Technology Inc DS51865B page 319 HI TECH C for PIC10 12 16 User s Guide Wu 982 unknown op in nxtuse Assembler This is an internal compiler error Contact HI TECH Software technical support with details 983 storage class redeclared Parser A variable previously declared as being static has now be redeclared as extern 984 type redeclared Parser The type of this function or object has been redeclared This can occur because of two incompatible declarations or because an implicit declaration is
469. rectly processed and for determining the exact placement of objects and functions It also shows all the unused memory areas in a device and memory fragmentation See Section 5 4 Map Files for complete information on the contents of this file There is one map file produced when you build a project assuming the linker was exe cuted and ran to completion The file will be assigned the project name and map extension 2 6 COMPILER MESSAGES All compiler applications including the command line driver PICC use textual mes sages to report feedback during the compilation process A centralized messaging sys tem is used to produce the messages which allows consistency during all stages of the compilation process 2 6 1 Messaging Overview A message is referenced by a unique number which is passed to the messaging sys tem by the compiler application that needs to convey the information The message string corresponding to this number is obtained from Message Description Files MDF which are stored in the dat directory in the compiler s installation directory When a message is requested by a compiler application its number is looked up in the MDF that corresponds to the currently selected language The language of messages can be altered as discussed in Section 2 6 2 Message Language Once found the alert system can read the message type and the string to be displayed from the MDF There are several different message types
470. rectve 98 113 135 signatures CHECKING EE 113 GETING merane a caecum 135 FUNCION EE 113 EH IR 135 SI TUNIC HOR est sate ee Ee 219 Single step Compilatpon 12 13 SINMTUNCUON cose aie ee held te et 187 size limits auto EE e 77 const variables eseu gees Dutgeeeeeeree 78 NON AUtO variables cccccceesseeeeeeeeeeeeeeeeeeeeens 72 size Of doubles ccceececcccaseeseeeeecceeeeeeessanaaeeeeess 32 size Ol TOA inonsan accortel acento ee ce 33 SIZE PSEC I TAG E 129 SKIPPING applications nonnsnneenneennneennnnesnneeenenneen 40 SLEEP AMAGCKO EE 219 SOC EME aio E 9 source level debugging csseseeececeeeeeeeeeseeeeeeees 162 sources directory ccccccseseececeseeecceeseeeceeesseessaeseees 95 SPACE COMI Ol gearen en ee 137 space PSECT flag iscri aaa 129 Special function registere 49 Special type qualifiers ccceceeeeeeeceeeeeeeneeeeeesaeeeees 68 SPONS Cal e Dees 122 SOMME TUMCUON iieri ART 220 SOTUN UO esaeren n aa jek ses 220 sranda baue te 221 SSCA EENEG 222 e 48 COMPIE EE 73 74 0 a1 6 9 EE 140 Nardwar esson 48 73 SU e 48 Standard library fie 15 Samael EE 95 STOVE FOCOMG hs a dE Aaa 126 DS51865B page 362 Sltarup MOdUIle 2 244 snk eeetiact Sena 39 SUID Aeon 16 static TUNCHONS E 83 100 static varta bles 72 94 101 STATUS register IESSEN cnr nnna aia a aa a 95 storage durato EE 71 Seat TUNC UON RE 222 SIP CIF TUNCUON eege 223 SKEEHOET NEEN 224
471. register qualifier e g register int gi d Chis cannot be gualiftied registr int process register int anputy this Tts okay Pe Curm Mowe f GL 271 type can t be long Parser Only int and float can be qualified with Long 2010 Microchip Technology Inc DS51865B page 261 HI TECH C for PIC10 12 16 User s Guide Long char eo 7 what 77 272 type can t be short Parser Only int can be modified with short e g short float st what y 273 type can t be both signed and unsigned Parser The type modifiers signed and unsigned cannot be used together in the same dec laration as they have opposite meaning e g signed Unsigned int confused Z7 which Ze a0 et 274 type can t be unsigned Parser A floating point type cannot be made unsigned e g unsigned float uf what 275 ilegal in non prototype argument list Parser The ellipsis symbol may only appear as the last item in a prototyped argument list It may not appear on its own nor may it appear after argument names that do not have types i e K amp R style non prototype function definitions For example ZS K amp R style non prototyped function definition int kandr a D int a b d 276 type specifier required for prototyped argument Parser A type specifier is required for a prototyped argument It is not acceptable to just have an identifier 277 can t mix prototyped an
472. relating to the version and build of CREF CREF will termi nate after processing this option even if other options and files are present on the com mand line 2010 Microchip Technology Inc DS51865B page 161 HI TECH C for PIC10 12 16 User s Guide 6 5 CROMWELL The CROMWELL utility converts code and symbol files into different formats These files are typically used by debuggers and allow source level debugging of code The output formats available are shown in Table 6 5 TABLE 6 5 CROMWELL FORMAT TYPES bel Fame e a The CROMWELL application is automatically executed by the command line driver when required The following information is required if running the application manually The general form of the CROMWELL command ts CROMWELL options inputFiles okey outputFile where options Can be any of the options shown in Table 6 6 TABLE 6 6 CROMWELL COMMAND LINE OPTIONS Option S Description e mp input fle L Specify big endian byte ordering VER Print version number and stop The outputFile optional is the name of the output file The inputFiles are typically the HEX and SYM file CROMWELL automatically searches for the SDB files and reads those if they are found The options are further described in the following paragraphs DS51865B page 162 2010 Microchip Technology Inc Utilities 6 5 1 Pname architecture The P options takes a string which is the name of the processor
473. required Parser Only a function or function pointer can be the subject of a function call e g int az Dy Cj d a b c d b is not a function did you m an a b ctd DS51865B page 250 2010 Microchip Technology Inc 184 calling an interrupt function is illegal Parser A function qualified interrupt can t be called from other functions It can only be called by a hardware or software interrupt This is because an interrupt function has special function entry and exit code that is appropriate only for calling from an inter rupt An interrupt function can call other non interrupt functions 185 function does not take arguments Parser Code Generator This function has no parameters but it is called here with one or more arguments e g int get_value void void main void WO hou input g t value 6 oops parameter should not be here 186 too many function arguments Parser This function does not accept as many arguments as there are here void add int a int b addito Te input call has too many arguments 187 too few function arguments Parser This function requires more arguments than are provided in this call e g void add int a int b add Cart this call needs more arguments 188 constant expression required Parser In this context an expression is required that can be evaluated to a constant at compile time e g Int Sr switch
474. ress indicated in the C source code the linker options that position them should not be changed 3 10 1 2 DATA SPACE PSECTS nv These psects are used to store variables qualified persistent They are not cleared or otherwise modified at startup These psects may be linked anywhere in their targeted memory bank and should not overlap any common unbanked memory that the device sup ports if it is a banked psect bss These psects contain any uninitialized variables These psects may be linked anywhere in their targeted memory bank and should not overlap any common unbanked memory that the device sup ports if it is a banked psect data These psects contain the RAM image of any initialized variables These psects may be linked anywhere in their targeted memory bank and should not overlap any common unbanked memory that the device sup ports if it is a banked psect cstack These psects contain the compiled stack On the stack are auto and param eter variables for the entire program See 3 5 4 Absolute Variables for in formation on the compiled stack These psects may be linked anywhere in their targeted memory bank and should not overlap any common unbanked memory that the device sup ports if it is a banked psect 3 11 MAIN RUNTIME STARTUP AND RESET The identifier main is special It is must be used as the name of a function that will be the first function to execute in a program You must always have one and only one func
475. return from interrupt instruction is executed This contrasts with main line code which for a free standing application is usually the main part of the program that executes after reset 3 9 1 Writing an Interrupt Service Routine The function qualifier interrupt may be applied to C function definitions to allow them to be called directly from the hardware interrupts The compiler will process the interrupt function differently to any other functions generating code to save and restore any registers used and return using a special instruction If the PICC option STRICT is used the interrupt keyword becomes lt Ineerrupe An interrupt function must be declared as type void interrupt and may not have parameters This is the only function prototype that makes sense for an interrupt func tion since they are never directly called in the source code Interrupt functions must not be called directly from C code due to the different return instruction that is used but they themselves may call other functions both user defined and library functions Mid Range PIC devices have many sources of interrupt but only one interrupt vector and hence only one interrupt function must be written An error will result if more than one interrupt function exists in a program An example of an interrupt function for a Mid Range PIC MCU processor is shown here int tick count SEELEN INtCeErr pt tC ne void if TOIE amp amp TOIF 4 TOIF
476. riable do not override the information contained in the registry or XML file The MPLAB IDE allows the compiler to be selected via a dialog and execution of the com piler does not depend on the PATH variable DS51865B page 8 2010 Microchip Technology Inc PICC Command line Driver 2 2 3 Input File Types PICC distinguishes source files intermediate files and library files solely by the file type or extension Recognized file types are listed in Table 2 1 Alohabetic case of the extension is not important from the compiler s point of view but most operating system shells are case sensitive TABLE 2 1 PICC INPUT FILE TYPES Filetype Meaning peepee fle o ies poode tibrary file S ES This means for example that a C source file must have a c extension Assembler files can use either as or asm extensions The terms source file and module are often used when talking about computer programs They are often used interchangeably but they refer to the source code at different points in the compilation sequence A source file is a file that contains all or part of a program Source files are initially passed to the preprocessor by the driver A module is the output of the preprocessor for a given source file after inclusion of any header files or other source files which are specified by include preprocessor directives These modules are then passed to the remainder of the compiler applications Thus a modu
477. rial number specified has exceeded the maximum number allowed for the license 1185 invalid serial number Activation During activation no matching serial number was found on the HI TECH activation server database DS51865B page 326 2010 Microchip Technology Inc 1186 licence has expired Driver The time limited license for this compiler has expired 1187 invalid activation request Driver The compiler has not been correctly activated 1188 network error Activation The compiler activation software was unable to connect to the HI TECH activation server via the network 1190 FAE license only not for use in commercial applications Driver Indicates that this compiler has been activated with an FAE licence This licence does not permit the product to be used for the development of commercial applications 1191 licensed for educational use only Driver Indicates that this compiler has been activated with an education licence The educa tional licence is only available to educational facilities and does not permit the product to be used for the development of commercial applications 1192 licensed for evaluation purposes only Driver Indicates that this compiler has been activated with an evaluation licence 1193 this licence will expire on Driver The compiler has been installed as a time limited trial This trial will end on the date specified IERT 1195 invalid syntax for
478. ring constants or string literals are enclosed by double quote characters for exam ple hello world The type of string constants is const char andthe character that make up the string are stored in the program memory as are all objects qualified EE Assigning a string literal to a pointer to anon const char will generate a warning from the compiler This code is legal but the behavior if the pointer attempts to write to the string will fail For example char ZS lt cp one one in ROM produces warning Const Char gt cepa two 7e ewo In ROM correct DS51865B page 66 2010 Microchip Technology Inc C Language Features Defining and initializing anon const array i e not a pointer definition with a string for example char call two two different to the above is a special case and produces an array in data space which is initialized at startup with the string two copied from program space whereas a string constant used in other contexts represents an unnamed const qualified array accessed directly in program space The HI TECH C compiler will use the same storage location and label for strings that have identical character sequences except where the strings are used to initialize an array residing in the data space as shown in the last statement in the previous example For example in the code snippet if strncemp scp hello 6 0 fred OU Te Sseroemp scp wora EE fr
479. rmed with char type operands but with int type operands However there are circumstances when the result of an operation is identical regardless of whether the operands are of type char or int In these cases the HI TECH C compiler will not per form the integral promotion so as to increase the code efficiency Consider the following example unsigned char a b c ae O te Cy Strictly soeaking this statement requires that the values of b and c should be promoted to unsigned int the addition performed the result of the addition cast to the type of a and then the assignment can take place Even if the result of the unsigned int addition of the promoted values of b and c was different to the result of the unsigned char addition of these values without promotion after the unsigned int result was converted back to unsigned char the final result would be the same If an 8 bit addi tion is more efficient than a 16 bit addition the compiler will encode the former If in the above example the type of a was unsigned int then integral promotion would have to be performed to comply with the ANSI C standard 3 6 2 Rotation The C language does not specify a rotate operator however it does allow shifts The compiler will detect expressions that implement rotate operations using shift and logical operators and compile them efficiently For the following code C Ke SE wb Gere ye if c iS unsigned and non volatile the compiler will detec
480. rt with details 731 expression error with reserved word Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 732 initialization of bit types is illegal Code Generator Variables of type bit cannot be initialized e g DIE Hoa Le E eer bL must be assigned after its definition 733 bad string in pragma psect Code Generator The code generator has been passed a pragma psect directive that has a badly formed string e g pragma psect text redirect text psect into what Maybe you meant something like pragma psect text special_text 734 too many psect pragmas Code Generator Too many pragma psect directives have been used 2010 Microchip Technology Inc DS51865B page 299 HI TECH C for PIC10 12 16 User s Guide 735 bad string in pragma stack_size Code Generator The argument to the stack_size pragma is malformed This pragma must be followed by a number representing the maximum allowed stack size TP a 737 unknown argument to pragma switch Code Generator The pragma switch directive has been used with an invalid switch code generation method Possible arguments are auto simple and direct 739 error closing output file Code Generator The compiler detected an error when closing a file Contact HI TECH Support with details 740 zero dimension array is illegal Code Generator The code generator
481. rupt_level pragma has been used with the function specified This pragma may be used more than once on main line functions that are called from interrupt functions For example pragma interrupt_level 0 fpragma imeerrupt level 1 4 which is 1t to ber sor 2 7 void interrupt isr void 693 interrupt level may only be 0 default or 1 Code Generator The only possible interrupt levels are 0 or 1 Check to ensure that all interrupt_level pragmas use these levels foragma interrupt level gt oops gt only H eg 1 void interrupt isr void d isr Code Goes here y 694 no interrupt strategy available Code Generator The processor does not support saving and subsequent restoring of registers during an interrupt service routine 695 duplicate case label Code Generator There are two case labels with the same value in this switch statement e g Switch in Case VOC Zr ak this is case TO ueg b break case 0 then what is this case ees break 696 out of range case label Code Generator This case label is not a value that the controlling expression can yield and thus this label will never be selected 697 non constant case label Code Generator A case label in this switch statement has a value which is not a constant 698 bit variables must be global or static Code Generator A bit variable cannot be of type auto If you require a bit variable wi
482. s EE 59 CONf gUrat ON DitS ccecccccceseecececeesesecseseseseesesereeseeees 49 It Ee BEE 59 const objects e LLG Lco ENEE 59 initialization EE 67 bitset MACO EE 51 storage Jocstlon 77 bitwise complement Operator eesti 81 CONST qualifier sssri ei aiia 67 78 Seite Le 38 39 168 169 constants bsearch functio Meee a 183 ASSOMDIY csececsececseseceeseseeseseesesesesersesesseseveeeees 1241 DSS DSCC E 71 93 94 eene EE 65 building projects cs eee eae 13 character oooooooooooooooooooeoooeoooeooeooooooooo cece 66 C string see string literals ak 66 C standard libraries ccccccsseeeceeessseeseeeeeseeeeeeeeees 15 Ge gel R EE GE e UR e EE 140 coniro qua mer E a ee ge Seek tenes De ace Ge Call raph osiinsa 48 74 89 139 GE 9y 2010 Microchip Technology Inc DS51865B page 353 HI TECH C for PIC10 12 16 User s Guide CODVIGNE lee 28 COS TUMCIIOM WEE 186 COSI NGUO oiis ana S 187 cHUtS elle e EE 187 ee ee EE 116 137 159 CREF option eebe 160 SE 160 W 160 E 160 eege 160 EEN 160 edel 161 CREF OPUONS cee aaa Mui E 159 160 CROMWELL application ccccceeseeeeeeeeeeees 17 162 CROMWELL option Dee 164 Kleer 163 BEE 163 Eege 164 Eeer 163 Keele 163 ee 164 VE 164 KEE 163 EE 163 SE 163 eebe eege 164 CROMWELL options nnnnnnnoenneneanannnnnnnnnnsennnnnnnni 162 cross TElErENCe Deeg Seege Ascecendecsecodeeeasi Ee 116 cross reference files ccccseeeeeceeeeeeeeeeseees 116
483. s as appropriate to correctly copy one block to another that overlaps it See Also gtetnepy EE EEN E Strchir memepy Return Value The function memmove returns its first argument 2010 Microchip Technology Inc DS51865B page 209 HI TECH C for PIC10 12 16 User s Guide MEMSET MKTIME Synopsis include lt string h gt void memset void s int c size_t n Description The memset function fills n bytes of memory starting at the location pointed to by s with the byte c Example include lt string h gt include lt stdio h gt void main void char abuf 20 stropy abut IS a String memset abut Tx Sch princi H se An abut See Also strncpy strncemp strchr memcpy memchr Synopsis include lt time h gt time_t mktime struct tm tmptr Description The mkt ime function converts the local calendar time referenced by the tm structure tmptr into a time being the number of seconds passed since Jan 15t 1970 or 1 if the time cannot be represented Example include lt time h gt include lt stdio h gt void main void EE tm birthday birthday tm_year 1955 birouhday tm mon 27 birthday tm_mday 24 birchday bm hour barthday tm man Dirthday ti seo 03 printf have been alive approximately Sld seconds n mktime amp birthday DS51865B page 210 2010 Microchip Technology Inc Library Funct
484. s call graph is used to assem ble the APBs for any interrupt code in the same way Being the root of a graph isr will always be allocated unique memory and the APBs for interrupt functions will be allocated memory following The end result is a block of memory which forms the compiled stack This block can then be placed into the device s memory by the linker DS51865B page 76 2010 Microchip Technology Inc C Language Features For devices with more than one bank of data memory the compiled stack may be built up into components each located in a different memory bank The compiler will try to allocate the compiled stack in one bank but if this fills it will consider other banks The process of building these components of the stack is the same but each APB will be allocated to one of the stack components based on the remaining memory in the com ponent s destination bank Human readable symbols are defined by the code generator which can be used to access auto and parameter variables in the compiled stack from assembly code if required See Section 3 13 3 1 Equivalent Assembly Symbols for full information between C domain and assembly domain symbols 3 5 2 3 Auto Variable Size Limits The compiled stack is built up as one contiguous block which can be placed into one of the available data banks However if the stack becomes too large for this space it can be assembled into several blocks with each block being po
485. s directive performs a similar function to the preprocessor s define directive see Section 3 15 1 Preprocessor Directives 4 3 9 7 DB The DB directive is used to initialize storage as bytes The argument is a comma sep arated list of expressions each of which will be assembled into one byte and assembled into consecutive memory locations Examples alabel DB 7X 1 2 3 4 Note that because the size of an address unit in the program memory is 2 bytes see Section 4 3 9 3 4 Delta the DB pseudo op will initialise a word with the upper byte set to zero So the above example will define bytes padded to the following words 0058 0001 0002 0003 0004 4 3 9 8 DW The Dw directive operates in a similar fashion to DB except that it assembles expressions into words Example DW 1 3664h Ai 43 9 9 DS This directive reserves but does not initialize memory locations The single argument is the number of bytes to be reserved This directive is typically used to reserve memory location for RAM based objects in the data memory If used in a psect linked into the program memory it will move the location counter but not place anything in the HEX file output Note that because the size of an address unit in the program memory Is 2 bytes see Section 4 3 9 3 4 Delta the DS pseudo op will actually reserve an entire word A variable is typically defined by using a label and then the Ds directive to reserve locations at the l
486. s held by the type on this implementation TABLE 3 6 RANGES OF FLOATING POINT TYPE VALUES Symbol Meaning 24 bit Value 32 bit Value Radix of exponent representation El Rounding mode for addition XXX MIN EXP Min n such that FLT RADIX is Ek E a normalized float value XXX MIN _10 EXP Min nsuch that 10 is a normalized float value XXX MAX EXP Max n such that FLT RADIX is a normalized float value XXX MAX 10 EXP Max n such that 10 is a normalized float value XXX MANT DIG Number of FLT RADIX mantissa digits XXX EPSILON The smallest number which 3 051 76e 05 1 19209e 07 added to 1 0 does not yield 1 0 3 4 3 Structures and Unions HI TECH C Compiler for PIC10 12 16 MCUs supports struct and union types Structures and unions only differ in the memory offset applied to each member These types will be at least 1 byte wide The members of structures and unions may not be objects of type bit but bit fields are fully supported Structures and unions may be passed freely as function arguments and function return values Pointers to structures and unions are fully Supported DS51865B page 58 2010 Microchip Technology Inc C Language Features 3 4 3 1 STRUCTURE AND UNION QUALIFIERS The HI TECH C compiler supports the use of type qualifiers on structures When a qualifier is applied to a structure all of its members will inherit this qualification In the following example the structure is qualified const
487. s if this is what you require The compiler will not locate ordinary variables over the top of absolutes so there is no over lap between these objects Defining absolute objects can fragment memory and may make it impossi ble for the linker to position other objects Avoid absolute objects if at all possible If absolute objects must be defined try to place them at either end of a memory bank or page so that the remaining free memory is not frag mented into smaller chunks When compiling for an enhanced Mid Range PIC device the memory allocated for some objects may be spread over multiple RAM banks Such objects will only ever be accessed indirectly in assembly code and will use the linear GPR memory imple mented on these devices A linear address which can be mapped back to the ordinary banked address will be used with these objects internally by the compiler The address specified for absolute objects on these devices may either be the tradi tional banked memory address or the linear address As the linear addresses start above the largest banked address it is clear which address is intended In the following example ine bp putBurrer 100 0320007 it is clear that inputBuffer should placed at address 0x2000 in the linear address space which is address 0x20 in bank 0 RAM in the traditional banked address space See the device data sheet for exact details regarding your selected device 3 5 4 2 ABSOLUTE OBJECTS IN PROGRA
488. s is an internal compiler error Contact HI TECH Software technical support with details 234 close error Parser This is an internal compiler error Contact HI TECH Software technical support with details 236 simple integer expression required Parser A simple integral expression is required after the operator used to associate an absolute address with a variable e g int address char LOCK address 237 function redefined Parser More than one definition for a function has been encountered in this module Function overloading is illegal e g int twice int a return a 2 Only one prototype amp d finition Of rv can exist long twice long a return a 2 238 illegal initialization Parser You can t initialize a typedef declaration because it does not reserve any storage that can be initialized e g DS51865B page 256 2010 Microchip Technology Inc oops Uint Te a type not a variable typedef unsigned int uint 99 239 identifier redefined from line Parser This identifier has already been defined in the same scope It cannot be defined again e g int a a filescope variable called a int a attempting to define another of the same name Note that variables with the same name but defined with different scopes are legal but not recommended 240 too many initializers Parser There are too many initializers for this objec
489. s used to invoke each of the compiler applications described in Section 2 3 The Compilation Sequence The name of the compiler application being executed will be displayed plus all the command line arguments to this application This option is useful for confirming options and files names passed to the compiler applications If this option is used twice v NL it will display the full path to each compiler applica tion as well as the full command line arguments This would be useful to ensure that the correct compiler installation is being executed if there is more than one compiler installed see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE DS51865B page 28 2010 Microchip Technology Inc PICC Command line Driver 2 7 16 X Strip Local Symbols The option X strips local symbols from any files compiled assembled or linked Only global symbols will remain in any object files or symbol files produced This option is not normally required for most projects 2 7 17 ASMLIST Generate Assembler List Files The ASMLIST option tells PICC to generate assembler listing files for the and assembly source modules being compiled One assembly list file is produced for the entire C program including code from the C library functions In addition one assembly list file is produced for each assembly source file in the proj ect including the runtime startup code see Section
490. se types Floating point types are always signed and the unsigned keyword is illegal when specifying a floating point type Types declared as long dou DS51865B page 56 2010 Microchip Technology Inc C Language Features ble will use the same format as types declared as double All floating point values are represented in little endian format with the Least Significant Byte at the lower address This format is described in Table 3 4 where e Sign is the sign bit which indicates if the number is positive or negative e The exponent is 8 bits which is stored as excess 127 i e an exponent of 0 is stored as 127 e Mantissa is the mantissa which is to the right of the radix point There is an implied bit to the left of the radix point which is always 1 except for a zero value where the implied bit is zero A zero value is indicated by a zero exponent exponent 127 The value of this number is 1 x 2 x 1 mantissa TABLE 3 4 FLOATING POINT FORMATS Format Sign Biasedexponent Ventse IEEE 764 32b 24 bit Here are some examples of the IEEE 754 32 bit formats shown in Table 3 5 Note that the Most Significant bit of the mantissa column i e the bit to the left of the radix point is the implied bit which is assumed to be 1 unless the exponent is zero in which case the float is zero TABLE 3 5 FLOATING POINT FORMAT EXAMPLE IEEE 754 Format Number Biased exponent __1 mantissa Decimal 32 bit 7DA6
491. sed by the compiler and further infor mation can be found in Section 3 7 Register Usage SFRs associated with peripherals are not used by the compiler to hold intermediate results and can be changed as you require Always ensure that you confirm the oper ation of peripheral modules from the device data sheet 3 3 6 ID Locations Some PIC10 12 16 devices have locations outside the addressable memory area that can be used for storing program information such as an ID number The __ TDLOC macro may be used to place data into these locations The macro is used in a manner similar to include lt htc h gt IDLOC Cx where x is a list of nibbles which are positioned into the ID locations Only the lower four bits of each ID location is programmed so the following __IDLOC 15F0 will attempt to fill ID locations with the values 1 5 F and 0 The base address of the ID locations is specified by the idloc psect which will be auto matically assigned as appropriate address based on the type of device selected Some devices will permit programming up to seven bits within each ID location To pro gram the full seven bits the regular __IDLOC macro is not suitable For this situa tion the __IDLOC7 a b c d macro is available The parameters a to d are the values to be programmed The values can be entered in either decimal or hexadecimal format such as _IDLOC7 0x7f 1 70 0x5a DS51865B page 50 2010 Microchip T
492. sed will have been widened by the default conventions to int unsigned int or double For example if a character argument has been passed it should be accessed by va_arg ap int since the char will have been widened to EIERE An example is given below of a function taking one integer parameter followed by a number of other parameters In this example the function expects the subsequent parameters to be s to char but note that the compiler is not aware of this and it is the programmers responsibility to ensure that correct arguments are supplied Example include lt stdio h gt include lt stdarg h gt void Pi UME ay ise x ya list ap va_start ap a while a DIE va arg ap Ghar va_end ap void main void DEN y AS e E TE T DS51865B page 238 2010 Microchip Technology Inc Library Functions XTOI Synopsis tinclude lt stdlib h gt unsigned xtoi const char s Description The xtoi function scans the character string passed to it skipping leading blanks reading an optional sign and converts an ASCII representation of a hexadecimal number to an integer Example include lt stdlib h gt include lt stdio h gt void main void char buf 80 INC I3 gets buf 1 xtoi buf printi bst converted to sxo but ik See Also atoi Return Value An unsigned integer If no number is found in the string zero will be returned BECHER 2
493. sembly listing and etc but assembler options assembler directive and assembler optimizer 4 1 ASSEMBLER USAGE The assembler is called ASPIC and is available to run on Windows Linux and Mac OS X systems Note that the assembler will not produce any messages unless there are errors or warnings there are no assembly completed messages Typically the command line driver PICC is used to invoke the assembler as it can be passed assembler source files as input however the options for the assembler are sup plied here for instances where the assembler is being called directly or when they are specified using the command line driver option SETOPTION see Section 2 7 53 SETOPTION Set The Command line Options for Application The usage of the assembler is similar under all of available operating systems All com mand line options are recognized in either upper or lower case The basic command format is shown ASPIC operons ride files Is a space separated list of one or more assembler source files Where more than one source file is specified the assembler treats them as a single module i e a single assembly will be performed on the concatenation of all the source files specified The files must be specified in full no default extensions or suffixes are assumed options Is an optional space separated list of assembler options each with a minus sign as the first character in the case of single letter options o
494. set The strnicmp function is the case insensitive version of this function Example include lt stdio h gt include lt string h gt void main void Wives sas i strncmp 6 PECL SE printf strings are equal n else if i gt 0 Printi 2 bess than string Tn else printi 2 ts qreater Char string An BCE 2010 Microchip Technology Inc DS51865B page 227 HI TECH C for PIC10 12 16 User s Guide STRNCPY See Also Strlen St remy iStrecpy streat Return Value A signed integer less than equal to or greater than zero Note Other C implementations may use a different collating sequence the return value is negative zero or positive i e do not test explicitly for negative one 1 or one 1 Synopsis include lt string h gt Char strnmepy Cher e Conse Char F 67 EE E 1i Description This function copies a null terminated string s2 to a character array pointed to by s1 At most n characters are copied If string s2 is longer than n then the destination string will not be null terminated The destination array must be large enough to hold the entire string including the null terminator Example include lt string h gt include lt stdio h gt void main void Char buffer 256 Ghar 8 Si 62 Strncpy butrer of inet 6 sl buffer s2 Meee end of line strcat s1 s2 printf d n strlen buffer Prin
495. sistent 3 4 7 2 NEAR TYPE QUALIFIER The near type qualifier can be used to place static variables in the common memory of the PIC MCU if such memory is supported by the selected device Some of the PIC MCU architectures implement data memory which can be always accessed regardless of the currently selected bank This common memory can be used to reduce code size and execution times as the bank selection instructions that are normally required to access data in banked memory are not required when access ing the common memory There are very small amounts of this memory and if it is pres ent at all is often only a few bytes The compiler automatically uses the common memory for frequently accessed user defined variables so this qualifier would only be needed for special memory place ment of objects for example if C variables are accessed in hand written assembly code that assumes that they are located in this memory This qualifier is controlled by the compiler option ADDRQUAL which determines its effect see Section 2 7 18 ADDRQUAL Set Compiler Response to Memory Qualifiers Based on this option s settings this qualifier may be binding or ignored which is the default operation Qualifiers which are ignored will not produce an error or warning but will have no effect Here is an example of an unsigned char object qualified as near near unsigned char fred Objects qualified near cannot be auto or parameters to a funct
496. sitioned in a different bank of memory Thus the total size of the stack is roughly limited only by the available memory on the device Unlike with non auto variables it is not efficient to access auto variables within the compiled stack using the linear memory of Enhanced Mid Range devices Thus for all devices including Enhanced Mid Range PIC MCUs each component of the compiled stack must fit entirely within one bank of data memory on the target device however you can have more than one component each allocated to a different bank This limits the size of objects within the stack to the maximum free space of the bank in which it is allocated The more auto variables in the stack the more restrictive the space is to large objects Recall that SFRs are usually present in each data bank so the maximum amount of GPR available in each bank is typically less than the bank size If a program requires large objects that should not be accessible to the entire program consider leaving them as local objects but using the static specifier Such variables are still local to a function but are no longer auto and have fewer size limitations They are allocated memory as described in Section 3 5 2 1 Non auto Variable Alloca tion 3 5 3 Variables in Program Space The only variables that are placed into program memory are those that are not auto and which have been qualified const Any auto variables qualified const are placed in the compiled st
497. size of an array that is the type of the sizeof operator size_t 6 3 3 4 7 1 1 The type of size_t iS unsigned int 2010 Microchip Technology Inc DS51865B page 345 HI TECH C for PIC10 12 16 User s Guide A 7 2 The result of casting a pointer to an integer or vice versa 6 3 4 When casting an integer to a pointer variable if the pointer variable throughout the entire program is only assigned the addresses of objects in data memory or is only assigned the address of objects in program memory the integer address is copied with out modification into the pointer variable If a pointer variable throughout the entire pro gram is assigned addresses of objects in data memory and also addresses of object in program memory then the most significant bit MSb of the will be set if the address of the integer is cast to a pointer to const type otherwise the MSb is not set The remain ing bits of the integer are assigned to the pointer variable without modification When casting a pointer to an integer the value held by the pointer is assigned to the integer without modification provided the integer is not smaller than the size of the pointer A 7 3 The type of integer required to hold the difference between two s to members of the same array ptrdiff_t 6 3 6 7 1 1 The type of ptrdiff_t IS unsigned int A8 REGISTERS G3 8 A 8 1 The extent to which objects can actually be placed in registers by use of the register sto
498. source files For example to compile a number of files with all errors combined into a file called project err you could use the E option as follows PICO GCHIP L6F3 JAA EE EE EE tt ene SC main PICO EERSTEN O PASSL partic PICC e DER REES EE C asmoeod vas Section 2 6 Compiler Messages has more information regarding this option as well as an overview of the messaging system and other related driver options 2 7 4 G Generate Source level Symbol File The G option allows specification of the filename used for the source level symbol file sym extension for use with supported debuggers and simulators such as MPLAB IDE See also Section 2 5 Compiler Output If no filename is given the symbol file will have the project name see Section 2 2 Invoking the Compiler and an extension of sym For example the option Gtest sym generates a symbol file called test sym Symbol files generated using the G option include source level information for use with source level debug gers 2 7 5 l Include Search Path Use 1I to specify an additional directory to search for header files which have been included using the include directive The directory can either be an absolute or rel ative path The 1I option can be used more than once if multiple directories are to be searched The compiler s include directory containing all standard header files is always searched even if no I option is present If
499. splay List of Supported Processors for infor mation on finding the full list of devices supported by your compiler version DS51865B page 6 2010 Microchip Technology Inc HI TECH C FOR PIC10 12 16 MICROCHIP USER S GUIDE Chapter 2 PICC Command line Driver 2 1 INTRODUCTION The command line driver is called PICC and is the application that can be invoked to perform all aspects of compilation including C code generation assembly and link steps Even if you use an IDE to assist with compilation the IDE will ultimately call PICC Although the internal compiler applications can be called explicitly from the command line using P ICC is the recommended way to use the compiler as it hides the complexity of all the internal applications used and provides a consistent interface for all compila tion steps This chapter describes the steps the driver takes during compilation files that the driver can accept and produce as well as the command line options that control the com piler s operation It also shows the relationship between these command line options and the controls in the MPLAB IDE Build Options dialog 2 2 INVOKING THE COMPILER 2 2 1 Driver Command line Format This section looks at how to use PICC as well as the tasks that it and the internal appli cations perform during compilation PICC has the following basic command format PICC options files libraries It is assumed in this manual that
500. ssage number that was generated that will be printed otherwise the message in the requested language will be displayed 2 6 3 Message Type There are four types of messages These are described below along with the com piler s behavior when encountering a message of each type Advisory Messages convey information regarding a situation the compiler has en countered or some action the compiler is about to take The information is being displayed for your interest and typically requires no action to be tak en Compilation will continue as normal after such a message is issued Warning Messages indicate source code or some other situation that can be com piled but is unusual and may lead to a runtime failure of the code The code or situation that triggered the warning should be investigated however com pilation of the current module will continue as will compilation of any remain ing modules Error Messages indicate source code that is illegal or that compilation of this code cannot take place Compilation will be attempted for the remaining source code in the current module but no additional modules will be compiled and the compilation process will then conclude Fatal Error Messages indicate a situation that cannot allow compilation to proceed and which requires the compilation process to stop immediately 2 6 4 Message Format By default messages are printed in a human readable format This format can vary from one com
501. ssembler generated symbols nannnnnnnnnnannnnnanni 122 assembly code absolute variables ccccceeceeeeesseeeeeeeeeeaeeeees 131 accessing C objects nnnennnnnnnennneneneennnnnee 100 accessing registers cccceeceeecseseeeeeeeeeeeeeeeees 101 Dihiary en TE 121 aye Hee EE 97 Character Constant 122 Character Seb ee 121 EES 120 121 CONGO EE 131 COMMISION Saane 121 dala LEI eege 122 detault RAC E 121 defining variables ccccceeeeesseseeeeeeeaeeseeeeees 130 DEEM eebe eebe 121 destination operande ccccccsseseeeeesseseeeeees 120 OXDIESSIONS EE 124 generating from C A 28 gliese 126 hexadecimal constamte 121 identifiers erena Miele Eet 122 INGIUGS TIES radere cin govaedecete 136 initializing locations cccsseeeeceeeeeeeeseeeeeeeees 130 interaction with C A 102 label tieldire i eae 120 label SCOPE cccccceeeecceeseeseseeeeeeeeaeeeeess 123 126 Eet 123 line number 118 IO CATION counne EE 122 Wal ee Rut RE 97 multi character Constant 122 AIR el 124 aigle Te GE 35 preprocessing snina a eee 104 DEENS 125 radix specifiers ciate ea 121 Keele 123 relative JUMPS cceeeceecceeceeeeeeceeceeseeeeeeeeaaees 122 relocatable expressions ssseresnerressereen 124 repeating INStrUCTIONS ceeceeseeeeeeeeeeeeeeees 133 repeating Macros E 133 reserving MEMOLSY eeeeecceeeeeeeeeeeeeeees 130 131 reserving RAM memory ccccsseeee
502. stead of issuing a warning automatically swap to using a method that involves the use of a lookup table and which does not require use of the hardware stack When the lookup method is being employed a function is reached by a jump not a call directly to its address Before this is done the address of a special return instruction implemented as a jump instruction is stored in a temporary location inside the called function This return instruction will be able to return control back to the calling function This means of calling functions allows functions to be nested deeply without overflow ing the stack however it does come at the expense of memory and program speed 3 8 7 1 BANK SELECTION WITHIN FUNCTIONS A function can and may return with any RAM bank selected See Section 3 5 1 Address Spaces for more information on RAM banks The compiler tracks the bank selections made in the generated code associated with each function even across function calls to other functions If the bank that is selected when a function returns can be determined the compiler will use this information to try to remove redundant bank selection instructions which might otherwise be inserted into the generated code The compiler will not be able to track the bank selected by routines written in assembly even if they are called from C code The compiler will make no assumptions about the selected bank when such routines return The Tracked obje
503. sters 7 _IDLOC 0x7F 70 1 0x5A void main void J 2010 Microchip Technology Inc DS51865B page 175 HI TECH C for PIC10 12 16 User s Guide Note Not all devices permit 7 bit programming of the ID locations Refer to the device data sheet to see whether this macro can be used on your particular device See also _ IT DIOC 4 CONE LG _DELAY Synopsis include lt htc h gt void _delay unsigned long cycles Description This is an inline function that is expanded by the code generator When called this rou tine expands to an inline assembly delay sequence The sequence will consist of code that delays for the number of cycles that is specified as argument The argument must be a literal constant An error will result if the delay period requested is too large For very large delays call this function multiple times Example include lt htc h gt void main void control 0x80 _delay 10 delay for 10 cycles control amp 0x7F See Also qdelay_us Oelaw mei DS51865B page 176 2010 Microchip Technology Inc Library Functions ABS ACOS Synopsis include lt stdlib h gt int abs int jJ Description The abs function returns the absolute value of j Example include lt stdio h gt include lt stdlib h gt void main void int a 5 printf absolute value of Sd is Sd n a abs a see Also labs
504. sts and is spelt the same way as the include filename however the case of each does not exactly match For example specifying include code c willinclude Code c if itis found In Linux versions this warning could occur if the file wasn t found DS51865B page 248 2010 Microchip Technology Inc IERT 166 too few values specified with option Preprocessor The list of values to the preprocessor CPP s option is incomplete This should not happen if the preprocessor is being invoked by the compiler driver The values passes to this option represent the sizes of char short int long float and double types WW 167 too many values specified with S option unused Preprocessor There were too many values supplied to the S preprocessor option See message 166 168 unknown option Any This option given to the component which caused the error is not recognized 169 strange character after Preprocessor There is an unexpected character after 170 symbol in undef was never defined Preprocessor The symbol supplied as argument to undef was not already defined This warning may be disabled with some compilers This warning can be avoided with code like ifdef SYM undef SYM only undefine if defined endif 171 wrong number of preprocessor macro arguments for instead of Preprocessor A macro has been invoked with the wrong number of arguments e g d
505. sult in the following options being passed to the linker pinit 100h preset_vec 00h Note the end_init linker option has been removed entirely If there are no characters following the first equal character in the L option then no replacement will be made for the default linker options that will be deleted For example the driver option L pinit will adjust the default options passed to the linker as above but the pinit linker option would be removed entirely No warning is generated if such a default linker option cannot be found The default option that you are deleting or replacing must contain an equal character DS51865B page 26 2010 Microchip Technology Inc PICC Command line Driver 2 7 8 M Generate Map File The M option is used to request the generation of a map file The map file is generated by the linker and includes detailed information about where objects are located in mem ory See Section 5 4 Map Files for information regarding the content of these files If no filename is specified with the option then the name of the map file will have the project name see Section 2 3 The Compilation Sequence with the extension map This option is on by default when compiling from within MPLAB IDE and using the HI TECH Universal Toolsuite 2 7 9 N Identifier Length This option allows the C identifier length to be increased from the default value of 31 Valid sizes for this option are from 32 to 255
506. t 10L 6 now it finds out otherwise Stacie v id setilong a 10t p PORTA a bD 368 array dimension on TU ignored Preprocessor An array dimension on a function parameter has been ignored because the argument is actually converted to a pointer when passed Thus arrays of any size may be passed Either remove the dimension from the parameter or define the parameter using pointer syntax e g DA d r param should bes ink array or int 3 7 rot Wee Tire iene Ee TEE warning flagged here return array 0 369 signed bitfields not supported Parser Only unsigned bitfields are supported If a bitfield is declared to be type int the com piler still treats it as unsigned e g STRUCT 4 Signed ant sion Ly this must be unsigned Signed int value 15 i 370 illegal basic type int assumed Parser The basic type of a cast to a qualified basic type couldn t not be recognized and the basic type was assumed to be int e g here Ling 1s assumed to be int Et unsigned char bar unsigned ling ai 371 missing basic type int assumed Parser This declaration does not include a basic type so int has been assumed This decla ration is not illegal but it is preferable to include a basic type to make it clear what is intended e g char c a don t let the compiler make assumptions use int i func EL ditto nse extern nt tune tint
507. t Check the number of initializers against the object definition array or structure e g three elements but four initializers int ivals 3 2 4 8 241 initialization syntax Parser The initialization of this object is syntactically incorrect Check for the correct placement and number of braces and commas e g int Geter ay Drp es oops one two many s 242 illegal type for switch expression Parser A switch operation must have an expression that is either an integral type or an enu merated value e g double d Switchta F 77 cops this must be integral 7 case ZA d 0 243 inappropriate break continue Parser A break or continue statement has been found that is not enclosed in an appropriate control structure A continue can only be used inside a while for or do while loop while break can only be used inside those loops or a switch statement e g SEET CEET 4 case 0 if output Ui input Oxff oops this shouldnt be here and closed the switch break this should be inside the switch 244 default case redefined Parser There is only allowed to be one default label in a switch statement You have more than one e g Switch a default fe atk Chis 1S Che default casais 7 b 9 break default then what is thas 7 b 10 break 2010 Microchip Technology Inc DS51865B page 257 HI TECH C for PIC10 12 16 User s Gui
508. t is written LABS Synopsis include lt stdlib h gt int labs long int J Description The labs function returns the absolute value of long value j Example include lt stdio h gt include lt stdlib h gt void main void rong unk a 54 printf absolute value of ld is ld n a labs a See Also abs Return Value The absolute value of j LDEXP Synopsis include lt math h gt double ldexp double f int i Description The 1dexp function performs the inverse of frexp operation the integer i is added to the exponent of the floating point and the resultant returned DS51865B page 202 2010 Microchip Technology Inc Library Functions LDIV Example include lt math h gt dree lide lt stdio h gt void main void double f f ldexp 1 0 10 printf 0 2 textasciicircum 10 f n f See Also frexp Return Value The return value is the integer i added to the exponent of the floating point value f Synopsis Finclude lt stalip lt a gt ldiv_t ldiv long number long denom Description The 1div routine divides the numerator by the denominator computing the quotient and the remainder The sign of the quotient is the same as that of the mathematical quotient Its absolute value is the largest integer which is less than the absolute value of the mathematical quotient The 1div function is similar to the div function the difference b
509. t specifier corresponding to this argument is f or similar and requires a floating point expression Check for missing or extra format specifiers or arguments to printf Printer Wa of PoSnould Dee print I Cer gt Ada Oj 7 330 pointer to argument required in printf style format string Parser A pointer argument is required for this format specifier Check the number and order of format specifiers and corresponding arguments 331 too few arguments for printf style format string Parser There are too few arguments for this format string This would result in a garbage value being printed or converted at run time e g Print sd lt 20 lows oops where is the other value to print 332 interrupt_level should be 0 to 7 Parser The pragma interrupt_level must have an argument from 0 to 7 eg pragma interrupt_level oops what is the level void interrupt isr void Pe tsr cod Goes here 7 333 unrecognized qualifier name after strings Parser The pragma strings was passed a qualifier that was not identified eg OOS Should that be pragma strings const Z pragma strings cinst 334 unrecognized qualifier name after printf_check Parser The pragma printf_check was passed a qualifier that could not be identified e g d Een should that be const nok cinse 7 pragma printf_check printf cinst 335 unknown pragma Parser An unknown pragma
510. t that the intended operation is a rotate left of 1 bit and will encode the output using the PIC MCU rotate instructions A rotate left of 2 bits would be implemented with code like 2010 Microchip Technology Inc DS51865B page 81 HI TECH C for PIC10 12 16 User s Guide C S Cr E AGE ee Oe This code optimization will also work for integral types larger than a char If the opti mization cannot be applied or this code is ported to another compiler the rotate will be implemented but typically with shifts and a bitwise OR operation 3 REGISTER USAGE The assembly generated from C source code by the compiler will use certain registers that are present on the PIC MCU device Most importantly the compiler assumes that nothing other than code it generates can alter the contents of these registers So if the assembly loads a register with a value and no subsequent code generation requires this register the compiler will assume that the contents of the register are still valid later in the output sequence The registers that are special and which are used by the compiler are listed in Table 3 9 TABLE 3 9 REGISTERS USED BY THE COMPILER Note 1 This is a two byte register Both components are used by the compiler The state of these register must never be changed directly by C code or by any assem bly code in line with C code The following example shows a C statement and in line assembly that violates these rules and
511. t_fact_bit on pic17 Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 678 case 55 on pict Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 679 unknown extraspecial Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 680 bad format for P option Code Generator This is an internal compiler error Contact HI TECH Software technical support with details DS51865B page 294 2010 Microchip Technology Inc 681 bad common spec in P option Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 682 this architecture is not supported by the PICC Lite compiler Code Generator A target device other than baseline Mid range or Highend was specified This compiler only supports devices from these architecture families 683 bank 1 variables are not supported by the PICC Lite compiler Code Generator A variable with an absolute address located in bank 1 was detected This compiler does not support code generation of variables in this bank 684 bank 2 and 3 variables are not supported by the PICC Lite compiler Code Generator A variable with an absolute address located in bank 2 or 3 was detected This compiler does not support code generation of variables in these banks 685 ba
512. tained in this publication regarding device applications and the like is provided only for your convenience and may be superseded by updates It is your responsibility to ensure that your application meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORY OR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITS CONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSE Microchip disclaims all liability arising from this information and its use Use of Microchip devices in life support and or safety applications is entirely at the buyer s risk and the buyer agrees to defend indemnify and hold harmless Microchip from any and all damages claims suits or expenses resulting from such use No licenses are conveyed implicitly or otherwise under any Microchip intellectual property rights QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV ISO TS 16949 2002 Trademarks The Microchip name and logo the Microchip logo dsPIC KEELOQ KEELOQ logo MPLAB PIC PICmicro PICSTART PIC logo rfPIC and UNI O are registered trademarks of Microchip Technology Incorporated in the U S A and other countries FilterLab Hampshire HI TECH C Linear Active Thermistor MXDEV MXLAB SEEVAL and The Embedded Control Solutions Company are registered trademarks of Microchip Technology Incorporated in the U S A Analog for the Digital
513. tan Return Value The arc tangent of y x Synopsis include lt stdlib h gt double atof const char s Description The atof function scans the character string passed to it skipping leading blanks It then converts an ASCII representation of a number to a double The number may be in decimal normal floating point or scientific notation Example include lt stdlib h gt include lt stdio h gt void main void char buf 80 double i gets buf b ab0L bul printf s converted to f n buf 1 2010 Microchip Technology Inc DS51865B page 181 HI TECH C for PIC10 12 16 User s Guide See Also at Oat abo Sstrtod Return Value A double precision floating point number If no number is found in the string 0 0 will be returned ATOI Synopsis include lt stdlib h gt int atoi const char s Description The atoi function scans the character string passed to it skipping leading blanks and reading an optional sign It then converts an ASCII representation of a decimal number to an integer Example include lt stdlib h gt include lt stdio h gt void main void char buf 80 int i gets buf 1 atoi buf PINCE 28 CONVertod cto 2am bur ZK See Also tol atori i anole Return Value A signed integer If no number is found in the string O will be returned ATOL Synopsis include lt stdlib h gt long atol const char s Description
514. tant is never code protected and will be lost if you reprogram the device Thus if you are using a win dowed or Flash device the calibration constant must be saved from the last ROM location before it is erased The constant must then be reprogrammed at the same location along with the new program and data If you are using an in circuit emulator ICE the location used by the cali bration RETLW instruction may not be programmed Calling the _READ_OSCCAL_DATA macro will not work and will almost certainly not return correctly If you wish to test code that includes this macro on an ICE you will have to program a RETLW instruction at the appropriate location in program memory Remember to remove this instruction when programming the actual part so you do not destroy the calibration value 3 4 SUPPORTED DATA TYPES AND VARIABLES 3 4 1 Integer Data Types The HI TECH C compiler supports integer data types with 1 2 3 and 4 byte sizes as well as a single bit type Table 3 1 shows the data types and their corresponding size and arithmetic type The default type for each type is underlined TABLE 3 1 INTEGER DATA TYPES signed ma o o soea funsignea char 8 unsinedinegr The bit and short long types are non standard types available in this implementa tion All integer values are represented in little endian format with the Least Significant Byte at the lower address If no signedness is specified in the type then the type will
515. ted Example include lt conio h gt include lt string h gt char buffer 80 void main void for cgets buffer Ek Seromo ptf or ng break Coutts exre CO Linvsh vn See Also getch getche putch cputs Return Value The return value is the character passed as the sole argument Synopsis include lt htc h gt CLRWDT Description This macro is used to clear the device s internal watchdog timer 2010 Microchip Technology Inc DS51865B page 185 HI TECH C for PIC10 12 16 User s Guide Example include lt htc h gt void main void WDTCON 1 enable the WDT CLRWDT COS Synopsis include lt math h gt double cos double f Description This function yields the cosine of its argument which is an angle in radians The cosine is calculated by expansion of a polynomial series approximation Example include lt math h gt include lt stdio h gt define C 3 141592 180 0 void main void double i for i 0 7 1 lt 180 0 zi 10 prance MEET sh cos Sen ds Sim a Cy Cosi Ori See Also sin tan asin acos atan atan2 Return Value A double in the range 1 to 1 E DS51865B page 186 2010 Microchip Technology Inc Library Functions COSH SINH TANH CPUTS Synopsis include lt math h gt double cosh double f double sinh double f double tanh
516. ter keyword is silently ignored and has no effect on memory allocation of variables There are very few registers available for caching of variables on PIC Baseline and Mid Range devices and as these registers must be frequently used by generated code for other purposes there is little advantage in using them The cost involved in loading variables into registers would far outweigh any advantage of accessing the register One exception is with parameter variables Some arguments are passed to functions in the W register rather than in a memory location however these values will typically be stored back to memory by code inside the function so that W can be used by code associated with that function See Section 3 8 4 Function Size Limits for more information as to which parameter variables may use registers 3 5 6 Dynamic Memory Allocation Dynamic memory allocation heap based allocation using malloc etc is not sup ported with HI TECH C This is due to the limited amount of data memory and the fact that this memory is banked The wasteful nature of dynamic memory allocation does not suit itself to the 8 bit PIC device architectures 3 5 7 Memory Models HI TECH C does not use fixed memory models to alter allocation of variables to mem ory Memory allocation is fully automatic and there are no memory model controls 3 6 OPERATORS AND STATEMENTS The HI TECH C compiler supports all the ANSI operators The exact results of some o
517. tes dete 182 SCENE 36 auto variable 71 73 139 command THES iii cane etd ae eee ie 8 assembly symbols cceeeeeccseseseeeeeeeeaeeseeeess 74 INKE eeben heechen eege 142 WAN ZA OM EE E 94 command line driver essi a 7 Avocet symbol nie 147 COMMON MEMOTY E 70 B elei a H EE 69 88 compilation banked MENON dapni a sue tse tae actor 70 129 TSU SUAS EE 12 linear addressing En 12 19 MILEJ MSS rennan o 12 selection in assembly code s11111111 99 134 second stage 12 BANKMASK Macro EE 99 EE 9 BANKSEL directive cccccccccseeeeeeceeeeeeeeessaeeeeeeeeees 99 ESE ceccccessecsececsesecseceesessesessesevstseeseeee 12 DANKX qualifiers En 29 69 HEI 41 base specifier see radix specifier to Object fie 24 base value See pee lear DEE 76 compiled Stat kesc taeu aa n 73 74 baseline PIC special instructions eeeeeeeeeeees 02 disabling overlay ccccceesseeeeeeeeeeeeeeeseeeeeees 144 biased exponent E 57 Compiler applestlong 9 10 big endian TONMAL EE 167 COMMANA HINES oooooooooooooooocooooooooooeeoooooccoecceeccc 28 praeco EE 10 BET 33 34 binary constants compiler errors Sege ENEE 121 FORMAL E 19 ee 65 compiler generated psects ccc eee esses 90 108 bit data Wes En 54 55 compiler generated input les 15 Dit MAS TFUCTIONS sniene aeae 51 56 eelere ici cutis Sacto eee ce tees he cts tee eae 136 bit ET MAG tege aAA 127 conditional aesembiy 131 bitclr BEE 51 BONG SECT EEEEEEEESEEeE 94 bit field
518. th of at least 49 861 argument to N option must specify a positive constant Assembler The parameter to the LIST assembler control s N option which sets the page length for the listing output must be a positive constant number e g LIST N 3 page length must be positive 862 symbol is not external Assembler A symbol has been declared as EXTRN but is also defined in the current module 863 symbol can t be both extern and public Assembler If the symbol is declared as extern it is to be imported If it is declared as public it is to be exported from the current module It is not possible for a symbol to be both 864 argument to size psect flag must specify a positive constant Assembler The parameter to the PSECT assembler directive s size option must be a positive con stant number e g PSECT text class CODE size 200 a negative size 865 psect flag size redefined Assembler The size flag to the PSECT assembler directive is different from a previous PSECT directive e g psect spdata class RAM size 400 elsewhere psect spdata class RAM size 500 866 argument to reloc psect flag must specify a positive constant Assembler The parameter to the PSECT assembler directive s reloc option must be a positive constant number e g psect test class CODE reloc 4 the reloc must be positive 867 psect flag reloc redefined Assembler The reloc flag to the PSECT assembler d
519. th scope local to a block of code or function qualify it static e g bice Eeer a bie bb d GODS Ehre should ber static bit bbe 57 bb a gt 66 return bb DS51865B page 296 2010 Microchip Technology Inc 699 no case labels in switch Code Generator There are no case labels in this switch statement e g STEET 4 there is nothing to match the value of input 700 truncation of enumerated value Code Generator An enumerated value larger than the maximum value supported by this compiler was detected and has been truncated e g enum ZERO ONE BIG 0x99999999 test_case 701 unreasonable matching depth Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 702 regused bad arg to G Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 703 bad GN Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 704 bad RET MASK Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 705 bad which after Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 706 bad which in expand Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 707 bad
520. the compiler s messaging system see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 60 WARNFORMAT Set Warning Message Format This option sets the format of warning messages produced by the compiler See Section 2 7 27 ERRFORMAT Define Format for Compiler Messages for more information on this option For full information on the compiler s messaging system see Section 2 6 Compiler Messages If you are compiling using MPLAB IDE the format of the compiler messages is auto matically configured to what the IDE expects It recommended that you do not adjust the message formats if compiling using this IDE 2 8 MPLAB IDE UNIVERSAL TOOLSUITE EQUIVALENTS When compiling from within Microchip s MPLAB IDE tt is still the compiler s com mand line driver PICC that is being executed and compiling the program The HI TECH Universal Toolsuite plugin manages the MPLAB IDE Build Options dialog that is used to access the compiler options and most of these graphical controls ultimately adjust the driver s command line options You can see the command line options being used when building in the Output window in MPLAB IDE The following dialogs and descriptions identify the mapping between the dialog controls and command line options As the toolsuite is universal across all HI TECH compilers not all options are applicable for the HI TECH C Compiler for PIC10 12 16 MCUs 2 8
521. the compiler applications are either in the console s search path or the full path is specified when executing any application The compiler s location can be added to the search path when installing the compiler by selecting the Add to environment checkbox in the install program It is conventional to supply options identified by a leading dash or double dash before the filenames although this is not mandatory The formats of the options are listed in Section 2 7 Picc Driver Option Descrip tions with a detailed description of each option The files may be any mixture of C and assembler source files and precompiled inter mediate files such as relocatable object obj files or p code p1 files The order of the files is not important except that it may affect the order in which code or data appears in memory and may affect the name of some of the output files Libraries is a list of user defined object code or p code library files that will be searched by the linker in addition to the standard C libraries The order of these files will determine the order in which they are searched They are typically placed after the source filename but this is not mandatory If you are building code using a make system ensure you are familiar with the unique intermediate file format as described in Section 2 3 3 Multi step Compilation 2010 Microchip Technology Inc DS51865B page 7 HI TECH C for PIC10 12
522. the first variable will map to a special symbol prepended with an underscore the subsequent symbols will have the form file Name variableName where fileName is the name of the file that contains the vari able and variableName is the name of the variable For example a program contains the definition for two static variables both called result One lives in the file main c and the other in 1cd c The first function will generate an assembly label _ result The second will generate the label lcd result If there is more than one static function with the same name and they contain defi nitions for static variables of the same name then the assembly symbol used for these variables will be of the form fileName functionName variableName To make accessing of parameter and auto variables easier special equates are defined which map a unique symbol to each variable The symbol has the form func tionName variableName Thus if the function main defines an auto variable called foobar the symbol main foobar can be used in assembly code to access this C variable 3 13 3 2 ACCESSING REGISTERS FROM ASSEMBLY CODE If writing separate assembly modules SFR definitions will not automatically be acces sible The assembly header file lt aspic h gt can be used to gain access to these reg ister definitions Do not use this file for assembly in line with C code as it will clash with definitions in lt htc h gt Include the file using the assemble
523. thod Specifying the time option to the pragma switch directive forces the compiler to generate the table look up style switch method The time taken to execute each case is the same so this is useful where timing is an issue e g state machines This pragma affects all subsequent code The auto option may be used to revert to the default behavior 3 15 3 8 THE PRAGMA WARNING DIRECTIVE This pragma allows control over some of the compiler s messages such as warnings and errors For full information on the massaging system employed by the compiler see Section 2 6 Compiler Messages 3 15 3 8 1 The Warning Disable Pragma Some warning messages can be disabled by using the warning disable pragma This pragma will only affect warnings that are produced by the parser or the code gen erator Le errors directly associated with C code The position of the pragma is only significant for the parser i e a parser warning number may be disabled for one section of the code to target specific instances of the warning Specific instances of a warning produced by the code generator cannot be individually controlled and the pragma will remain in force during compilation of the entire module The state of those warnings which have been disabled can preserved and recalled using the warning push and warning pop pragmas Pushes and pops can be nested to allow a large degree of control over the message behavior The following example shows the war
524. ti keeft burter See Also strcpy strcat strlen strcmp Return Value The destination buffer si is returned DS51865B page 228 2010 Microchip Technology Inc Library Functions STRPBRK Synopsis include lt string h gt char strpbrk Const char s1 const char s2 Description The strpbrk function returns a to the first occurrence in string s1 of any character from string s2 or a null if no character from s2 exists in s1 Example include lt stdio h gt include lt string h gt void main void ER F gtr M Tro E EE E while str NULL Prince Sin Str E str strpbrk str 1 Return Value to the first matching character or NULL if no character found STRRCHR STRRICHR Synopsis include lt string h gt Char strrecher char s int char strrichr char s int c Description The strrchr function is similar to the strchr function but searches from the end of the string rather than the beginning i e it locates the last occurrence of the character c in the null terminated string s If successful it returns a to that occurrence otherwise it returns NULL The strrichr function is the case insensitive version of this function 2010 Microchip Technology Inc DS51865B page 229 HI TECH C for PIC10 12 16 User s Guide STRSPN Example include lt stdio h gt include lt string h gt void main void
525. tifierl 2o 1345 4 3 6 1 SIGNIFICANCE OF IDENTIFIERS Users of other assemblers that attempt to implement forms of data typing for identifiers should note that this assembler attaches no significance to any symbol and places no restrictions or expectations on the usage of a symbol The names of psects program sections and ordinary symbols occupy separate overlapping name spaces but other than this the assembler does not care whether a symbol is used to represent bytes words or sports cars No special syntax is needed or provided to define the addresses of bits or any other data type nor will the assembler issue any warnings if a symbol is used in more than one context The instruction and addressing mode syntax provide all the information necessary for the assembler to generate correct code 4 3 6 2 ASSEMBLER GENERATED IDENTIFIERS Where a LOCAL directive is used in a macro block the assembler will generate a unique symbol to replace each specified identifier in each expansion of that macro These unique symbols will have the form nnnn where nnnnis a 4 digit number The user should avoid defining symbols with the same form 4 3 6 3 LOCATION COUNTER The current location within the active program section is accessible via the symbol This symbol expands to the address of the currently executing instruction which is dif ferent to the address contained in the program counter when executing this instruction Thus GOTO S
526. tion int return_16 void return 0x1234 will exit with the code similar to MOVLW 34h MOVWF _return_16 MOVLW 12h MOVWF _return_16 1 RETURN 2010 Microchip Technology Inc DS51865B page 85 HI TECH C for PIC10 12 16 User s Guide 3 8 7 Calling Functions The Baseline Mid Range and Enhanced Mid Range devices all use a hardware stack for function return addresses Although the depth of this stack is 2 8 and 16 levels respectively the mechanism by which functions are called is consistent across all devices Typically CALL instructions are used to transfer control to a C function when it is called Each function calls uses one level of stack This stack level is freed after the called rou tine executes a RETURN instruction The stack usage grows if a called function calls another before returning If the hardware stack overflows function return addresses will be destroyed and the code will eventually fail The stackcall suboption to the RUNTIME option controls how the compiler behaves when the compiler detects that the hardware stack is about to overflow due to too many nested calls See Section 2 7 50 RUNTIME Specify Runtime Environ ment for details on this option If this suboption is disabled the default state where the depth of the stack will be exceeded by a call the compiler will issue a warning to indicate that this is the case If the stackcall1 suboption is enabled the compiler will in
527. tion test xyz 8 would generate code similar to MOVLW 08h move literal 0x8 into MOVWEF _test the auto parameter memory CLRF _testt l locations for the 16 bit parameter MOVE _XYZ W move xyz into the W register CALL _test In this example the parameter b is held in the memory locations _test Least Significant Byte and _test 1 Most Significant Byte The exact code used to call a function or the code used to access a parameters from within a function can always be examined in the assembly list file See Section 2 7 17 ASMLIST Generate Assembler List Files for the option that generates this file This is useful if you are writing an assembly routine that must call a function with parameters or accept arguments when it is called The above example does not consider data memory banking or program memory paging which may require additional instructions 3 8 6 Function Return Values Function return values are passed to the calling function using either the w register or the function s auto parameter block Having return values also located in the same memory as that used by the parameters can reduce the code size for functions that return a modified copy of their parameter Eight bit values are returned from a function in the W register Values larger than a byte are returned in the function s parameter memory area with the least significant word in the lowest memory location For example the func
528. tion called main in your programs Code associated with main however is not the first code to execute after reset Additional code provided by the compiler and known as the runtime startup code is executed first and is responsible for transferring control to the main function 3 11 1 Runtime Startup Code A C program requires certain objects to be initialized and the processor to be ina particular state before it can begin execution of its function main It is the job of the runtime startup code to perform these tasks specifically and in no particular order e Initialization of global variables assigned a value when defined e Clearing of non initialized global variables e General setup of registers or processor state Rather than the traditional method of linking in a generic precompiled routine HI TECH C Compiler for PIC10 12 16 MCUs uses a more efficient method which actually determines what runtime startup code is required from the user s program Details of the files used and how the process can be controlled are described in Section 2 4 2 Runtime Startup Code The follow sections detail exactly what the runtime startup code actually does 2010 Microchip Technology Inc DS51865B page 93 HI TECH C for PIC10 12 16 User s Guide PICCThe runtime startup code is executed before main but If you require any special initialization to be performed immediately after reset you should use power up feature descr
529. tion has completed but most other temporary files are deleted unless you use the NODEL option see Section 2 7 39 NODEL Do not remove temporary files which preserves all generated files except the run time start up file Note that some generated files may be in a different directory to your project source files See Section 2 7 43 OUTDIR Specify a directory for output files and Section 2 7 41 OBJDIR Specify a directory for intermediate files which can both control the destination for some output files 2 3 3 Multi step Compilation Make utilities and IDEs such as MPLAB IDE allow for an incremental build of projects that contain multiple source files When building a project they take note of which source files have changed since the last build and use this information to speed up compilation For example if compiling two source files but only one has changed since the last build the intermediate file corresponding to the unchanged source file need not be regenerated The Universal Toolsuite plugin that integrates the compiler into MPLAB IDE is aware of the different compilation sequence employed by PICC and takes care of this for you From MPLAB IDE you can select an incremental build Project gt Build or fully rebuild a project Project gt Rebuild lf the compiler is being invoked using a make utility the make file will need to be con figured to recognized the different intermediate file format and th
530. tion of PAGESEL and BANKSEL these directives do not generate any output or may generate non executable output i e data bytes The directives are listed in Table 4 5 and are detailed below in the following sections TABLE 4 5 ASPIC ASSEMBLER DIRECTIVES LCN Be EE GLOBAL Make symbols accessible to other modules or allow reference to other _ symbols accessible to other modules or allow reference to other modules symbols fan Endassembiy PSECT Declare or resume program section Set location counter within current psect Define symbol value Define or re define symbol value 2010 Microchip Technology Inc DS51865B page 125 HI TECH C for PIC10 12 16 User s Guide TABLE 4 5 ASPIC ASSEMBLER DIRECTIVES CONTINUED Directive Purpose E ELSIF ELSE ENDIF FNADDR FNARG FNBREAK FNCALL FNCONF FNINDIR PNROOT FNSIZE MACRO ENDM LOCAL ALIGN BANKSEL PAGESEL Define constant byte s Define constant word s Reserve storage Define absolute storage Conditional assembly Alternate conditional assembly Alternate conditional assembly End conditional assembly Inform the linker that a function may be indirectly called Inform the linker that evaluation of arguments for one function requires calling another Break call graph links Inform the linker that one function calls another Supply call graph configuration information for the linker Inform the linker that all functions with a particular signature may
531. tion to the data memory address 0 On all PIC devices program memory uses a space value of 0 and data space memory uses a space of 1 Devices which have a banked data space do not use different space values to identify each bank A full address which includes the bank number is used for objects in this space and so each location can be uniquely identified For example a device with a bank size of 0x80 bytes will uses address 0 to 0x7F to represent objects in bank 0 and then addresses 0x80 to OxFF to represent objects in bank 1 etc 4 3 9 3 13 With The with flag allows a psect to be placed in the same page with another psect For example the flag with text will specify that this psect should be placed in the same page as the text psect The term withtotal refers to the sum of the size of each psect that is placed with other psects 4 3 9 4 ORG The ORG directive changes the value of the location counter within the current psect This means that the addresses set with ORG are relative to the base address of the psect which is not determined until link time The much abused ORG directive does not move the location counter to the absolute address you specify Only if the psect in which this directive is placed is absolute and overlaid will the location counter be moved to the address specified To place objects at a particular address place them ina psect of their own and link this at the required address using the linkers P option
532. tion via a NULL function would result in the code crashing or some other unex pected behavior The label to which the endless loop will jump is called fpbase 3 4 4 4 SPECIAL POINTER TARGETS Pointers and integers are not interchangeable Assigning an integer constant to a pointer will generate a warning to this effect For example const char cp 0x123 7 the Compiler will flag this as bad code There is no information in the integer constant 0x123 relating to the type size or mem ory location of the destination There is a very good chance of code failure if pointers are assigned integer addresses and dereferenced particularly for devices like PIC devices which have more than one address space Is 0x123 an address in data mem ory or program memory How big is the object found at address 0x123 Always take the address of a C object when assigning an address to a pointer If there is no C object defined at the destination address then define or declare an object at this address which can be used for this purpose Make sure the size of the object matches the range of the memory locations that can be accessed For example a checksum for 1000 memory locations starting at address 0x900 in pro gram memory is to be generated A pointer is used to read this data You may be tempted to write code such as const char cp cp 0x900 what resides at 0x900 and increment the pointer over the data A much better solution is this
533. tioned See Section 3 10 1 Compiler generated Psects for the limitations associated with where this psect can be linked The auto variables defined in a function will not necessarily be allocated memory in the order declared in contrast to parameters which are always allocated memory based on their lexical order In fact auto variables for one function may be allocated in many RAM banks The the standard qualifiers const and volatile may both be used with auto vari ables and these do not affect how they are positioned in memory This implies that a local const qualified object is still an auto object and as such will be allocated mem ory in the compiled stack in the data space memory not in the program memory like with non auto const objects The compiler will try to locate the stack in one data bank but if this fills i e if the com piler detects that the psect has become too large for the free space in a bank it can build up the stack into several components each with their own psect and link each in a different bank Each auto object is referenced in assembly code using a special symbol defined by the code generator If accessing auto variables defined in C source code you must use these symbols which are discussed in Section 3 13 3 1 Equivalent Assembly Sym bols 3 5 2 2 1 Compiled Stack Operation A compiled stack consists of fixed memory areas that are usable by each function s stack based variables When
534. tions require memory addresses or sizes to be specified The syntax for all these is similar By default the number will be interpreted as a decimal value To force interpretation as a HEX number a trailing H or h should be added e g 765FH will be treated as a HEX number 5 2 1 Aclass low high Normally psects are linked according to the information given to a P option see Section 5 2 18 Pspec but sometimes it is desirable to have a class of psects linked into more than one non contiguous address range This option allows a number of address ranges to be specified as a class For example ACODE 1020h 7FFEh 8000h BFFEh specifies that psects in the class CODE are to be linked into the given address ranges unless they are specifically linked otherwise DS51865B page 142 2010 Microchip Technology Inc Linker Where there are a number of identical contiguous address ranges they may be specified with a repeat count following an x character For example ACODE 0 OFFFFhx16 specifies that there are 16 contiguous ranges each 64k bytes in size starting from address zero Even though the ranges are contiguous no psect will straddle a 64k boundary thus this may result in different psect placement to the case where the option ACODE 0 OFFFFFh had been specified which does not include boundaries on 64k multiples The A option does not specify the memory space associated with the address Once a psect is
535. to ensure that anything in the psects located there do not overwrite the absolute object Thus you might see bssBANKO1 and bssBANKOh psects if a split took place The contents of these psects are described below listed by psect base name 3 10 1 1 PROGRAM SPACE PSECTS checksum his is a psect that is used to mark the position of a checksum that has been requested using the CHECKSUM option see Section 2 7 19 CHECKSUM Calculate a checksum The checksum value is added after the linker has executed so you will not see the contents of this psect in the assembly list file nor specific information in the map file Linking this psect at a non default location will have no effect on where the checksum Is stored although the map file will indicate it located at the new address Do not change the default linker options relating to this psect cinit Used by the C initialization runtime startup code Code in this psect is output by the code generator along with the generated code for the C program and does not appear in the runtime startup assembly module This psect can be linked anywhere in the program memory provided they does not interfere with the requirements of other psects config Used to store the configuration words This psect must be stored in a special location in the HEX file Do not change the default linker options relating to this psect eeprom Used to store initial values in the EEPROM memory Do not change the default li
536. totype Lor sqrt void main void double i f sqrt referenced sqrt will be linked in from library file 1S SC ie EE 3 12 1 The printf Routine The code associated with the printf function is not found in the library files The printf function is generated from a special C template file that is customized after analysis of the user s C code See Section PRINTF VPRINTF for more information on the printf library function The template file is found in the 1ib directory of the compiler distribution and is called doprnt c lt contains a minimal implementation of the printf function but with the more advanced features included as conditional code which can be utilized via preprocessor macros that are defined when it is compiled The parser and code generator analyze the C source code searching for calls to the printf function For all calls the placeholders that were specified in the printf format strings are collated to produce a list of the desired functionality of the final func tion The doprnt c file is then preprocessed with the those macros specified by the preliminary analysis thus creating a custom printf function for the project being compiled After parsing the p code output derived from doprnt c is then combined with the remainder of the C program in the final code generation step For example if a program contains one call to printf which looks like EISE REES The compiler will note that
537. truct is used to place the object at the specified address in program memory as in the following example which places the object tableDef at address 0x100 const int tableDef 0x100 0 1 2 3 4 Usually a const object must be initialized when it is declared as it cannot be assigned a value at any point at runtime For example const int version 3 2010 Microchip Technology Inc DS51865B page 67 HI TECH C for PIC10 12 16 User s Guide will define version as being an int variable that will be placed in the program mem ory will always contain the value 3 and which can never be modified by the program However uninitialized const objects can be defined and are useful if you need to place an object in program memory over the top of other objects at a particular location Usu ally uninitialized const objects will be defined as absolute as in the following example const char checksumRange 0x100 0x800 will define the object checksumRange as a 0x100 byte array of characters located at address 0x800 in program memory This definition will not place any data in the HEX file 3 4 6 2 VOLATILE TYPE QUALIFIER The volatile type qualifier is used to tell the compiler that an object cannot be guar anteed to retain its value between successive accesses This prevents the optimizer from eliminating apparently redundant references to objects declared volatile because it may alter the behavior of the program to do so An
538. truction associated with the function located at 0x400 You can use either the assembly list file see 4 4 Assembly List Files or map file see 5 4 Map Files to confirm that the function was moved as you expect 2010 Microchip Technology Inc DS51865B page 83 HI TECH C for PIC10 12 16 User s Guide lf this construct is used with interrupt functions it will only affect the position of the code associated with the interrupt function body The interrupt context switch code that pre cedes the function code will not be relocated as it must be linked to the interrupt vector See also Section2 7 22 CODEOFFSET Offset Program Code to Address for information on how to move reset and interrupt vector locations which may be useful for designing applications such as bootloaders Unlike absolute variables the generated code associated with absolute functions is still placed in a psect but the psect is dedicated to that function only The psect name has the form below A full list of all psect names are listed in Section 3 9 Interrupts xxx_text Defines the psect for a function that has been made absolute i e placed at an address xxx will be the assembly symbol associated with the function For example if the function rv is made absolute code associated with it will appear in the psect called cu test Functions can also be placed at specific positions by using the psect pragma see Section 3 15 3 5 The pr
539. ts duration in a register and some in its allocated memory location or its entire dura tion in a register The global optimization level may have some impact on the register allocation The level of this optimizer 1 9 affects how hard the compiler tries to force variables into registers Note that even if the global optimizer is disabled there may still be use of reg isters for variables in a program For 8 bit PIC devices the global optimizer has a very limited effect and often it makes little difference to code or data size As C level optimizations are performed before debug information is produced they tend to have less impact on debugging information Note however if a variable is located in a register IDEs such as MPLAB IDE may indicate incorrect values in their Watch view This is due to a limitation in the file format used to pass debug information to the IDE which is currently COFF Check the assembly list file to see if registers are using in the routine being debugged Of the assembler optimizations the actions performed include e In lining of small routines e Procedural abstraction e Jump to jump type optimizations e Peephole optimizations These optimizations can often interfere with debugging in tools such as MPLAB IDE and it may be necessary to disable them if possible The assembler optimizations can drastically reduce code size although typically have little effect on RAM usage 3 15 PREPROCESSING DS5186
540. u are using check the device specific header file that lt htc h gt will include for the definitions of each variable These files will be located in the include directory of the compiler and will have a name that represents the device There is a one to one correlation between device and header file name that will be included by lt htc h gt e g when compiling for a PIC16LF1826 device the lt htc h gt header file will include lt pic161f1826 n gt Remember that you do not need to include this chip specific file into your source code it is automatically included by lt htc h gt Some SFRs are not memory mapped do not have a corresponding variable defined in the device specific header file and cannot be directly accessed from C code For example the W register is not memory mapped on Baseline devices The older PIC16C5X devices use OPTION and TRIS registers which are only accessible via special instructions and which are also not memory mapped See Section 3 3 9 Baseline PIC MCU Special Instructions on how these registers are accessed by the compiler Care should be taken when accessing some SFRs from C code or from assembly in line with C code Some registers are used by the compiler to hold intermediate val ues of calculations and writing to these registers directly can result in code failure The compiler does not detect when SFRs have changed as a result of C or assembly code that writes to then directly The list of registers u
541. umstances such as bootloaders it is necessary to shift the program image to an alternative address This option is used to specify a base address for the program code image and to reserve memory from address 0 to that specified in the option When using this option all code psects including reset and interrupt vectors and con stant data will be adjusted to the address specified The address is assumed to be a hexadecimal constant A leading 0x or a trailing h hexadecimal specifier can be used but is not necessary This option differs from the ROM option in that it will move the code associated with the reset and interrupt vectors which cannot be done using the ROM option see Section 2 7 49 ROM Adjust ROM Ranges For example if the option CODEOFFSET 600 Is specified the reset vector will be moved from address 0 to address 600h the interrupt vector will be moved from address 4 to 604h No code will be placed between address 0 and 600h DS51865B page 30 2010 Microchip Technology Inc PICC Command line Driver see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 23 CR Generate Cross Reference Listing The CR option will produce a cross reference listing f the file argument is omitted the raw cross reference information will be left in a temporary cross reference file leav ing the user to run the CREF utility If a filename is supplied for examp
542. unction is never used Either the function is redundant or the code that was meant to call it was excluded from compilation or misspelt the name of the function 968 unterminated string Assembler A string constant appears not to have a closing quote missing 969 end of string in format specifier Parser The format specifier for the printf style function is malformed 970 character not valid at this point in format specifier Parser The printf style format specifier has an illegal character DS51865B page 318 2010 Microchip Technology Inc 971 type modifiers not valid with this format Parser Type modifiers may not be used with this format 972 only modifiers h and I valid with this format Parser Only modifiers h short and 1 long are legal with this print format specifier 973 only modifier I valid with this format Parser The only modifier that is legal with this format is 1 for long 974 type modifier already specified Parser This type modifier has already be specified in this type 975 invalid format specifier or type modifier Parser The format specifier or modifier in the printf style string is illegal for this particular for mat 976 field width not valid at this point Parser A field width may not appear at this point in a printf type format specifier 978 this identifier is already an enum tag Parser This identifier following a struct or union keyword is al
543. unction which are local static variables Local st atic variables only have scope in the function or block in which they are defined but unlike auto variables their memory is reserved for the entire duration of the program Thus they are allocated memory like other non auto variables Static variables may be accessed by other functions via pointers since they have permanent duration Variables which are static are guaranteed to retain their value between calls to a function unless explicitly modified via a pointer Variables which are static and which are initialized only have their initial value assigned once during the program s execution Thus they may be preferable over ini tialized auto objects which are assigned a value every time the block in they are defined begins execution Any initialized static variables are initialized in the same way as other non auto initialized objects by the runtime startup code see Section 2 4 2 Runtime Startup Code Local objects which are static are assigned an assembly symbol which consists of the function name followed by an symbol and the variable s lexical name e g main foobar will be the assembly identifier used for the static variable foobar defined in main Non local static objects use their lexical name with a leading underscore character e g _foobar will be the assembly identifier used for this object However if there is more than one such static object defined then subs
544. upport with details 294 can t allocate bytes of memory Code Generator Hexmate This is an internal compiler error Contact HI TECH Software technical support with details 295 expression too complex Parser This expression has caused overflow of the compiler s internal stack and should be re arranged or split into two expressions 296 out of memory Objtohex This could be an internal compiler error Contact HI TECH Software technical support with details 297 bad argument to tysize Parser This is an internal compiler error Contact HI TECH Software technical support with details 298 end of file in asm Preprocessor An end of file has been encountered inside a asm block This probably means the endasm IS missing or misspelt e g asm MOV xO 55 MOV rli roO oops where is the endasm DS51865B page 264 2010 Microchip Technology Inc 300 unexpected end of file Parser An end of file in a C module was encountered unexpectedly e g void main void d init puntig is that it What about the close brace 301 end of file on string file Parser This is an internal compiler error Contact HI TECH Software technical support with details 302 can t reopen Parser This is an internal compiler error Contact HI TECH Software technical support with details 303 can t allocate bytes of memory line Parser The parser was unable to
545. urn value It follows the prototype void Main void A 3 IDENTIFIERS G 3 3 A 3 1 The number of significant initial characters beyond 31 in an identifier without external linkage 6 1 2 By default the first 31 characters are significant This can be adjusted up to 255 by the user A 3 2 The number of significant initial characters beyond 6 in an identifier with external linkage 6 1 2 By default the first 31 characters are significant This can be adjusted up to 255 by the user 2010 Microchip Technology Inc DS51865B page 343 HI TECH C for PIC10 12 16 User s Guide A 3 3 Whether case distinctions are significant in an identifier with external linkage 6 1 2 All characters in all identifiers are case sensitive AA CHARACTERS G 3 4 A 4 1 The members of the source and execution character sets except as explicitly specified in the Standard 5 2 1 Both sets are identical to the ASCII character set A 4 2 The shift states used for the encoding of multibyte characters 5 2 1 2 There are no shift states A 4 3 The number of bits in a character in the execution character set 5 2 4 2 1 There are 8 bits in a character A 4 4 The mapping of members of the source character set in character and string literals to members of the execution character set 6 1 3 4 The mapping is the identity function A 4 5 The value of an integer character constant that contains a character or escape sequence
546. ut read endif 128 illegal operator in if Preprocessor A if expression has an illegal operator Check for correct syntax e g if FOO 6 oops should that be if FOO 5 129 unexpected in if Preprocessor The backslash is incorrect in the i statement e g if FOO 34 define BIG endif 130 unknown type in el if sizeof Preprocessor An unknown type was used in a preprocessor sizeof The preprocessor can only evaluate sizeof with basic types or pointers to basic types e g if sizeof unt should be if sizeof int 2 i OxFFFF endif 131 illegal type combination in el if sizeof Preprocessor The preprocessor found an illegal type combination in the argument to sizeof ina if expression e g 2010 Microchip Technology Inc DS51865B page 245 HI TECH C for PIC10 12 16 User s Guide A To gion OF Mok CO S19 Chat DS Che error if sizeof signed unsigned int i OxFFFF endif 132 no type specified in el if sizeof Preprocessor Sizeof was used in a preprocessor if expression but no type was specified The argument to sizeof in a preprocessor expression must be a valid simple type or pointer to a simple type e g if sizeof oops size of what i 0 endif 133 unknown type code 0x in el if sizeof Preprocessor The preprocessor has made an internal error in evaluating a sizeof
547. valid number syntax Assembler The syntax of a number is invalid This can be e g use of 8 or 9 in an octal number or other malformed numbers 796 use of LOCAL outside macros is illegal Assembler The LOCAL directive is only legal inside macros It defines local labels that will be unique for each invocation of the macro DS51865B page 306 2010 Microchip Technology Inc 797 syntax error in LOCAL argument Assembler A symbol defined using the LOCAL assembler directive in an assembler macro is syn tactically incorrect Ensure that all symbols and all other assembler identifiers conform with the assembly language of the target device 798 macro argument may not appear after LOCAL Assembler The list of labels after the directive LOCAL may not include any of the formal parameters to the macro e g mmm MACRO al MOVE rO al LOCAL al CODES the macro parameter cannot be used with local ENDM 799 REPT argument must be gt 0 Assembler The argument to a REPT directive must be greater than zero e g REPT 2 2 copies of this code MOVE rO r1i ENDM 800 undefined symbol Assembler The named symbol is not defined in this module and has not been specified GLOBAL 801 range check too complex Assembler This is an internal compiler error Contact HI TECH Software technical support with details 802 invalid address after END directive Assembler The start address of the program wh
548. vely main c main Er Tp 2 p 362 redundant amp applied to array warning DS51865B page 20 2010 Microchip Technology Inc PICC Command line Driver 492 attempt to position absolute psect text is illegal Notice that the parser message format identifies the particular line and position of the offending source code If the E option is now used and the compiler issues the same messages the compiler will output main c 12 362 redundant amp applied to array warning 492 attempt to position absolute psect text is illegal error The user now uses the WARNFORMAT in the following fashion WARNFORMAT a tn S61 SP ie SCH When recompiled the following output will be displayed parser 362 12 main c redundant amp applied to array 492 attempt to position absolute psect text is illegal error Notice that the format of the warning was changed but that of the error message was not The warning format now follows the specification of the environment variable The application name parser was substituted for the a placeholder the message num ber 362 substituted the zo placeholder etc 2 6 5 Changing Message Behavior Both the attributes of individual messages and general settings for the messaging sys tem can be modified during compilation There are both driver options and C pragmas that can be used to achieve this 2 6 5 1 DISABLING MESSAGES Each warning message has a def
549. was encountered inside a comment Check for a missing closing comment flag e g Here the comment begins I m not sure where I end though DS51865B page 246 2010 Microchip Technology Inc 140 can t open file Driver Preprocessor Code Generator Assembler The command file specified could not be opened for reading Confirm the spelling and path of the file specified on the command line e g picc communds should that be picc commands 141 can t open file Any An output file could not be created Confirm the spelling and path of the file specified on the command line 144 too many nested if blocks Preprocessor iff ifdef etc blocks may only be nested to a maximum of 32 146 include filename too long Preprocessor A filename constructed while looking for an include file has exceeded the length of an internal buffer Since this buffer is 4096 bytes long this is unlikely to happen 147 too many include directories specified Preprocessor A maximum of 7 directories may be specified for the preprocessor to search for include files The number of directories specified with the driver is too great 148 too many arguments for preprocessor macro Preprocessor A macro may only have up to 31 parameters as per the C Standard 149 preprocessor macro work area overflow Preprocessor The total length of a macro expansion has exceeded the size of an internal table T
550. was not found 939 no file arguments Driver The driver has been invoked with no input files listed on its command line If you are getting this message while building through a third party IDE perhaps the IDE could not verify the source files to compile or object files to link and withheld them from the command line 940 bit checksum placed at Objtohex Presenting the result of the requested checksum calculation 941 bad assignment USAGE Hexmate An option to HEXMATE was incorrectly used or incomplete Follow the usage supplied by the message and ensure that the option has been formed correctly and completely IERT 942 unexpected character on line of file Hexmate File contains a character that was not valid for this type of file the file may be corrupt For example an Intel HEX file is expected to contain only ASCII representations of hexadecimal digits colons and line formatting The presence of any other characters will result in this error 944 data conflict at address h between and Hexmate Sources to Hexmate request differing data to be stored to the same address To force one data source to override the other use the specifier If the two named sources of conflict are the same source then the source may contain an error 945 checksum range h to h contained an indeterminate value Hexmate The range for this checksum calculation contained a value that could not be reso
551. which are described in Section 2 6 3 Message Type and the type can be overridden by the user as described in the same section The user is also able to set a threshold for warning message importance so that only those which the user considers significant will be displayed In addition messages with a particular number can be disabled A pragma can also be used to disable a particular message number within specific lines of code These methods are explained in Section 2 6 5 1 Disabling Messages Provided the message is enabled and it is not a warning message whose level is below the current warning threshold the message string will be displayed In addition to the actual message string there are several other pieces of information that may be displayed such as the message number the name of the file for which the message is applicable the file s line number and the application that issued the mes sage etc lf a message is an error a counter is incremented After a certain number of errors has been reached compilation of the current module will cease The default number of errors that will cause this termination can be adjusted by using the ERRORS option see Section 2 7 28 ERRORS Maximum Number of Errors This counter is reset for each internal compiler application thus specifying a maximum of five errors will allow up to five errors from the parser five from the code generator five from the linker five from
552. will be placed before the first psect in memory If a psect s link address is omitted it will be derived from the top of the previous psect For example in the following Ptext 100h data Das the text psect is linked at 100h its load address defaults to the same The data psect will be linked and loaded at an address which is 100 HEX plus the length of the text psect rounded up as necessary if the data psect has a reloc value associated with it see Section 4 3 9 3 10 Reloc Similarly the bss psect will concatenate with the data psect Again Ptext 100h data bss 2010 Microchip Technology Inc DS51865B page 145 HI TECH C for PIC10 12 16 User s Guide will link in ascending order bss data then text with the top of the text psect appearing at address Offh If the load address is omitted entirely it defaults to the same as the link address If the slash character is supplied but no address is supplied after it the load address will concatenate with the previous psect For example Ptext 0 data 0 bss will cause both text and data to have a link address of zero text will have a load address of zero and data will have a load address starting after the end of text The bss psect will concatenate with data in terms of both link and load addresses The load address may be replaced with a dot character This tells the linker to set the load address of this psect to the same as its link a
553. will result in warning messages but the code generator may unsuccessfully try to produce code to perform the write 713 bad initialization list Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 714 bad intermediate code Code Generator This is an internal compiler error Contact HI TECH Software technical support with details 715 bad pragma Code Generator The code generator has been passed a pragma directive that it does not understand This implies that the pragma you have used is a HI TECH specific pragma but the spe cific compiler you are using has not implemented this pragma 716 bad argument to M option Code Generator The code generator has been passed a M option that it does not understand This should not happen if it is being invoked by a standard compiler driver 718 incompatible intermediate code version should be Code Generator The intermediate code file produced by P1 is not the correct version for use with this code generator This is either that incompatible versions of one or more compilers have been installed in the same directory or a temporary file error has occurred leading to corruption of a temporary file Check the setting of the TEMP environment variable If it refers to a long path name change it to something shorter Contact HI TECH Support with details if required 720 multiple free Code Generator This
554. wn prefix in SDB file Cromwell This is an internal compiler warning Contact HI TECH Software technical support with details 638 version mismatch 0x expected Cromwell The input Microchip COFF file wasn t produced using Cromwell 639 zero bit width in Microchip optional header Cromwell The optional header in the input Microchip COFF file indicates that the program or data memory spaces are zero bits wide 668 prefix list did not match any SDB types Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 669 prefix list matched more than one SDB type Cromwell This is an internal compiler error Contact HI TECH Software technical support with details 670 bad argument to T Clist The argument to the T option to specify tab size was not present or correctly formed The option expects a decimal integer argument 671 argument to T should be in range 1 to 64 Clist The argument to the T option to specify tab size was not in the expected range The option expects a decimal integer argument ranging from 1 to 64 inclusive 673 missing filename after option Objtohex The indicated option requires a valid file name Ensure that the filename argument sup plied to this option exists and is spelt correctly 674 too many references to Cref This is an internal compiler error Contact HI TECH Software technical support with details 677 se
555. xpression If it is non zero then the code following it up to the next matching ELSE ELSIF or ENDIF will be assembled If the expression is zero then the code up to the next matching ELSE or ENDIF will be skipped These directives do not implement a runtime conditional statement in the same way that the C statement if does they are evaluated at compile time At an ELSE the sense of the conditional compilation will be inverted while an ENDIF will terminate the conditional assembly block For example IF ABC GOTO aardvark ELSIF DEF GOTO denver ELSE GOTO grapes ENDIF In this example if ABC is non zero the first GOTO instruction will be assembled but not the second or third If ABC is zero and DEF is non zero the second GOTO instruction will be assembled but the first and third will not If both ABC and DEF are zero the third GOTO instruction will be assembled Note in the above example only one GOTO instruc tion will appear in the output which one will be determined by the values assigned to ABC and DEF Conditional assembly blocks may be nested 4 3 9 12 MACRO AND ENDM These directives provide for the definition of assembly macros optionally with argu ments See Section 4 3 9 5 EQU for simple association of a value with an identifier or Section 3 15 1 Preprocessor Directives for the preprocessor s define macro directive which can also work with arguments 2010 Microchip Technology Inc DS51865B
556. xtern int add Sxtern EEN PELACLISE KE endif PROTOTYPES 2 7 48 RAM Adjust RAM Ranges This option is used to adjust the default RAM which is specified for the target device The default memory will include all the on chip RAM specified for the target PIC10 12 16 device thus this option only needs be used if there are special memory requirements Typically this option is used to reserve memory reduce the amount of memory available Specifying additional memory that is not in the target device will typ ically result in a successful compilation but may lead to code failures at runtime The default RAM memory for each target device is specified in the chipinfo file PICC INI Strictly speaking this option specifies the areas of memory that may be used by writ able RAM based objects and not necessarily those areas of memory which contain physical RAM The output that will be placed in the ranges specified by this option are typically variables that a program defines 2010 Microchip Technology Inc DS51865B page 37 HI TECH C for PIC10 12 16 User s Guide For example to specify an additional range of memory to that already present on chip use RAM default 100 1ff This will add the range from 100h to 1ffh to the on chip memory To only use an external range and ignore any on chip memory use RAM 0 ff This option may also be used to reserve memory ranges already defined as on chip memor
557. y need to contact HI TECH Software to see if support for this device is available or upgrade the version of your compiler 923 unknown suboption Driver This option can take suboptions but this suboption is not understood This may just be a simple spelling error If not HELP to look up what suboptions are permitted here IERT 924 missing argument to option Driver This option expects more data but none was given Check the usage of this option TP a 925 extraneous argument to option Driver This option does not accept additional data yet additional data was given Check the usage of this option 926 duplicate option Driver This option can only appear once but appeared more than once 928 bad option value Driver Assembler The indicated option was expecting a valid hexadecimal integer argument 929 bad option ranges Driver This option was expecting a parameter in a range format start_of_range end_of_range but the parameter did not conform to this syntax 930 bad option specification Driver The parameters to this option were not specified correctly Run the driver with HELP or refer to the driver s chapter in this manual to verify the correct usage of this option DS51865B page 316 2010 Microchip Technology Inc 931 command file not specified Driver Command file to this application expected to be found after or lt on the command line
558. y SFR which can be modified by hardware or which drives hardware is qualified as volatile and any variables which may be modified by interrupt routines should use this qualifier as well For example volatile static unsigned ant TACT KR 0x160 The volatile qualifier does not guarantee that any access will be atomic which is often not the case with the PIC10 12 16 architecture which can only access a maxi mum of 1 byte of data per instruction The code produced by the compiler to access volatile objects may be different to that to access ordinary variables and typically the code will be longer and slower for volatile objects so only use this qualifier if it is necessary However failure to use this qualifier when it is required may lead to code failure Another use of the volatile keyword is to prevent variables being removed if they are not used in the C source If anon volatile variable is never used or used ina way that has no effect on the program s function then it may be removed before code is generated by the compiler A C statement that consists only of a volatile variable s name will produce code that reads the variable s memory location and discards the result For example the entire statement PORTB will produce assembly code the reads PORTB but does nothing with this value This is useful for some peripheral registers that require reading to reset the state of interrupt flags Normally such a statement is not enco
559. y in the chipinfo file To do this supply a range prefixed with a minus character for example RAM default 100 103 will use all the defined on chip memory but not use the addresses in the range from 100h to 103h for allocation of RAM objects This option will adjust the memory ranges used by linker classes see Section 5 2 1 Aclass low high and hence any object which is in a psect is placed in this class Any objects contained in a psect that are explicitly placed at a memory address by the linker see Section 5 2 18 Pspec i e are not placed into a memory class are not affected by the option see Section 2 8 MPLAB IDE Universal Toolsuite Equivalents for use of this option in MPLAB IDE 2 7 49 ROM Adjust ROM Ranges This option is used to change the default ROM which is specified for the target device The default memory will include all the on chip ROM specified for the target PIC10 12 16 device thus this option only needs to be used if there are special memory requirements Typically this option is used to reserve memory reduce the amount of memory available Specifying additional memory that is not in the target device will typ ically result in a successful compilation but may lead to code failures at runtime The default ROM memory for each target device is specified in the chipinfo file PICC INI Strictly soeaking this option specifies the areas of memory that may be used by r
560. y is malformed Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details 1285 malformed mapfile while generating Summary no name at position Driver The map file being read to produce a memory summary is malformed Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details 1286 malformed mapfile while generating summary no link address at position Driver The map file being read to produce a memory summary is malformed Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details 1287 malformed mapfile while generating summary no load address at position Driver The map file being read to produce a memory summary is malformed Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details 1288 malformed mapfile while generating summary no length at position Driver The map file being read to produce a memory summary is malformed Either the file has been edited or corrupted or this is a compiler error contact HI TECH Support with details DS51865B page 332 2010 Microchip Technology Inc 1289 line range limit exceeded debugging may be affected Cromwell A C statement has produced assembly code output whose length exceeds a preset limit This means that debug informati
561. y takes a list of module names and re orders the matching modules in the library file so they have the same order as that listed on the command line Modules which are not listed are left in their existing order and will appear after the re ordered modules E DS51865B page 156 2010 Microchip Technology Inc Utilities 6 2 2 1 EXAMPLES Here are some examples of usage of the librarian The following command LIBR s htpic c c lpp chime pl lists the global symbols in the modules ct ime p1 as shown here ctime pl D _moninit D _localtime D _gmtime D _asctime D _ctime The D letter before each symbol indicates that these symbols are defined by the module Using the command above without specifying the module name will list all the symbols defined or undefined in the library The following command deletes the object modules a obj b obj and c obj from the library 1cd lib LIBR d ted Libras 0b Drob AE 6 2 3 Supplying Arguments Since it is often necessary to supply many object file arguments to LIBR arguments will be read from standard input if no command line arguments are given If the stan dard input is attached to the console LIBR will prompt for input Multiple line input may be given by using a backslash as a continuation character on the end of a line If standard input is redirected from a file LIBR will take input from the file without prompting For example libr borer Tolede e WE E WEE ge Abee e
562. y use any of these registers to hold values across a function call Hence if the routine does in fact use these registers unreliable program execution may eventuate TABLE 3 13 VALID REGISTER NAMES toro srl fsvon Indirect data pointer Perl srl rer ih Indirect data pointer The register names are not case sensitive and a warning will be produced if the register name is not recognized A blank list indicates that the specified function or routine uses no registers For example a routine called _search is written in assembly code In the C source we may write extern void search void pragma regsused search wreg status faert to indicate that this routine used the W register STATUS and FSRO 3 15 3 7 THE PRAGMA SWITCH DIRECTIVE Normally the compiler chooses how switch statements will be encoded to produce the smallest possible code size The pragma switch directive can be used to force the compiler to use a different coding strategy The general form of the switch pragma is pragma switch switchType where switch_type Is one of the available switch methods listed in Table 3 14 TABLE 3 14 SWITCH TYPES Use the fastest switch method Use a fixed delay switch method Use smallest code size method default DS51865B page 110 2010 Microchip Technology Inc C Language Features TABLE 3 14 SWITCH TYPES CONTINUED direct deprecated Use a fixed delay switch method simple deprecated Sequential xor me
563. y use when the variables are not in existence and allocate it to other variables in the program Typically such variables are stored on some sort of a data stack which can easily allo cate then deallocate memory as required by each function All devices targeted by the compiler do not have a data stack that can be operated in this fashion The devices can only use their hardware stack for function return addresses and have no instructions which allow data to be placed onto this stack The stack size is also only several words long and so it unsuitable for data of any substantial quantity As a result an alternative stack construct is implemented by the compiler The stack mechanism employed is known as a compiled stack and is fully described in Section 3 5 2 2 1 Compiled Stack Operation 2010 Microchip Technology Inc DS51865B page 73 HI TECH C for PIC10 12 16 User s Guide Once auto variables have been allocated a relative position in the compiled stack the stack itself is then allocated memory in the data space This is done is a similar fashion to the way non auto variables are assigned memory a psect is used to hold the stack and this psect is placed into the available data memory by the linker The psect used to hold the compiled stack is called cstack and like with non auto variable psects the psect basename is always used in conjunction with a linker class name to indicate the RAM bank in which the psect will be posi
564. y will be bit 1 of address 10H and the Most Significant bit of dummy will be bit 6 of address 10h Unnamed bit fields may be declared to pad out unused space between active bits in control registers For example if dummy is never referenced the structure above could have been declared as struct unsigned oe tes E unsigned S 63 unsigned Pian 2 ae foo A structure with bit fields may be initialized by supplying a comma separated list of ini tial values for each field For example struct unsigned to aoda unsigned IER 335 16 unsigned BI 25 KSE ile G OF 2010 Microchip Technology Inc DS51865B page 59 HI TECH C for PIC10 12 16 User s Guide Structures with unnamed bit fields may be initialized No initial value should be supplied for the unnamed members for example struct unsigned Ie aly unsigned E unsigned aa oe foo lp Dik will initialize the members 1o and hi correctly The HI TECH C compiler supports anonymous unions These are unions with no iden tifier and whose members can be accessed without referencing the enclosing union These unions can be used when placing inside structures For example struct 4 union int x double y JI aaa void main void aaa x 99 CEREN Here the union is not named and its members accessed as if they are part of the struc ture Anonymous unions are not part of any C Standard and so their use limits the por tability of any cod
Download Pdf Manuals
Related Search
Related Contents
HP 410 Digital Copier Printer Setup Poster オンラインマニュアル - 日本電気 22TLKSMART - telefunken Athenatech ATX Mid Tower Black w/400W PS Haustierkamera SPC-130 mit 0,3 MP Betriebsanleitung Grundgerät Copyright © All rights reserved.
Failed to retrieve file