English 中文(简体)
MPLAB IDE data type sizes
原标题:

In MPLAB IDE what is the sizes of data types (int, unsigned int, float, unsigned float, char...)?

问题回答

This is hard without knowing for which CPU you want to compile code. Assuming e.g. Microchip s C18 compiler for the PIC18, the User Guide states the following fundamental type sizes:

TYPE                SIZE     RANGE
char(1,2)            8 bits  -128 127
signed char          8 bits  -128 127
unsigned char        8 bits  0 255
int                 16 bits  -32,768 32,767
unsigned int        16 bits  0 65,535
short               16 bits  -32,768 32,767
unsigned short      16 bits  0 65,535
short long          24 bits  -8,388,608 8,388,607
unsigned short long 24 bits  0 16,777,215
long                32 bits  -2,147,483,648 2,147,483,647
unsigned long       32 bits  0 4,294,967,295

Note that this includes some types (short long) that are not standard in C.

Values for int, long, etc., are never standardly defined across all compilers(reference) . For this reason, it is advised to make use of the library:

#include <stdint.h>

To make use of this library for your own purposes, try using the code as follows:

typedef uint8_t    BYTE
typedef uint16_t   WORD
typedef uint32_t   LONG

Then you just use these to define your variables. This method usually makes use of an integer.h file to store these definitions and is included wherever needed.

Here is the implementation of integer data types on different MPLAB XC compilers.

  1. Data Types for 8-bit devices (implementation on XC8 compiler): enter image description here

  2. Data Types for 16-bit devices (implementation on XC16 compiler): enter image description here

  3. Data Types for 32-bit devices (implementation on XC32 compiler):enter image description here

I would be wary of such generalizations. MPLAB is just an IDE - it is suitable for different chips. Microchip has 8-bit controllers like PIC18F, 16-bit and 32-bit controllers. The data types for each may be different and hold serious implications for performance. I.e. for the 8-bit chips the 16 and 32 bit data types may be emulated in software, which isn t always what you want.





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签