IPS(Interpreter for Process Structures) for mbed
Dependencies: ConfigFile FATFileSystem mbed
IPS port from linux/unix version.
mbed_blinky.ips
0 VAR led1 " LED1 " DigitalOut led1 ! : main ANFANG 1 JA? 1 led1 @ write 200 wait_ms 0 led1 @ write 200 wait_ms DANN/NOCHMAL ; main
- ips-02.tgz - ips for linux/unix
- ipsdoc.zip - document
- https://bitbucket.org/va009039/ips/
Diff: mbedAPI.h
- Revision:
- 2:908338b1151a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbedAPI.h Sat May 23 16:50:59 2015 +0900 @@ -0,0 +1,78 @@ +// mbedAPI.h 2015/5/22 +#include "BaseIPS.h" +#include "myvector.h" + +struct mbedObj { + void* p; + uint8_t ct; +}; + +class mbedAPI { + BaseIPS& ips; + +public: + mbedAPI(BaseIPS& ips_): ips(ips_) {} + void code(); + +private: + template<class T> + void init(int ct) { + push_ps_obj(new T(), ct); + } + + template<class T, typename A1> + void init(int ct) { + A1 a1 = pull_ps<A1>(); + push_ps_obj(new T(a1), ct); + } + + template<class T, typename A1, typename A2> + void init(int ct) { + A2 a2 = pull_ps<A2>(); + A1 a1 = pull_ps<A1>(); + push_ps_obj(new T(a1, a2), ct); + } + + template<class T, typename A1, typename A2, typename A3> + void init(int ct) { + A3 a3 = pull_ps<A3>(); + A2 a2 = pull_ps<A2>(); + A1 a1 = pull_ps<A1>(); + push_ps_obj(new T(a1, a2, a3), ct); + } + + template<class T, void(T::*member)()> + void method(void* obj) { + (reinterpret_cast<T*>(obj)->*member)(); + } + + template<class T, typename A1, void(T::*member)(A1)> + void method(void* obj) { + A1 a1 = ips.pull_ps(); + (reinterpret_cast<T*>(obj)->*member)(a1); + } + + template<typename R, class T, R(T::*member)()> + void method(void* obj) { + ips.push_ps((reinterpret_cast<T*>(obj)->*member)()); + } + + template<typename R, class T, typename A1, R(T::*member)(A1)> + void method(void* obj) { + A1 a1 = ips.pull_ps(); + ips.push_ps((reinterpret_cast<T*>(obj)->*member)(a1)); + } + + template<typename T> + PinName pull_ps(); + + void code_method(int f); + void code_method_I2C(int f, mbedObj& obj); + mbedObj pull_ps_obj(); + void push_ps_obj(void*, int ct); + void pull_ps_string(char* buf, size_t size); + PinName findPinName(const char* name) const; + myvector<mbedObj> objs; +}; + +