Yahoo Groups archive

AVR-Chat

Index last updated: 2026-04-28 22:41 UTC

Message

Re: [AVR-Chat] Re: I Need A Compiler

2007-01-24 by Russell Shaw

kernels_nz wrote:
> I have found Codevision to be a very good reliable compiler at a very
> reasonable price. Very simple to use interface also.

Back in 2001, codevision had serious bugs. It'd be worth checking before
buying. These are the bugs that hastened my jump to gcc in 2001:

**************************************************
A global enum works ok:

#include<stdlib.h>
enum {where,why,what} alpha;

void main(void)
{
}


However, a local enum generates an illegal-symbol error:

#include<stdlib.h>

void func1(void)
{
   enum {where,why,what} state;
}

void main(void)
{
}

**************************************************
This compiles without error:

#include <stdlib.h>

void input_from_panel(void)
{	static enum {What} state;
}

void send_serial(void)
{	static enum {What} state;
}

void main(void)
{
}


However, this gives a "multiple declaration of What" error:

#include <stdlib.h>

void input_from_panel(void)
{	static enum {Waiting,What} state;
}

void send_serial(void)
{	static enum {What} state;
}

void main(void)
{
}

**************************************************
I got "illegal symbol" in:

struct TCB_struct{
     unsigned char cnt,prio,task_state,swstk[16],*swstkptr;
     void(**hwstkptr)(void);     <<<< illegal symbol
     void(*hwstk[8])(void);
     struct TCB_struct* next_ptr;
};


This doesn't compile:

struct TCB_struct{
     void(**hwstkptr)(void);
};

**************************************************
This compiles ok as a global variable:

   void(*hwstk[8])(void);

This gives an "illegal symbol" error:

   void(**hwstk)(void);

**************************************************
This works:

#include <stdlib.h>

struct {char What;} state;

void main(void)
{
}

This doesn't:

#include <stdlib.h>

void func1(void)
{  struct {char What;} state;
}

void main(void)
{
}
**************************************************

Likewise, for unions, this works:

#include <stdlib.h>

union {char What;} state;

void main(void)
{
}

This doesn't:

#include <stdlib.h>

void func1(void)
{  union {char What;} state;
}

void main(void)
{
}

The local definitions in functions give an "illegal symbol error".

**************************************************

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.