simulavr-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Simulavr-devel] ATMega8 class definition


From: address@hidden
Subject: Re: [Simulavr-devel] ATMega8 class definition
Date: Mon, 18 Oct 2010 16:49:28 -0700

On Mon Oct 18 18:02 , 'Petr Hluzín' <address@hidden> sent:

>Hi Michael
>
>I noticed you did not send this to the mailing list. The question may
>benefit from wider audience. Forward my reply to the list if you want.

Oops. I'd intended to.
I'll send my reply to the list and only trim boilerplate.

>All your suggestions suggestions would work. There are downsides, though.
>
>On 18 October 2010 23:06, address@hidden address@hidden> wrote:
>> On Sun Oct 17 14:35 , 'Petr Hluzín' address@hidden> sent:
>>>
>>>Another proposal?
>>>Are there more similar devices in family with ATmega16/ATmega32?
>>
>> If one wants to use common source code,
>> templating would probably produce that fastest object code.
>> A lot of computation could be done at compile time.
>
>Speed is non-issue since the constructors are going to be executed
>once (for every core in simulation, usually also just one).
>
>The template would be parsed or instantiated only in the
>src/atmega16_32.cpp file, even the factory would instantiate just the
>object, not the template.

I was thinking something like
typedef ATMega8_group<ATMega8_interrupts, ...>;
or
class ATMega8 : public ATMega8_group_base<ATMega8_interrupts, ...> {
...
};

If it can be done without contortions, the former is probably better.
That way we get the constructors.
IIRC the constructors are big enough to be subject to tipos..

>> To produce common object code,
>> the differences would have to be stored as variables
>> rather than as template constants.
>> I'd do something like this:
>> struct ATMega8_interrupts {
>>    enum {
>>        fred_interrupt=1,
>>        greg_interrupt=2,
>>        ivan_interrupt=3,
>>        jane_interrupt=4
>>        hank_interrupt=5,
>>        ...
>>    } ;
>> } ;
>> Use ATmega8_interrupts as a template argument.
>>
>>
>> If the object code get to large to be convenient,
>> I see two solutions,
>> a shared library or just compiling for the devices one wants.
>
>We are talking about 2 constructors making slightly larger. There will
>be smaller than (twice) the largest device constructor so far. Less
>than 4000 bytes.
>
>Simulavr is running on desktop. Users can afford waste few KB if it
>makes their or our lives easier. Such optimization does not make a
>sense.
>
>Was it a joke?

No.
For some reason, I was envisioning the possibility of a *lot* of devices.
That said, even if there were that many,
templating is no worse than separate code for each.
I'll go fetch my other hat, the one with my head in it.

--
Michael Hennebry
address@hidden
"War is only a hobby."
---- Msg sent via CableONE.net MyMail - http://www.cableone.net


reply via email to

[Prev in Thread] Current Thread [Next in Thread]