构建python环境,python框架怎么搭建

  构建python环境,python框架怎么搭建

  本文以模块板为例,说明乘法的组件实现,电路板模块包含一个发光二极管类和一个__姓名_ _方法

  文章目录1.使用模板代码进行基础函数的实现2.建立c代码和大蟒方法对象的映射关系3.建立字典关系,并声明mp_obj_type_t (mpy对象)基本类型4.进行乘法模块的声明5.定义所有涉及的qstr6 .向系统注册自定义的乘法模块

  1.使用模板代码进行基础函数的实现

  使用乘法提供的模板代码,声明大蟒方法及进行对应的c实现,示例代码格式(忽略掉无关的实现细节):

  静态内嵌void led _ off(board _ led _ obj _ t * const led _ obj){//忽略细节}静态内嵌void led _ on(board _ led _ obj _ t * const led _ obj){//忽略细节} void MP _ led _ init(void){//忽略细节} void led _ state(board _ led _ obj _ t * led _ obj,int state){ if(state==1){ led _ on(led _ obj);} else { led _ off(led _ obj);} } void LED _ toggle(board _ LED _ obj _ t * LED _ obj){ if(LED _ obj-LED _ state==LED _ ON){ LED _ off(LED _ obj);} else { led _ on(led _ obj);} } void led _ obj _ print(const MP _ print _ t * print,mp_obj_t self_in,mp_print_kind_t kind) {.} STATIC MP _ obj _ t led _ obj _ make _ new(const MP _ obj _ type _ t * type,size_t n_args,size_t n_kw,const mp_obj_t *args) {.} MP _ obj _ t led _ obj _ on(MP _ obj _ t self _ in){ board _ led _ obj _ t * self=self _ in;led_state(self,1);返回MP _ const _ none } MP _ obj _ t led _ obj _ off(MP _ obj _ t self _ in){ board _ led _ obj _ t * self=self _ in;led_state(self,0);返回MP _ const _ none } MP _ obj _ t led _ obj _ toggle(MP _ obj _ t self _ in){ board _ led _ obj _ t * self=self _ in;发光二极管_开关(自);返回mp _ const _ none} 2。建立c代码和大蟒方法对象的映射关系通过以下代码,将发光二极管类的开/关/切换方法分别建立对应c函数的映射实现,到目前,还没有声明班级名为发光二极管

  静态MP _ DEFINE _ CONST _ FUN _ OBJ _ 1(led _ obj _ on _ obj,led _ obj _ on);静态MP _ DEFINE _ CONST _ FUN _ OBJ _ 1(led _ obj _ off _ obj,led _ obj _ off);静态MP _ DEFINE _ CONST _ FUN _ OBJ _ 1(led _ obj _ toggle _ obj,led _ obj _ toggle);STATIC const MP _ ROM _ map _ elem _ t led _ locals _ dict _ table[]={ { MP _ ROM _ QSTR(MP _ QSTR _ on),MP_ROM_PTR(led_obj_on_obj) },{ MP_ROM_QSTR(MP_QSTR_off),MP_ROM_PTR(led_obj_off_obj) },{ MP_ROM_QSTR(MP_QSTR_toggle),MP _ ROM _ PTR(led _ obj _ toggle _ obj)};3.建立字典关系,并声明mp_obj_type_t (mpy对象)基本类型静态MP _ DEFINE _ CONST _ DICT(led _ locals _ DICT,led _ locals _ DICT _ table);const MP _ obj _ type _ t board _ led _ type={ { MP _ type _ type },name=MP_QSTR_LED .print=led_obj_print,make_new=led_obj_make_new,locals _ dict=(MP _ obj _ dict _ t *)led _ locals _ dict,};截止目前,完成了班级对象的实现和映射

  4.进行乘法模块的声明静态常量MP _ ROM _ map _ elem _ t board _ module _ globals _ table[]={ { MP _ ROM _ QSTR(MP _ QSTR _ _ _ name _ _),MP_ROM_QSTR(MP_QSTR_myboard) },//设置板名为我的板 { MP _ ROM _ QSTR(MP _ QSTR _ LED),MP_ROM_PTR(board_led_type) },};静态MP _ DEFINE _ CONST _ DICT(board _ module _ globals,board _ module _ globals _ table);const MP _ obj _ module _ t board _ module={ .base={ mp_type_module },globals=(MP _ obj _ dict _ t *)board _ module _ globals,};在板_模块_全局_表格表中,声明了两个元素:

  元素一为name, 及板的名字属性

  元素2为发光二极管类,映射为board_led_type对象,在这里,就将班级名映射为发光二极管

  5.定义所有涉及的定量结构宏定量结构的只读存储器引用的参数,会扩展成一个字符串,但这个字符串默认是没有声明状态,编译的时候会造成类似如下错误:

  错误:" MP_QSTR_LED "在此处未声明(不在函数中){mp_rom_qstr(mp_qstr_led),mp_rom_ptr(board_led_type)},^././py/obj.h:92:56:注意:在宏mp _ obj _新_QSTR的定义中#定义mp _ obj _新_ QSTR(qst)((MP _ obj _ t)((((MP _ uint _ t)(qst))2) 2))这个时候,需要在qstrdefsport.h文件里面,使用宏定义Q进行缺失字符串的声明,声明不用包含MP_QSTR_, 如上述代码中,需要声明的定量结构有:

  q(发光二极管)//板模块的发光二极管类的类名问(开)//LED类在方法名问(关)//LED类离开方法名问(切换)//LED类触发器方法名Q(myboard)//将板的__姓名_ _属性设置为我的板在文件中,会有变量DEFSQSTR对qstrdefsport.h进行编译引用并生成定量结构

  6.向系统注册自定义的乘法模块通过以上步骤,实现了一个自定义组件的声明和实现,但还未向系统注册,这个时候系统还无法引用此模块,通过定义如下宏向系统注册模块:

  外部构造struct _ MP _ obj _ module _ t board _ module;#定义MICROPY_PORT_BUILTIN_MODULES \.\ //其他注册模块QSTR(QSTR)板),MP_ROM_PTR(板_模块)},\.\ //其他注册模块注册的组件名称为董事会,对应的对象属性为板_模块,宏微型端口内置模块会被对象模块。c进行引用:

  STATIC const MP _ ROM _ map _ elem _ t MP _ builtin _ module _ table[]={ { MP _ ROM _ QSTR(MP _ QSTR _ _ _ main _ _),MP _ ROM _ PTR(MP _ module _ _ _ main _ _)},//由端口定义的额外内置模块MICROPY _ PORT _ BUILTIN _ MODULES # ifdef MICROPY _ REGISTERED _ MODULES//用MP _ REGISTER _ MODULE()MICROPY _ REGISTERED _ MODULES # endif }声明的内置模块; 一般情况下,通过如上步骤,即可完成一个自定义的组件

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: