Micro C 8051 Development System Support & Frequently Asked Questions


[1] I would like to receive more information about your products. How do I get it?

[2] Which of your products do I need to develop code for [Microcontroller Name]?

[3] What are the differences between demo-versions and licensed versions?

[4] Does Micro C support the [my favorite processor]?

[5] How big a program can I build with Micro C compiler?How much code can I fit in (nK) of memory?

[6] Do your tools work with [manufacturers name] boards?Can you recommend a board to use with your tools?

[7] How do I configure memory/registers/peripheral addresses?

[8] Does Micro C provide C libraries for [device name]?

[9] Is Micro C a full ANSI compiler?

[10] Does Micro C compiler support floating point?Does Micro C include "math.h" and related functions?

[11] Does Micro C compiler compile C++ ?

[12] Do development systems include a linker?

[13] Does Micro C output assembly code? Do I need an assembler?

[14] Can Micro C generate assembly language source as its output?

[15] Do your tools provide 'C' source debugging?

[16] Can I compile code written using [other vendors tools]?

[17] Can I upgrade my 'xxx' development system to support processor family 'yyy'?

[18] How can I read the status of a single port bit ?

[19] Why do I get a dosspawn error ?

[20] Which Operating Systems are supported ? Do the tools support Windows 7 64-bit ?

[21] Do you ship a CD ?

[22] The debugger gives the ERROR message: "The user code falls in the memory area occupied by the debugger kernel". What to do ?

[23] Is Micro C a good tool to learn about microcontrollers and/or assembly language ?


[1] I would like to receive more information about your products. How do I get it?

Please visit our web site http://www.bipom.com, for product listings, FAQ's and demos. Most products have a downloadable demo which will give you access to much of the documentation, and the chance to try out the main features.

If the information on the website does not provide the answers you are looking for, please contact our technical support with specific questions.

[2] Which of your products do I need to develop code for [Microcontroller Name]?

If you are looking to develop in 'C', our "Development system" products contain everything you need to develop code for a specific target processor family. (ie: If you want to develop code for the 8051 family, you need the "8051 Development system").

Each Development system contains:

  • C compiler and library
  • Assembler, linker and library manager
  • TTY style resident Monitor/Debugger (excluding certain kits)
  • Optional simulator (for some toolkits, purchased separately)
  • Optional source-level debugger (for some toolkits, purchased separately)
  • Windows IDE and command line tools
  • Make/Touch utilities
  • Windows toolkit configurator
  • Detailed documentation
  • Project Examples
  • Many other utilities and extras

[3] What are the differences between demo-versions and licensed versions?

The packages you can download from our site contain all the pieces of software needed for development, but with the following restrictions:

  • Source code length restricted to 500 lines
  • Binary code length restricted to 2K
These restrictions are removed by entering a valid serial number during installation.

[4] Does Micro C support the [my favorite processor]?

Micro C has been designed to be very flexible in supporting derivative processors, and will accommodate most of them very easily. Please note the following guidelines when evaluating the suitability of our tools for a particular derivative processor:

  • Micro C currently supports all processors which use the standard instruction set of any of the following Microcontroller families: 68HC08, 6809, 68HC11, 68HC12, 68HC16, 8051/52, 8080/85, 8086 and 8096.
  • Small 8051 derivatives which do not support the long JMP and CALL instructions are also supported.
  • Additional peripheral registers (called SFRs in the 8051 family) can be easily defined for direct access of all on-chip peripheral features from C (application notes on how to do this are included).
  • Superset processor architectures (those having extra instructions and/or additional memory addressing built into the instruction set) should work OK, but the extra features may not be directly accessible.
  • Subset or modified processors (those which do not support all of the instructions, or have instructions which differ from the standard ones) may not work. Obscure instructions not normally used in normal data manipulation do not usually cause a problem (they may be used in the library, but complete source is provided should you have to modify it), Sometimes MACRO's can be used to translate or simulate instructions which are automatically generated by the compiler.
NOTE that the C-FLEA virtual machine development tools can be made to work with ANY processor (even if it is not in a Microcontroller family listed)!

[5] How big a program can I build with Micro C compiler?How much code can I fit in (nK) of memory?

BiPOM tools all support 16 bit addressing, allowing a minimum 64K of memory. Many processor architectures allow for separation of code and data, and Micro C support this via different memory models, some examples are:
8051: 64K code + 64K data + 256 bytes data
6816: 64K code + 64K data
8086: 64K code + 64K data

Note that although the compiler supports up to 64K addressing, many small embedded controllers do not. You will always be limited to the maximum memory available on your target system if it is less than 64K.
For processors which have more than 64K of memory address space, Micro C can support this via "bank switching" techniques, as outlined in our application notes (similar techniques can be used to provide more than 64K of code on processors which don't natively support more than 64K as well).
The question of how much code fits into (nK) of memory depends on so many factors that its impossible to give a general answer. It is usually more than you would think, because Micro C produces fairly compact code. This is especially true with our "Development systems", because their libraries are hand-coded in assembly language, using very tight code. Here are some examples of applications:

  • Micro C Compiler (compiled itself!) 25K
  • ANSI terminal with built in XMODEM file transfer 10K
  • Combination lock (rotary encoder, led indicator) 2K
  • Telephone "distinctive ring" switcher (1 - 3 lines) 1K

[6] Do your tools work with [manufacturers name] boards?Can you recommend a board to use with your tools?

Many of our customers had good experience using Micro C with our Microcontroller Boards.

The tools are fully configurable to set the memory addresses and I/O ports used, and can be used with virtually any board or target system.

Full source code to libraries is included so that you can perform any "tweaking" that you may need to do for a particular environment (normally, this only involves setting the available memory addresses). Information on setting up the library and memory map is included.

As long as your board uses a Microcontroller which is instruction set compatible with a processor family which we support, you should have no problems adapting the tools to work with it.

[7] How do I configure memory/registers/peripheral addresses?

Micro C supports a very flexible library structure, which allows you to easily set memory addresses, processor function registers, hardware addresses etc. in the startup file. Detailed documentation on how to do this is provided with the compiler library.

Due to the way Micro C linker operates (see FAQ), all you have to do is to make your changes to the startup file and compile. There is no need to "rebuild" libraries or any other steps. A compile option allows you to have any number of startup files, and select the one you wish to use for any given compile.

[8] Does Micro C provide C libraries for [device name]?

Micro C provides library functions and definitions to control basic services of the processor in question (serial port, peripheral control regist ers etc.), but Micro C generally does not provide off-the-shelf drivers for external peripheral devices, or devices not common to all processors of a specific type.

There are a few exceptions (ss for processors which do not have a built in serial interface, I2C devices for the 8051), however for the most part, the available devices which can be attached to a microcontroller are simply too numerous and varied.

It is therefore up to the user to provide support for external hardware which he wishes to connect to his target platform. This can be done either in pure 'C', or with inline assembly language. Micro C does provide "helper" functions in its library (for example, if you wish to develop a "printf" which communicates with an LCD panel, you can take advantage of the existing "format" subroutine in the library to perform all of the formatting).

If you are used to hooking up a device to a Micro Controller, and writing software (in C or Assembly) to read/write it's registers, set/clear required bits etc. to make it work, then you will not have a problem doing so with Micro C tools.

Our 8051 Development System also includes the following pre-packaged
libraries:

  • I2C serial communications library
  • RTC Real-time clock library
  • TCP/IP Stack library ( including all layers: CS8900/ARP/IP/ICMP/TCP all open-source ) XRAM access library

[9] Is Micro C a full ANSI compiler?

Micro C is a "near ANSI" subset compiler. It does however, support more of the 'C' language than most other subset compilers, including:

  • All 'C' statements: if/else while do/while for break continue return goto switch/case/default {} ; asm
  • All 'C' operators: + - * / % & | ^ << >> > < == ~ ++ -- ?: , . -> += -= *= /= %= &= |= ^= <<= >>= >= <= != ! () [] sizeof
  • The following data types: int char unsigned (including: unsigned char) struct union extern static register const void *(pointer to any type, incl. pointers and structs)
  • Arrays of any type (including multi-dimension, pointers & structs)
  • Functions can return any type
  • Type cast of values to other types
  • Decimal, Octal and Hex constants. eg: 127, 0177, 0x7f
  • Full support for strings and character constants: ('' ") Including: \n \r \t \b \f \177(Octal) \x7F(Hex) (16 bit character constants are supported. eg: 'ab')
  • Inline assembly code (single or multi statement).
  • Preprocessor commands: #define (fully parameterized & multi-line), #undef, #forget (multi undef -similar to FORTH forget), #error, #message (Output informational message - no error), #include, #if/#ifdef/#ifndef/#else/#elif/#endif (fully nested), #file (sets filename displayed in error messages)
  • Predefined symbols: __DATE__ __FILE__ __LINE__ __TIME__
It DOES NOT support: Typedef, native Long* / Double / Float / Enumerated data types, Bit fields.

32 bit "long" number math functions are provided in a library. These may be easily adjusted to manipulate even larger numbers. (8051 Compiler also includes a floating point library)

[10] Does Micro C compiler support floating point?Does Micro C include "math.h" and related functions?

No, Micro C is an integer only (non floating point) implementation of C. This means that it does not support the "float" and "double" types, and does not include "sin(), cos(), tan(), log() etc." functions.
The decision not to support floating point was made partly because it simplifies type conversions and reduces the size of the runtime library, but mainly because floating point is inefficient and usually unnecessary in most embedded systems.
All of the development kits do include a long integer library, which can perform fast integer arithmetic on numbers of up to 256 bytes (2048 bits) in length. Many/most projects for which the programmer wishes to use floating point can often be more efficiently implemented with scaled large integers.
The 8051 compiler does include a floating point library, which was made available by one of the customers. This library and it's details can be downloaded free of charge.Download Floating-point subroutines.(Contributed by a customer)

[11] Does Micro C compiler compile C++ ?

No, Micro C is a standard C compiler. It does not compile C++. (Many C++ features require much more overhead than is reasonable for the small 8 and 16-bit systems which Micro C targets - as a result of this, most small embedded systems continue to be developed in C).

[12] Do development systems include a linker?

Yes, all Micro C embedded compilers include a linker. The linker is specifically designed for use with embedded systems, and therefore operates differently from many other linkers:
All of the libraries and linkable modules are stored in the form of assembly language source files instead of a binary "object" format. These may be hand-crafted (as in the case of the libraries), or the assembly output of the C compiler.
The "source" Linker (SLINK.EXE) performs all operations that a conventional object linker does, but at this assembly source level:

  • Resolve inter-module external references.
  • Resolve library references by pulling in the library code required (Only the library modules required are included). (SLINK also supports runtime loading of only sections of a library file, a feature not found on object linkers).
  • Provide multiple output "segments", and allow code and data to be directed into these segments (by SLINK directives embedded in the source) as it is processed. This provides the ability to group all code, internal data, static data, dynamic data, etc. into specifically allocated areas of memory.
  • Update non-public and compiler generated symbols to be unique, eliminating symbol conflicts between modules.
The final output of SLINK is a single assembly file which contains the entire program. This is then fed into an assembler that produces the final binary program ( a hex file )

[13] Does Micro C output assembly code? Do I need an assembler?

Micro C generates assembly code. All development systems include XASM cross assembler, that our IDE automatically runs, resulting in a "one step" compile. A command line option allows including 'C' source code as comments in the ASM listing.

Micro C supports inline assembly ( sections of assembly language in C programs ) . The 'asm' statement used to implement the inline assembly language capability of MICRO-C accepts two forms:

asm " ...Your Assembly Instruction here... ";      <- Assemble single line.

asm {           <- Assemble multiple lines.
         ... Your Assembly Instructions here...
       }


Examples:

asm "NOP"

asm {
NOP
MOV A,#2
}


[14] Can Micro C generate assembly language source as its output?

Yes! Micro C is not only capable of generating an .ASM output file from your 'C' source, but it can also generate an .ASM output file for the entire program, including fully commented library source code! (This is a feature few other tool sets offer).

When generating .ASM source code from your 'C' program, Micro C can optionally insert the original 'C' source code as comments in the assembly output. When assembled into a full listing, this provides a detailed map of all the 'C' source code, the assembly code generated from it, and the hex object code actually placed into memory (for the ENTIRE program)!

[15] Do your tools provide 'C' source debugging?

'C' as well as Assembly source code debugging is fully supported by the 8051 Development System. During debugging you can switch between 'C' and assembly views. Several panes represent Variable Watch, Call Stack, Memory, Registers and terminal information. Debugging modes supported are Step Into, Step Over, Step Out and Run. You can also put a breakpoint at any line of 'C' or Assembly code.

[16] Can I compile code written using [other vendors tools]?

Micro C supports most of the standard 'C' programming language, and will therefore accept most standard 'C' code without modification, however:

Standard 'C' does not specify a number of capabilities which are needed in most embedded systems. For this reason, all vendors of embedded tools have provided language and library extensions which are unique to their tool set. There are no standards for these extensions, and they differ greatly from one vendor to another. Any code which uses such extensions will very likely have to be modified when porting it to ANY other vendor's tools.
Every effort has been made to keep Micro C as standard as possible, and Micro C extensions are designed to be very similar to standard language features and syntax. Quite often, code using other vendors' extensions can be ported to Micro C development systems very easily, using techniques such as global name changes, preprocessor macros and/or wrapper functions.

[17] Can I upgrade my 'xxx' development system to support processor family 'yyy'?

To work with a completely different processor family, you will need to purchase the development system for that family, which is a separate product, and does not qualify as an upgrade.
No, each Development system is targeted at a specific processor family, and can be used only with members/derivatives of that processor family. To work with a completely different processor family, you will need to purchase the development tool set for that family, which is a separate product, and does not qualify as an upgrade.

[18] How can I read the status of a single port bit ?

You can find this macro in C:\bipom\devtools\MicroC\8051BIT.h

#define tstbit(address,bit) (address&(1<<bit)) /* Test an I/O bit */

How can you use ?

if ( tstbit( P1,4))
{
// P1.4 is set
}
else
{
// P1.4 is clear
}


[19] Why do I get a dosspawn error ?

This is almost always due to a too long command line for Micro C linker. Micro-IDE substitutes the macro {OBJFILES} with the actual names of the object files to be linked. If there are too many files in the project, the command line may be too long. The solution is to put the linker object filenames in a text file and specify this text file on the linker command line.

For example, you have the files:

mysource1.c
mysource2.c
mysource3.c
mysource4.c
mysource5.c
mysource6.c
mysource7.c
mysource8.c
mysource9.c
mysource10.c


in your project. The names of all these object files cause a very long linker command line so the linker may not be started properly. To work around this, put these files in a text file, for example files.txt, and specify @files.txt on the linker command line instead of {OBJFILES}.

In this case, files.txt would contain:

mysource1.c
mysource2.c
mysource3.c
mysource4.c
mysource5.c
mysource6.c
mysource7.c
mysource8.c
mysource9.c
mysource10.c


and the linker command line would be:

... slink @file.txt ...

instead of

... slink {OBJFILES} ...


[20] Which Operating Systems are supported ? Do the tools support Windows 7 64-bit ?

Our tools support Windows 95/98/ME/NT/2000/XP/Vista and Windows 7 (32-bit only). 64-bit OS support exists only in Virtual XP Mode. So under Windows 7 Professional or Windows 7 Ultimate, you can enable Virtual XP Mode and use Micro C 8051. It has been tested.Windows 7 Home or Windows 7 Starter will not work as these do not support Virtual XP Mode.

[21] Do you ship a CD ?

With the exception of a few third-party tools ( such Flowcode ), our software tools are downloadable from our website. We do not ship a CD. We send download instructions and license information by email.

[22] The debugger gives the ERROR message: "The user code falls in the memory area occupied by the debugger kernel". What to do ?

If you use the debugger, your code can not occupy the first 2K of 8051 memory map (locations 0 to 7FF locations). This area is reserved for a resident part of the debugger. Your program should start at 0800 using ORG $0800 statement.

[23] Is Micro C a good tool to learn about microcontrollers and/or assembly language ?

Yes, absolutely! Micro C has a built-in assembler that allows you create assembly-only source files, mixed C/Assembly, inline assembly inside C source files and/or multiple assembly files in the same project.Most Micro C Development Systems have a low-cost simulator option ( free with limited code size ) that allows you to single step through assembly or mixed C/assembly code, look at register values, watch memory locations and set breakpoints. As each assembly instruction is executed, you can examine the register values and immediately see the results of the operation. This hands-on process allows the beginners to get up to speed with microcontrollers fast.