aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs10
-rw-r--r--examples/baremetal/cc2540usbdongle/greenblink/system.h14
2 files changed, 19 insertions, 5 deletions
diff --git a/examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs b/examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs
index 4dc400404..eb0be6b34 100644
--- a/examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs
+++ b/examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs
@@ -56,6 +56,7 @@ CppApplication {
return false;
return qbs.toolchain.contains("iar")
|| qbs.toolchain.contains("keil")
+ || qbs.toolchain.contains("sdcc")
}
name: "greenblink"
cpp.positionIndependentCode: false
@@ -105,6 +106,15 @@ CppApplication {
}
//
+ // SDCC-specific properties and sources.
+ //
+
+ Properties {
+ condition: qbs.toolchain.contains("sdcc")
+ cpp.commonCompilerFlags: ["-mmcs51"]
+ }
+
+ //
// Common code.
//
diff --git a/examples/baremetal/cc2540usbdongle/greenblink/system.h b/examples/baremetal/cc2540usbdongle/greenblink/system.h
index 0b5027bf9..cdc6302d4 100644
--- a/examples/baremetal/cc2540usbdongle/greenblink/system.h
+++ b/examples/baremetal/cc2540usbdongle/greenblink/system.h
@@ -58,18 +58,22 @@ extern "C" {
#if defined(__ICC8051__)
#include <intrinsics.h>
# define system_nop() __no_operation()
-# define SFR(name,addr) __sfr __no_init volatile unsigned char name @ addr;
+# define DEFINE_SFR(name,addr) __sfr __no_init volatile unsigned char name @ addr;
#elif defined (__C51__)
#include <intrins.h>
# define system_nop() _nop_()
-# define SFR(name, addr) sfr name = addr;
+# define DEFINE_SFR(name, addr) sfr name = addr;
+#elif defined (__SDCC_mcs51)
+#include <mcs51/compiler.h>
+# define DEFINE_SFR(name, addr) __sfr __at(addr) name;
+# define system_nop() NOP()
#else
#error "Unsupported toolchain"
#endif
-SFR(P0 , 0x80u) // Port 0.
-SFR(P0SEL, 0xF3u) // Port 0 function select.
-SFR(P0DIR, 0xFDu) // Port 0 direction select.
+DEFINE_SFR(P0 , 0x80u) // Port 0.
+DEFINE_SFR(P0SEL, 0xF3u) // Port 0 function select.
+DEFINE_SFR(P0DIR, 0xFDu) // Port 0 direction select.
#ifdef __cplusplus
}