We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Last June, someone asked about how command line symbols defined for both the assembler and the C compiler could be referenced within a conditional (if) statement within a universal shared header file. A company rep said they'd forward this to the tech team for advice. Whatever happened? The issue is this: Symbols of identical name specified on the command line for the assembler and the C compiler end up being unique symbols. Those specified for the assembler are defined as per a "$set" directive and are visible only to the assembler. Those specified for the C compiler are defined as per a "#define" directive and are only visible when running the compiler. In other words, there is no way to define a symbol on the A51 assembler command line that will be visible to the C preprocessor within the assembler. Symbols defined this way are only visible to "$if" statements. PROBLEM: A universal header file containing an "#ifdef SYMBOL" conditional branch will work within C modules, but will not work within assembler modules because the assembler's C preprocessor WILL NOT recognize the referenced symbol and will thus test false. Example:
#ifdef SYMBOL #include <me.h> #endif
#define SYMBOL
I can believe that because now that I think about it, I recall it failing in the past. Hmmmm, seems some C51 constructs are creeping into A51 after all ;)
In our shared headers we extensively use both
#ifdef __C51__ ... stuff intended only for C51 compiler ... such as structure definitions #endif
#ifndef __C51__ ... stuff intended only for A51 Assembler ... such as assembler macros #endif
Its my users that want C constructs in a libraries API. Said library I must code in assembly. What could be stopping you from implementing at least the bulk of it in C? Anyway: just because the API is compatible with C doesn't mean the assembler has to learn C, too. Only the assembly programmer has to --- and the C compiler will help him, if asked. That's what the SOURCE directive really is about: take C source code and produce (dummy) assembly code from it, so a human assembly programmer can work from that as a baseline.