Embedded Computing: January 2005 Archives

Bit Manipulation , Shifting and Rotating

|

If you don't know the difference between an RL and an RLC then this is the site for you.

http://karma.ticalc.org/guide/lesson14.html

Call for Papers - DSD 2005

|

I attended this conference in Rennes last year and presented a paper. I found it to be well organised an well worth attending. This year its on in Portugal.

DSD’2005
8th EUROMICRO CONFERENCE ON
DIGITAL SYSTEM DESIGN
Architectures, Methods and Tools
Porto, Portugal, August 30th - September 3rd, 2005
URL: http://dsd2005.univ-rennes1.fr
Call for Papers

The Euromicro Conference on Digital System Design (DSD) addresses all aspects of (embedded) digital and mixed hardware/software system engineering.

It is a discussion forum for researchers and engineers working on state-of-the-art investigations, development, and applications.

It focuses on advanced system, design, and design automation concepts, paradigms, methods and tools, as well as, modern implementation technologies that enable effective and efficient development of high-quality (embedded) systems for important and demanding applications in fields such as (wireless) communication and networking; measurement and instrumentation; health-care and medicine; military, space, avionic and automotive systems; security; multi-media and ambient intelligence.

The main areas of interest are the following:

T1. Systems-on-a-chip/in-a-package: generic system platforms and platform-based design; network on chip; multi-processors; system on re-configurable chip; system FPGAs and structured ASICs; rapid prototyping; asynchronous systems; power, energy, timing, predictability and other quality issues; intellectual property, virtual components and design reuse.

T2. Programmable/re-configurable architectures: processor, communication, memory and software architectures with focus on application specific and/or embedded computing, co-processors; processing arrays; programmable fabrics; embedded software; arithmetic, logic and special-operator units.

T3. System, hardware and embedded software specification, modeling and validation: design languages; functional, structural and parametric specification and modeling; simulation, emulation, prototyping, and testing at the system, register-transfer, logic and physical levels; co-simulation and co-verification.

T4. System, hardware and embedded software synthesis: system, hardware/software and embedded software synthesis; behavioral, register-transfer, logic and physical circuit synthesis; multi-objective optimization observing power, performance, communication, interconnections, layout, technology, reliability, robustness, security, testability and other issues; (dynamic) management of computational resources, power, energy etc.; design environments for embedded systems and re-configurable computing.

T5. Emerging technologies, system paradigms and design methodologies: optical, bio, nano and quantum technologies and computing; self-organizing and self-adapting (wireless) systems; wireless sensor networks; ambient intelligence and augmented reality; ubiquitous, wearable and implanted systems; deep sub-micron design issues.

T6. Applications of (embedded) digital systems with emphasis on demanding and new applications in fields such as: (wireless) communication and networking; measurement and instrumentation; health-care and medicine; military, space, avionic and automotive systems; security; multi-media, instrumentation and ambient intelligence; health-care and medicine; military, space, avionic and automotive systems; security; multi-media and ambient intelligence.

Special Sessions:

SS1. Wireless Sensor Network*

SS2. Dependability and Testing of Digital Systems*

SS3. Remote Educational Tools for Design and Testing*

* see a corresponding CFP ( http://dsd2005.univ-rennes1.fr/ )

inline assembly woes - calling instructions

|

The following code below is a common problem experienced by developers who try and call an assembler instruction from C. Most online documentation would advise the following.

static long mymul(long a, long b) {
long result;
__asm(
"mul %0,%1,%2"
: "=r" (result)
: "r" (a), "r" (b));
return result;
}

This however givs the error.
"rd and rm should be different in mul".

If one examines the assembler code they would see something like this
mul r0,r1,r0
gcc happens to put 'result' and 'a' into the same register.

To avoid this, you have to prevent gcc from doing that.
The easy way to prevent this is to mark the output operand as an input/output operand, like this:

__asm(
"mul %0,%1,%2"
: "+r" (result)
: "r" (a), "r" (b));

(that is, change '=' to '+' in the description of result).

This will prevent gcc from using the same register as an input
operand.

The resulting assembler code will look like
mul r3, r1 ,r2

Note - Code samples from above where taken from a discussion on the gcc mailing list
http://gcc.gnu.org/ml/gcc-help/2004-03/msg00085.html