Python中文維基:Python 直譯器本身幾乎可以在所有的作業系統中執行。Python的正式直譯器CPython是用C語言編寫的、是一個由社群驅動的自由軟體,目前由Python軟體基金會管理。
維基上也說:以 C++ (或 C) 撰寫的模組通常用於延伸 Python 解譯器的功能,以及啟用低階作業系統功能的存取。 及 在操控硬體的場合使用C++(C語言),在快速開發時候使用Python。
因Python是由C語言實作完成的,所以在很多嵌入式系統可以用已經寫好的Python API很容易驅動硬體,但在要增加新硬體,且要能由Python驅動,就一定要先有寫好的硬體驅動程式(C語言),再用C語言擴展Python功能完成類似OS上的AP,用以驅動寫好的新硬體驅動程式(C語言)。
這裡我在ARM板上(任意開發板或樹梅派也行),簡單DEMO一Hello 範例,程式如下:
hellomodule.c
#include <Python.h>
static PyObject* hello_name(PyObject *self, PyObject *args)
{
const char *name;
if (!PyArg_ParseTuple(args, "s", &name))
{
return NULL;
}
printf("Hello %s!\r\n", name);
Py_RETURN_NONE;
}
static PyMethodDef HelloMethods[] =
{
{"hello", hello_name, METH_VARARGS, "Hello Example"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef hello =
{
PyModuleDef_HEAD_INIT,
"hello", /* name of module */
"", /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
HelloMethods
};
PyMODINIT_FUNC PyInit_hello(void)
{
return PyModule_Create( &hello );
}
使用以下指令編譯
gcc -fpic --shared $(python3-config --includes) hellomodule.c -o hello.abi3.so
再來準備 setup.py,程式如下:
from setuptools import setup, Extension
setup(
name='hello',
version='1.0',
description='Python Package with Hello World C Extension',
ext_modules=[
Extension(
'hello',
sources=['hellomodule.c'],
py_limited_api=True)
],
)
接著下安裝指令:
python3 setup.py install
安裝成功後,即可利用Python程式使用剛安裝好 C 的函式庫,
helloworld.py 程式如下:
import hello
def main():
hello.hello('World')
if __name__ == "__main__":
main()
本範例是在Python3.5下完成,接著驗證,下達指令:
python3.5 helloworld.py
成功!!
有關更詳細的Python API的說明,請參考:
Python Documentation contents
https://docs.python.org/3.5/contents.html
有關實作Python 使用 C 的函式庫,更詳細的說明,請參考:
Extending Python with C or C++
https://docs.python.org/3.5/extending/extending.html
執行過程的畫面:
訂閱:
張貼留言 (Atom)
FPGA Verilog 的學習經驗,提供給要入門的新手
今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...
-
今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...
-
這影片是紀錄 【Python +OpenCV】Python 3 程式設計最佳入門到進階應用實戰工程師培訓班:基礎至進階語法+影像處理與辨識(OpenCV) 課程的DEMO部分,請參考相關網頁: 先決條件是必須先安裝好相關的程式: Python、Opencv。。。。。。 ...
-
使用Arduino完成 RFID 結合Keypad鍵,可控制門鎖(或開關)之應用系統 此範例參考自 Arduino 官網的RFID範例並改寫[註]。官網的周邊與我的有差異,所以需自行修改程式碼以符合我手上的硬體周邊。 此範例硬體系統有: 1. Arduino U...
沒有留言:
張貼留言