Sign in

username:

password:



Not a member?

Search adsp



Search tips

Subscribe to adsp



adsp by Keywords

AD1819 | AD7332 | ADSP-2106 | ADSP-21060 | ADSP-21065L | ADSP-2116 | ADSP-21160M | ADSP-2181 | ADSP-218x | ADSP-219 | ADSP-2199 | ADSP219 | BF531 | BF532 | BF533 | BF535 | Blackfin | FFT | JTAG | LDF | SDRAM | SHARC | SPORT | UART | VDSP++ | VisualDSP

Ads

Discussion Groups

Discussion Groups | Analog Devices DSPs | Re: AW: SHARC Circular Buffers in C, Software Interrupts

Technical discussions related to Analog Devices DSPs (including Blackfin, TigerSHARC, SHARC and ADSP-21xx DSPs).

  

Post a new Thread

AW: SHARC Circular Buffers in C, Software Interrupts - Christoph Ripcke - Aug 19 12:39:00 2002



Hi Jaime,

all you want to know is written in manuals but here's a short hint.

circular buffers (buffer 7 example):

{
register unsigned int *I7 asm ( "i7" ); // index
register unsigned int *L7 asm ( "l7" ); // length of buffer
register unsigned int *B7 asm ( "b7" ); // base address of buffer
register unsigned int *M7 asm ( "m7" ); // modifier to use

/*
* what U want to do
*/
}

make sure that the compiler won't use the registers you use. In the compiler
setting tabs you can list those registers. For user software interrupts have a look at library function interrupt(f,s),
signal and raise. Last two are used for triggering software itnerrupts.

regards
Christoph -----Originalnachricht-----
Von: jaime_aranguren
An:
Gesendet: 18.08.2002 17:03
Betreff: [adsp] SHARC Circular Buffers in C, Software Interrupts

Hello,

Could please anyone give me information on how to use Circular
Buffers in C
for the SHARC?

Also need guidance on how to setup and use User Software Interrupts
(in C)
for the SHARC.

Using VDSP++ 2.0 for SHARC.

Thanks a lot

--

----------------------------------------------------
Jaime Andrés Aranguren Cardona _____________________________________
/groups.php3





(You need to be a member of adsp -- send a blank email to adsp-subscribe@yahoogroups.com )

Re: SHARC Circular Buffers in C, Software Interrupts - bhaskar_thiagarajan - Aug 19 18:44:00 2002

I have asked this question on this group before.
The response I got indicate that the C compiler does not have any
support for Circular Buffers. The macros (in macros.h) that let you
do this are antique and may not work as advertised.

Christoph's suggestion is pretty much inline assembly and isn't
direct support in C.

You are better off writing an assembly function for the routine or,
implement a modulo buffer in C - it won't be as elegant and certainly
doesn't use the hardware features, but may be more readable

Cheers
Bhaskar

--- In adsp@y..., Christoph Ripcke <CRipcke@m...> wrote:
> Hi Jaime,
>
> all you want to know is written in manuals but here's a short hint.
>
> circular buffers (buffer 7 example):
>
> {
> register unsigned int *I7 asm ( "i7" ); // index
> register unsigned int *L7 asm ( "l7" ); // length of buffer
> register unsigned int *B7 asm ( "b7" ); // base address of
buffer
> register unsigned int *M7 asm ( "m7" ); // modifier to use
>
> /*
> * what U want to do
> */
> }
>
> make sure that the compiler won't use the registers you use. In the
compiler
> setting tabs you can list those registers. > For user software interrupts have a look at library function
interrupt(f,s),
> signal and raise. Last two are used for triggering software
itnerrupts.
>
> regards
> Christoph > -----Originalnachricht-----
> Von: jaime_aranguren
> An: adsp@y...
> Gesendet: 18.08.2002 17:03
> Betreff: [adsp] SHARC Circular Buffers in C, Software Interrupts
>
> Hello,
>
> Could please anyone give me information on how to use Circular
> Buffers in C
> for the SHARC?
>
> Also need guidance on how to setup and use User Software Interrupts
> (in C)
> for the SHARC.
>
> Using VDSP++ 2.0 for SHARC.
>
> Thanks a lot
>
> --
>
> ----------------------------------------------------
> Jaime Andrés Aranguren Cardona
> jaime.aranguren@i...
> jaime.aranguren@c... >
> _____________________________________
> /groups.php3





(You need to be a member of adsp -- send a blank email to adsp-subscribe@yahoogroups.com )

Re: AW: SHARC Circular Buffers in C, Software Interrupts - Jaime Andres Aranguren Cardona - Aug 19 19:11:00 2002

Hello,
Thanks for the reply. Which manuals do you refer to? The Appendix D of the
legacy tools? In macros.h there are only plain C macros, not real hardware
support for circular buffers. So, what could it be the performance
improvement???
Furthermore, as some registers can't be used by the compiler, that could damage
performance making it even worse.
Please, furhter examples, explanations and "personal design success stories" are
very welcomed.
I must clarify, I am working with ADSP-21160M, if it maybe makes a difference.
Best wishes,
JaaC
Christoph Ripcke wrote:Hi Jaime,

all you want to know is written in manuals but here's a short hint.

circular buffers (buffer 7 example):

{
register unsigned int *I7 asm ( "i7" ); // index
register unsigned int *L7 asm ( "l7" ); // length of buffer
register unsigned int *B7 asm ( "b7" ); // base address of buffer
register unsigned int *M7 asm ( "m7" ); // modifier to use

/*
* what U want to do
*/
}

make sure that the compiler won't use the registers you use. In the compiler
setting tabs you can list those registers. For user software interrupts have a look at library function interrupt(f,s),
signal and raise. Last two are used for triggering software itnerrupts.

regards
Christoph -----Originalnachricht-----
Von: jaime_aranguren
An:
Gesendet: 18.08.2002 17:03
Betreff: [adsp] SHARC Circular Buffers in C, Software Interrupts

Hello,

Could please anyone give me information on how to use Circular
Buffers in C
for the SHARC?

Also need guidance on how to setup and use User Software Interrupts
(in C)
for the SHARC.

Using VDSP++ 2.0 for SHARC.

Thanks a lot

--

----------------------------------------------------
Jaime Andrés Aranguren Cardona _____________________________________
/groups.php3
_____________________________________
/groups.php3

Jaime Andrés Aranguren Cardona





(You need to be a member of adsp -- send a blank email to adsp-subscribe@yahoogroups.com )

Re: Re: SHARC Circular Buffers in C, Software Interrupts - Jaime Andres Aranguren Cardona - Aug 19 19:40:00 2002

Hello,
Thanks for the advice. I have some questions.
- After asking several times, what has been your approach? Could you please
illustrate about that?
- Does Christoph's suggestion help to improve performance?
- I am aware that ciruclar buffers usage demands for register reserving to avoid
usage by the C compiler. How does that affect performance? Could you please
share experiences?
A final clarification: I am using ADSP-21160M (SIMD DSP), if it is relevant.
Cheers,
JaaC
bhaskar_thiagarajan wrote:I have asked this question on this group before.
The response I got indicate that the C compiler does not have any
support for Circular Buffers. The macros (in macros.h) that let you
do this are antique and may not work as advertised.

Christoph's suggestion is pretty much inline assembly and isn't
direct support in C.

You are better off writing an assembly function for the routine or,
implement a modulo buffer in C - it won't be as elegant and certainly
doesn't use the hardware features, but may be more readable

Cheers
Bhaskar

--- In adsp@y..., Christoph Ripcke wrote:
> Hi Jaime,
>
> all you want to know is written in manuals but here's a short hint.
>
> circular buffers (buffer 7 example):
>
> {
> register unsigned int *I7 asm ( "i7" ); // index
> register unsigned int *L7 asm ( "l7" ); // length of buffer
> register unsigned int *B7 asm ( "b7" ); // base address of
buffer
> register unsigned int *M7 asm ( "m7" ); // modifier to use
>
> /*
> * what U want to do
> */
> }
>
> make sure that the compiler won't use the registers you use. In the
compiler
> setting tabs you can list those registers. > For user software interrupts have a look at library function
interrupt(f,s),
> signal and raise. Last two are used for triggering software
itnerrupts.
>
> regards
> Christoph > -----Originalnachricht-----
> Von: jaime_aranguren
> An: adsp@y...
> Gesendet: 18.08.2002 17:03
> Betreff: [adsp] SHARC Circular Buffers in C, Software Interrupts
>
> Hello,
>
> Could please anyone give me information on how to use Circular
> Buffers in C
> for the SHARC?
>
> Also need guidance on how to setup and use User Software Interrupts
> (in C)
> for the SHARC.
>
> Using VDSP++ 2.0 for SHARC.
>
> Thanks a lot
>
> --
>
> ----------------------------------------------------
> Jaime Andrés Aranguren Cardona
> jaime.aranguren@i...
> jaime.aranguren@c... >
> _____________________________________
> /groups.php3
_____________________________________
/groups.php3

Jaime Andrés Aranguren Cardona




(You need to be a member of adsp -- send a blank email to adsp-subscribe@yahoogroups.com )

AW: Re: SHARC Circular Buffers in C, Software Interrupts - Christoph Ripcke - Aug 20 10:22:00 2002

Hi Bhaskar,

I don not recommend inline assembly, I recommend to hold hand on how the
compiler uses the CPU registers. the only "inline" is the guidance for the
compiler to name register to make it readable. After the register var
declaration you can continue with plain C and make it as readable as you
like to.

regards
Christoph

P.S.: I know it was silly to declare length and modify register and
pointers. Best regards from copy 'n paste

-----Originalnachricht-----
Von: bhaskar_thiagarajan
An:
Gesendet: 19.08.2002 20:44
Betreff: [adsp] Re: SHARC Circular Buffers in C, Software Interrupts

I have asked this question on this group before.
The response I got indicate that the C compiler does not have any
support for Circular Buffers. The macros (in macros.h) that let you
do this are antique and may not work as advertised.

Christoph's suggestion is pretty much inline assembly and isn't
direct support in C.

You are better off writing an assembly function for the routine or,
implement a modulo buffer in C - it won't be as elegant and certainly
doesn't use the hardware features, but may be more readable

Cheers
Bhaskar

--- In adsp@y..., Christoph Ripcke <CRipcke@m...> wrote:
> Hi Jaime,
>
> all you want to know is written in manuals but here's a short hint.
>
> circular buffers (buffer 7 example):
>
> {
> register unsigned int *I7 asm ( "i7" ); // index
> register unsigned int *L7 asm ( "l7" ); // length of buffer
> register unsigned int *B7 asm ( "b7" ); // base address of
buffer
> register unsigned int *M7 asm ( "m7" ); // modifier to use
>
> /*
> * what U want to do
> */
> }
>
> make sure that the compiler won't use the registers you use. In the
compiler
> setting tabs you can list those registers. > For user software interrupts have a look at library function
interrupt(f,s),
> signal and raise. Last two are used for triggering software
itnerrupts.
>
> regards
> Christoph > -----Originalnachricht-----
> Von: jaime_aranguren
> An: adsp@y...
> Gesendet: 18.08.2002 17:03
> Betreff: [adsp] SHARC Circular Buffers in C, Software Interrupts
>
> Hello,
>
> Could please anyone give me information on how to use Circular
> Buffers in C
> for the SHARC?
>
> Also need guidance on how to setup and use User Software Interrupts
> (in C)
> for the SHARC.
>
> Using VDSP++ 2.0 for SHARC.
>
> Thanks a lot
>
> --
>
> ----------------------------------------------------
> Jaime Andrés Aranguren Cardona
> jaime.aranguren@i...
> jaime.aranguren@c... >
> _____________________________________
> /groups.php3
_____________________________________
/groups.php3





(You need to be a member of adsp -- send a blank email to adsp-subscribe@yahoogroups.com )