Hi Ivan, Thanks! python 2.7.8 (32-bit manually compiled) Linux asif-Satellite-C655 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux Pekka assisted me solving the issue! I am calling the python interpreter from Register.cpp only using ( Py_Initialize() and Py_Finalize() ), still after running the rf test case under gdb, I get following segmentation fault: Does that mean I have to call the python interpretor in a seperate thread or so from the Register.cpp class? Any guesses ... I am not calling python interpreter from the main.c or so. ------------------------------------------------------------------------------------------ ============================================================================== DigitalRead ============================================================================== Read high from pin :: Test Setup: Set the pin mode to output. Test... GPIO:MODER:value=0 -> =40 .GPIO:MODER:value=40 -> =40 GPIO:BSRRL:value=0 -> =0 Here we call python from Register Class *Program received signal SIGSEGV, Segmentation fault.* *0x0811b581 in wait_for_thread_shutdown () at Python/pythonrun.c:1720* *1720 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,* (gdb) where #0 *0x0811b581 in wait_for_thread_shutdown () at Python/pythonrun.c:1720* *#1 Py_Finalize () at Python/pythonrun.c:416* *#2 0xf6f8923f in Register::GPIO_Callback_Python (this=0xf7130f78 <GeneralPurposeInputOutput::GPIOB+84>)* * at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:48* #3 0xf6f8a97d in Register_GPIO_BSRRL::operator= (this=0xf7130f78 <GeneralPurposeInputOutput::GPIOB+84>, arg=8) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register_GPIO_BSRRL.cpp:30 #4 0xf6f88b7c in digitalWrite (pin=<optimized out>, val=<optimized out>) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../cores/arduelli/wiring_digital.h:58 #5 0xf76005b6 in ffi_call_SYSV () at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Testing/Python-2.7.8/Modules/_ctypes/libffi/src/x86/sysv.S:65 #6 0xf7600328 in ffi_call (cif=<optimized out>, cif@entry=0xffffb3e4, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Testing/Python-2.7.8/Modules/_ctypes/libffi/src/x86/ffi.c:411 #7 0xf75f8c44 in _call_function_pointer (argcount=<optimized out>, resmem=<optimized out>, restype=<optimized out>, atypes=<optimized out>, avalues=<optimized out>, pProc=<optimized out>, flags=<optimized out>) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Testing/Python-2.7.8/Modules/_ctypes/callproc.c:836 #8 _ctypes_callproc (pProc=pProc@entry=0xf6f88bc3 <t_digitalWrite(pin_t, uint32_t)>, argtuple=argtuple@entry=0xf7370b2c, flags=4353, argtypes=argtypes@entry=0x0, restype=restype@entry=0xf763d3dc, checker=checker@entry=0x0) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Testing/Python-2.7.8/Modules/_ctypes/callproc.c:1183 #9 0xf75ef851 in PyCFuncPtr_call (self=0xf724bb8c, inargs=0xf7370b2c, kwds=0x0) at /home/asif/Ell-i-Working-Directory/Ell-i-Software-Testing/Python-2.7.8/Modules/_ctypes/_ctypes.c:3965 #10 0x08066b13 in PyObject_Call (func=func@entry=0xf724bb8c, arg=arg@entry=0xf7370b2c, kw=kw@entry=0x0) at Objects/abstract.c:2529 #11 0x080ee3af in do_call (nk=<optimized out>, na=<optimized out>, pp_stack=0xffffb548, func=0xf724bb8c) at Python/ceval.c:4251 #12 call_function (oparg=<optimized out>, pp_stack=0xffffb548) at Python/ceval.c:4056 #13 PyEval_EvalFrameEx (f=f@entry=0xf7172a04, throwflag=throwflag@entry=0) at Python/ceval.c:2679 #14 0x080f1467 in fast_function (nk=<optimized out>, na=<optimized out>, n=3, pp_stack=0xffffb608, func=0xf7144fb4) at Python/ceval.c:4119 #15 call_function (oparg=<optimized out>, pp_stack=0xffffb608) at Python/ceval.c:4054 #16 PyEval_EvalFrameEx (f=f@entry=0xf717419c, throwflag=throwflag@entry=0) at Python/ceval.c:2679 #17 0x080f318f in PyEval_EvalCodeEx (co=0xf71ad0f8, globals=0xf71afb54, locals=locals@entry=0x0, args=args@entry=0xf7370b78, argcount=2, kws=kws@entry=0xf7d58038, kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0, closure=0x0) at Python/ceval.c:3265 #18 0x08160676 in function_call (func=0xf7149454, arg=0xf7370b6c, kw=0xf7169934) at Objects/funcobject.c:526 #19 0x08066b13 in PyObject_Call (func=func@entry=0xf7149454, arg=arg@entry=0xf7370b6c, kw=kw@entry=0xf7169934) at Objects/abstract.c:2529 #20 0x080ef4fe in ext_do_call (nk=<optimized out>, na=0, flags=<optimized out>, pp_stack=0xffffb7d8, func=0xf7149454) at Python/ceval.c:4346 #21 PyEval_EvalFrameEx (f=f@entry=0xf716d86c, throwflag=throwflag@entry=0) at Python/ceval.c:2718 #22 0x080f318f in PyEval_EvalCodeEx (co=co@entry=0xf7452bf0, globals=globals@entry=0xf74c29bc, locals=locals@entry=0x0, args=args@entry=0xf7168b4c, argcount=argcount@entry=0, kws=0xf7168b4c, kwcount=0, defs=0x0, defcount=0, closure=0xf71b68c4) at Python/ceval.c:3265 #23 0x080f13a5 in fast_function (nk=<optimized out>, na=0, n=<optimized out>, pp_stack=0xffffb918, func=0xf71574c4) at Python/ceval.c:4129 ------------------------------------------------------------------------------------------ On Wed, Oct 15, 2014 at 10:15 PM, Ivan Raul <supra.material@xxxxxxxxx> wrote: > Hi, > > I want to help. Asif, what is the output of: > > python --version > which python > uname -a > > With Warm Regards, Ivan Raul > > On Wed, Oct 15, 2014 at 8:52 PM, Jose Granados Vergara < > jose.granados@xxxxxx> wrote: > >> Could you run the file command on the executable to see what it is? >> >> There are some libraries that need to be installed on Ubuntu 64 bits to >> run 32 bits (ia32-libs, gcc-multilib, g++-multilib, binutils-multiarch, >> ia32-libs-dev). >> >> As a last resource you can try 32 bits isolation by installing a 32 bit >> Ubuntu in a virtual machine. >> >> -Jose >> ------------------------------ >> *De:* Asif Sardar [engr.asif.sardar@xxxxxxxxxxxxxx] >> *Enviado:* miércoles, 15 de octubre de 2014 01:48 p.m. >> *Para:* ell-i-developers@xxxxxxxxxxxxx >> *CC:* Jose Granados Vergara; Lari Lehtomäki >> *Asunto:* Re: [ell-i-developers] Re: Embedding python in emulator >> >> Yup, cross-compiling will not work, in website the procedure was >> basically cross-compiling python for target platform. >> >> Anyway, it seems to be 32-bit vs 64-bit platform issue. I separately >> compiled and linked a C++ program to embed python in it using 32-bit >> python. It compiled and linked with those CFLAGS and LDFLAGS, but the >> executable was not running reporting error: cannot execute binary file: >> Exec format error. I am using 64 bit OS Ubuntu and when I compile the above >> program using the default python I have in Ubuntu, it compiled, linked and >> worked. Also, the following errors seems to be processor architectural >> issues with binaries. I don't have enough skills with kernel-level or OS >> system level debugging issues, so if anybody else got any ideas then please >> share with us on this platform. >> >> The program is also attached to this e-mail, its very simple program to >> test embedding python in C/C++ programs. >> >> I will stick to the procedure where python calls C/C++ code in emulator >> and in return gets values from the emulator using callbacks. >> >> On Tue, Oct 14, 2014 at 8:58 PM, Pekka Nikander <pekka.nikander@xxxxxx> >> wrote: >> >>> I don't think cross-compiling python for ARM is the right way. You will >>> not be able to run the result anywhere. >>> >>> --Pekka >>> >>> >>> On 2014–10–14, at 20:27 , Asif Sardar <engr.asif.sardar@xxxxxxxxxxxxxx> >>> wrote: >>> >>> By native I meant my own laptop e.g. using gcc-linux to compile >>> python. I want to use python interpretor to be called from emulator code to >>> call some python functions (This will help later on for multi-purposes e.g. >>> we can call python from C/C++ independently). Currently, the callbacks I >>> have implemented have to pass-on information to python by actually calling >>> the emulator from python itself (2-way calling). If I am able to embed >>> python in emulator, it will asynchronously or independently call python >>> whenever needed from C/C++ code. Actually, the test libraries are written >>> in python language in Robot Framework that is why I am interested to do >>> these kind of functionality to both C/C++ and python. >>> >>> I will try the steps in >>> https://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html#python >>> to cross-compile the python for ARM itself. I will share the findings here! >>> >>> On Tue, Oct 14, 2014 at 8:12 PM, Jose Granados Vergara < >>> jose.granados@xxxxxx> wrote: >>> >>>> Isn't the emulator native? why do you need to bind Python to the ARM >>>> binaries? >>>> >>>> -Jose >>>> ------------------------------ >>>> *De:* Asif Sardar [engr.asif.sardar@xxxxxxxxxxxxxx] >>>> *Enviado:* martes, 14 de octubre de 2014 08:04 p.m. >>>> *Para:* Jose Granados Vergara >>>> *CC:* ell-i-developers@xxxxxxxxxxxxx; Lari Lehtomäki >>>> *Asunto:* Re: Embedding python in emulator >>>> >>>> Thanks Jose, >>>> >>>> On native platform, its working for me as well. I think I have to >>>> re-compile or cross-compile 32-bit python using ARM tools e.g. using >>>> something like CXX=arm-none-linux-gnueabi-g++ and then rebuild robot >>>> framework. >>>> >>>> I have to compile the emulator files using arm-tool chain and I am >>>> including the 32-bit python in it built with native gcc toolchain. >>>> >>>> If anyone else has some suggestions that I will really appreciate! >>>> >>>> On Tue, Oct 14, 2014 at 7:58 PM, Jose Granados Vergara < >>>> jose.granados@xxxxxx> wrote: >>>> >>>>> This worked for me: >>>>> >>>>> something.c: >>>>> >>>>> #include "Python.h" >>>>> >>>>> int main() >>>>> { >>>>> Py_Initialize(); >>>>> return 0; >>>>> } >>>>> >>>>> ~$ g++ -I/usr/include/python2.7 something.c -o something -lpython2.7 >>>>> >>>>> >>>>> -Jose >>>>> ------------------------------ >>>>> *De:* Asif Sardar [engr.asif.sardar@xxxxxxxxxxxxxx] >>>>> *Enviado:* martes, 14 de octubre de 2014 07:40 p.m. >>>>> *Para:* ell-i-developers@xxxxxxxxxxxxx >>>>> *CC:* Lari Lehtomäki; Jose Granados Vergara >>>>> *Asunto:* Fwd: Embedding python in emulator >>>>> >>>>> Hi, >>>>> >>>>> Has anybody embedded python in C/C++ application. My platform is >>>>> 64-bit and python binaries I am using for Runtime/emulator is 32-bit. I >>>>> have added following flags in CFLAGS and LDFLAGS to compile and link the >>>>> c/c++ files in emulator with (#include >>>>> </path/32-bit-python/include/python.h>) >>>>> >>>>> CFLAGS += -I/opt/pym32/bin/include/python2.7 -fno-strict-aliasing >>>>> -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes >>>>> >>>>> LDFLAGS += -L/opt/pym32/lib/python2.7/config -lpthread -ldl -lutil -lm >>>>> -lpython2.7 -Xlinker -export-dynamic >>>>> >>>>> The files compiles but breaks when linking. Can anybody help with >>>>> following errors: >>>>> >>>>> ----------------------- >>>>> ./libsystem_stm32f4discovery.a(Register.o): In function >>>>> `Register::GPIO_Callback_Python(std::string, std::string, unsigned int, >>>>> std::string)': >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41: >>>>> undefined reference to `Py_Initialize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43: >>>>> undefined reference to `PyRun_SimpleStringFlags' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44: >>>>> undefined reference to `Py_Finalize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41: >>>>> undefined reference to `Py_Initialize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43: >>>>> undefined reference to `PyRun_SimpleStringFlags' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44: >>>>> undefined reference to `Py_Finalize' >>>>> ./libsystem_stm32f4discovery.a(system_stm32f4xx.o): In function >>>>> `__exchange_and_add': >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> ----------------------- >>>>> >>>>> >>>>> ---------- Forwarded message ---------- >>>>> From: Asif Sardar <engr.asif.sardar@xxxxxxxxxxxxxx> >>>>> Date: Mon, Oct 13, 2014 at 6:17 PM >>>>> Subject: Embedding python in emulator >>>>> To: Pekka Nikander <pekka.nikander@xxxxxx> >>>>> >>>>> >>>>> Hi Pekka, >>>>> >>>>> I am trying to include python.h in emulator/inc/register.h >>>>> >>>>> I have to include cflags and ldflags in Makefile system of emulator >>>>> e.g. >>>>> >>>>> -I/opt/include/python2.7 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 >>>>> -Wall -Wstrict-prototypes >>>>> >>>>> -L/opt/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 >>>>> -Xlinker -export-dynamic >>>>> >>>>> However, I am getting: >>>>> ---------------------------------------------------- >>>>> g++ -m32 -march=i386 -m32 -march=i386 -Xlinker -export-dynamic -o >>>>> robot_library robot_library.o stm32f4discovery.o libSPI.a "-L." >>>>> "-L/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../variants/stm32f4discovery" >>>>> "-lsystem_stm32f4discovery" -lstdc++ >>>>> ./libsystem_stm32f4discovery.a(Register.o): In function >>>>> `Register::GPIO_Callback_Python(std::string, std::string, unsigned int, >>>>> std::string)': >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41: >>>>> undefined reference to `Py_Initialize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43: >>>>> undefined reference to `PyRun_SimpleStringFlags' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44: >>>>> undefined reference to `Py_Finalize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41: >>>>> undefined reference to `Py_Initialize' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43: >>>>> undefined reference to `PyRun_SimpleStringFlags' >>>>> /home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44: >>>>> undefined reference to `Py_Finalize' >>>>> ./libsystem_stm32f4discovery.a(system_stm32f4xx.o): In function >>>>> `__exchange_and_add': >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> /usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to >>>>> `__atomic_fetch_add_4' >>>>> collect2: error: ld returned 1 exit status >>>>> make[1]: *** [robot_library] Error 1 >>>>> ----------------------------------- >>>>> >>>>> Can you help me in including these flags in the Makefile system and >>>>> link the python with it? It will help a lot, to call from c to python >>>>> independently. >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> >>>>> >>>>> *With Best Regards, Asif Sardar. +358 43 8265795 >>>>> <%2B358%2043%208265795> * >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> >>>>> >>>>> *With Best Regards, Asif Sardar. +358 43 8265795 >>>>> <%2B358%2043%208265795> * >>>>> >>>> >>>> >>>> >>>> -- >>>> >>>> >>>> >>>> *With Best Regards, Asif Sardar. +358 43 8265795 >>>> <%2B358%2043%208265795> * >>>> >>> >>> >>> >>> -- >>> >>> >>> >>> *With Best Regards, Asif Sardar. +358 43 8265795 <%2B358%2043%208265795> >>> * >>> >>> >>> >> >> >> -- >> >> >> >> *With Best Regards, Asif Sardar. +358 43 8265795 <%2B358%2043%208265795> * >> > > -- *With Best Regards,Asif Sardar.+358 43 8265795*