安阳百度网站制作多少钱,色盲怎么治疗,珠海网络营销网站建设,移动端网站建设的意义【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时 文章目录 导入库定时器初始化延时函数定时中断回调调用函数打包附录#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 首先 这个定时器是硬件底层级别的 优先级最高 如果调用 会导致GN…【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时 文章目录 导入库定时器初始化延时函数定时中断回调调用函数打包附录列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 首先 这个定时器是硬件底层级别的 优先级最高 如果调用 会导致GNSS等线程被占用 从而无法获取数据 导入库
from machine import Timer定时器初始化
timer.start(period, mode, callback)该方法用于启动定时器。
参数描述
period - 中断周期int类型单位毫秒大于等于1。
mode - 运行模式int类型说明如下 ONE_SHOT - 单次模式定时器只执行一次 PERIODIC - 周期模式循环执行
callback - 定时器执行函数function类型原型为callback(arg)arg未实际使用可直接传入None。callback函数触发后必须调用stop接口停止该定时器否则下次调用start接口后callback不会被执行。
返回值描述
启动成功返回整型值0失败返回整型值-1。
延时函数
TIM0Timer(Timer.Timer0)
TIM0_Flag0
def Delay_ms(ms):global TIM0_FlagTIM0_Flag0TIM0.start(periodms, modeTimer.ONE_SHOT, callbackTIM0_Callback)while TIM0_Flag0:if TIM0_Flag1:breakpassTIM0_Flag0
配置为一次性工作模式 等待中断产生
定时中断回调
def TIM0_Callback(arg):global TIM0_FlagTIM0_Flag1TIM0.stop()中断产生则关闭定时器
调用
Delay_ms(50)函数打包
# -*- coding: utf-8 -*-
from misc import PWM_V2
from machine import Pin
import usr.Delay as DelayC0 1635159
Db0 1732391
D0 1835404
Eb0 1944543
E0 2060172
F0 2182676
Gb0 2312465
G0 2449971
Ab0 2595654
A0 2750000
Bb0 2913523
B0 3086770C1 3270319
Db1 3464782
D1 3670809
Eb1 3889087
E1 4120344
F1 4365352
Gb1 4624930
G1 4899942
Ab1 5191308
A1 5500000
Bb1 5827047
B1 6173541C2 6540639
Db2 6929565
D2 7341619
Eb2 7778174
E2 8240688
F2 8730705
Gb2 9249860
G2 9799885
Ab2 10382617
A2 11000000
Bb2 11654094
B2 12347082C3 13081278
Db3 13859131
D3 14683238
Eb3 15556349
E3 16481377
F3 17461411
Gb3 18499721
G3 19599771
Ab3 20765234
A3 22000000
Bb3 23308188
B3 24694165C4 26162556
Db4 27718263
D4 29366476
Eb4 31112698
E4 32962755
F4 34922823
Gb4 36999442
G4 39199543
Ab4 41530469
A4 44000000
Bb4 46616376
B4 49388330C5 52325113
Db5 55436526
D5 58732953
Eb5 62225396
E5 65925511
F5 69845646
Gb5 73998884
G5 78399087
Ab5 83060939
A5 88000000
Bb5 93232752
B5 98776660C6 104650226
Db6 110873052
D6 117465907
Eb6 124450793
E6 131851022
F6 139691292
Gb6 147997769
G6 156798174
Ab6 166121879
A6 176000000
Bb6 186465504
B6 197553320C7 209300452
Db7 221746104
D7 234931814
Eb7 248901586
E7 263702045
F7 279382585
Gb7 295995538
G7 313596348
Ab7 332243758
A7 352000000
Bb7 372931009
B7 395106641C8 418600904
Db8 443492209
D8 469863628
Eb8 497803173
E8 527404091
F8 558765170
Gb8 591991076
G8 627192697
Ab8 664487516
A8 704000000
Bb8 745862018
B8 790213282C9 837201808
Db9 886984419
D9 939727257
Eb9 995606347
E9 1054808182
F9 1117530340
Gb9 1183982152
G9 1254385395
Ab9 1328975032
A9 1408000000
Bb9 1491724036
B9 1580426564def Pitch_Play(pwm,pitch,s):pitchpitch/100000pwm.open(pitch, 50)Delay.Delay_ms(int(s*950))pwm.close()Delay.Delay_ms(int(s*50))def Pitch_Play_HB_Start(GPIO,V2_PWM):Pin(GPIO, Pin.OUT,Pin.PULL_PD,0)pwmPWM_V2(V2_PWM, G5/100000, 50)Pitch_Play(pwm,G5,0.25)Pitch_Play(pwm,G5,0.25)Pitch_Play(pwm,A5,0.5)Pitch_Play(pwm,G5,0.5)Pitch_Play(pwm,C6,0.5)Pitch_Play(pwm,B5,0.5)def Pitch_Play_HB_End(GPIO,V2_PWM):Pin(GPIO, Pin.OUT,Pin.PULL_PD,0)pwmPWM_V2(V2_PWM, G5/100000, 50)Pitch_Play(pwm,F5,0.25)Pitch_Play(pwm,F5,0.25)Pitch_Play(pwm,E6,0.5)Pitch_Play(pwm,C6,0.5)Pitch_Play(pwm,D6,0.5)Pitch_Play(pwm,C6,0.5)
附录列表的赋值类型和py打包
列表赋值
BUG复现
闲来无事写了个小程序 代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)c_list[j]a_listprint(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
#print(c_list,\n) 我在程序中 做了一个16次的for循环 把列表a的每个值后面依次加上_和循环序号 比如循环第x次 就是把第x位加上_x 这一位变成x_x 我在输出测试中 列表a的每一次输出也是对的 循环16次后列表a应该变成[‘0_0’, ‘1_1’, ‘2_2’, ‘3_3’, ‘4_4’, ‘5_5’, ‘6_6’, ‘7_7’, ‘8_8’, ‘9_9’, ‘10_10’, ‘11_11’, ‘12_12’, ‘13_13’, ‘14_14’, ‘15_15’] 这也是对的
同时 我将每一次循环时列表a的值 写入到空列表c中 比如第x次循环 就是把更改以后的列表a的值 写入到列表c的第x位 第0次循环后 c[0]的值应该是[‘0_0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘10’, ‘11’, ‘12’, ‘13’, ‘14’, ‘15’] 这也是对的 但是在第1次循环以后 c[0]的值就一直在变 变成了c[x]的值 相当于把c_list[0]变成了c_list[1]…以此类推 最后得出的列表c的值也是每一项完全一样 我不明白这是怎么回事 我的c[0]只在第0次循环时被赋值了 但是后面它的值跟着在改变
如图 第一次老出bug 赋值以后 每次循环都改变c[0]的值 搞了半天都没搞出来 无论是用appen函数添加 还是用二维数组定义 或者增加第三个空数组来过渡 都无法解决
代码改进
后来在我华科同学的指导下 突然想到赋值可以赋的是个地址 地址里面的值一直变化 导致赋值也一直变化 于是用第二张图的循环套循环深度复制实现了
代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)for i in range(16):c_list[j].append(a_list[i])print(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
print(c_list,\n) 解决了问题 优化
第三次是请教了老师 用copy函数来赋真值
代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)c_list[j]a_list.copy()print(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
#print(c_list,\n) 同样能解决问题 最后得出问题 就是指针惹的祸
a_list指向的是个地址 而不是值 a_list[i]指向的才是单个的值 copy()函数也是复制值而不是地址
如果这个用C语言来写 就直观一些了 难怪C语言是基础 光学Python不学C 遇到这样的问题就解决不了
C语言yyds Python是什么垃圾弱智语言
总结
由于Python无法单独定义一个值为指针或者独立的值 所以只能用列表来传送 只要赋值是指向一个列表整体的 那么就是指向的一个指针内存地址 解决方法只有一个 那就是将每个值深度复制赋值子列表内的元素提取出来重新依次连接 或者用copy函数单独赋值
如图测试 部分代码
# -*- coding: utf-8 -*-Created on Sat Nov 20 16:45:48 2021author: 16016
def text1():A[1,2,3]B[[],[],[]]for i in range(len(A)):A[i]A[i]iB[i]Aprint(B)def text2():A[1,2,3]B[[],[],[]]A[0]A[0]0B[0]Aprint(B)A[1]A[1]1B[1]Aprint(B)A[2]A[2]2B[2]Aprint(B)if __name__ __main__:text1()print(\n)text2()py打包
Pyinstaller打包exe包括打包资源文件 绝不出错版
依赖包及其对应的版本号
PyQt5 5.10.1 PyQt5-Qt5 5.15.2 PyQt5-sip 12.9.0
pyinstaller 4.5.1 pyinstaller-hooks-contrib 2021.3
Pyinstaller -F setup.py 打包exe
Pyinstaller -F -w setup.py 不带控制台的打包
Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包
打包exe参数说明
-F打包后只生成单个exe格式文件
-D默认选项创建一个目录包含exe文件以及大量依赖文件
-c默认选项使用控制台(就是类似cmd的黑框)
-w不使用控制台
-p添加搜索路径让其找到对应的库
-i改变生成程序的icon图标。
如果要打包资源文件 则需要对代码中的路径进行转换处理 另外要注意的是 如果要打包资源文件 则py程序里面的路径要从./xxx/yy换成xxx/yy 并且进行路径转换 但如果不打包资源文件的话 最好路径还是用作./xxx/yy 并且不进行路径转换
def get_resource_path(relative_path):if hasattr(sys, _MEIPASS):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath(.), relative_path)
而后再spec文件中的datas部分加入目录 如
a Analysis([cxk.py],pathex[D:\\Python Test\\cxk],binaries[],datas[(root,root)],hiddenimports[],hookspath[],hooksconfig{},runtime_hooks[],excludes[],win_no_prefer_redirectsFalse,win_private_assembliesFalse,cipherblock_cipher,noarchiveFalse)而后直接Pyinstaller -F setup.spec即可
如果打包的文件过大则更改spec文件中的excludes 把不需要的库写进去但是已经在环境中安装了的就行
这些不要了的库在上一次编译时的shell里面输出 比如 然后用pyinstaller --clean -F 某某.spec 文章转载自: http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.srgbr.cn.gov.cn.srgbr.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.jynzb.cn.gov.cn.jynzb.cn http://www.morning.jfzbk.cn.gov.cn.jfzbk.cn http://www.morning.shnqh.cn.gov.cn.shnqh.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.qykxj.cn.gov.cn.qykxj.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn http://www.morning.qhczg.cn.gov.cn.qhczg.cn http://www.morning.gklxm.cn.gov.cn.gklxm.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn http://www.morning.pqndg.cn.gov.cn.pqndg.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.wnjsp.cn.gov.cn.wnjsp.cn http://www.morning.jpdbj.cn.gov.cn.jpdbj.cn http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn http://www.morning.btmwd.cn.gov.cn.btmwd.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.klltg.cn.gov.cn.klltg.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.ppllj.cn.gov.cn.ppllj.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.dangaw.com.gov.cn.dangaw.com http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.brxzt.cn.gov.cn.brxzt.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.srgnd.cn.gov.cn.srgnd.cn http://www.morning.rtsd.cn.gov.cn.rtsd.cn http://www.morning.wffxr.cn.gov.cn.wffxr.cn http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.spbp.cn.gov.cn.spbp.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.lhwlp.cn.gov.cn.lhwlp.cn http://www.morning.jjzrh.cn.gov.cn.jjzrh.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.srnhk.cn.gov.cn.srnhk.cn http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.ndynz.cn.gov.cn.ndynz.cn http://www.morning.qttg.cn.gov.cn.qttg.cn http://www.morning.wrkcw.cn.gov.cn.wrkcw.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.lwnb.cn.gov.cn.lwnb.cn http://www.morning.yslfn.cn.gov.cn.yslfn.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.jlboyuan.cn.gov.cn.jlboyuan.cn http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn http://www.morning.ghrhb.cn.gov.cn.ghrhb.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.qttg.cn.gov.cn.qttg.cn http://www.morning.spnky.cn.gov.cn.spnky.cn http://www.morning.rjjjk.cn.gov.cn.rjjjk.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.cwqln.cn.gov.cn.cwqln.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.dytqf.cn.gov.cn.dytqf.cn http://www.morning.ggtgl.cn.gov.cn.ggtgl.cn