Keil C51 插件 检测所有if语句

2024-08-23 09:44

本文主要是介绍Keil C51 插件 检测所有if语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 此插件解决的问题

Keil 插件 -- Python 代码

import chardet, sys, glob, re
from pathlib import Pathfrom collections import deque# 变量名字典 key--数据名 value--数据s类型
variable_dic = {}# 初始化一个空的二维数组
matrix = []
# 列表的头数据
header_list = []
# 列表的值
value_list = []# if (V_Data>35&&V_Data<790)     //零上温度校准\r
# if (V_Data==Temp_Tabe[i][1])\r
# if ((Usart1_Receive_Buff[4]==0x01)&&(Usart1_Receive_Buff[Receive_Count-1]==Xor_Data1))\r# uint AAA
# uint AAA,BBB
# uint code AAA,BBB  -- 变量名和类型添加
def type_variale_name_split(row_text):type_header = row_text.split()[0]if 'xdata' in row_text or 'code' in row_text:type_header = ' '.join(row_text.split()[0:2])if ',' in row_text: # uchar data A,B  uint a,c,dfor item in row_text.split(','):T = list(map(str.strip, item.split()))[-1]add_key(list(map(str.strip, item.split()))[-1], type_header)else: # uchar data A  uint Brow_text_list = row_text.split()if 'xdata' in row_text or 'code' in row_text:add_key(row_text_list[2].strip(),type_header)else:add_key(row_text_list[1].strip(),type_header)# uint AA=0
# uint AA=0,BB=0
# uint xdata AAA=0
# uint xdata AAA[BBB]={0}  -- 变量名和类型添加
def type_variable_name_equal_split(row_text):# 裁剪定义的数组if '{' in row_text:row_text = row_text.split('{')[0]type_header = row_text.split()[0]if 'xdata' in row_text or 'code' in row_text:type_header = ' '.join(row_text.split()[0:2])# uint AA=0,BB=0# uint code AA=0,BB=0,CC=1# uint code A=0;if ',' in row_text:for item in row_text.split(','):type_header_variable = item.split('=')[0]# uint AAif type_header in type_header_variable:add_key(type_header_variable.split(type_header)[1].strip(), type_header)else: # AAadd_key(type_header_variable.strip(), type_header)else: # uint AA=0# uchar   xdata B=0type_header_variable_else = row_text.split('=')[0]type_header_variable_else_list = list(map(str.strip, type_header_variable_else.split()))add_key(type_header_variable_else_list[-1],type_header)# 变量名和类型添加
def add_key(key, value):# 若key存在if key in variable_dic:returnelse:variable_dic[key] = value# 添加if语句 -- if 语句分割添加
def add_variable_list(string):# (V_Data>35&&V_Data<790)try:cut_if_string = string.split('if')[1].strip()if '(' not in cut_if_string:returnpattern_header = r'\([^!=|<>]+'list_header = re.findall(pattern_header, cut_if_string)[0].split('(')[-1].strip()# 若存在, 则添加if list_header in variable_dic:list_header = variable_dic[list_header] + ' ' + list_headerelse:list_header = '未查询到  ' + list_header# 若不存在, 则不添加wait_list = [list_header, string]# 若头文件存在for row in matrix:if list_header == row[0]:row.append(string)return# 若不存在, 则添加matrix.append(wait_list)except IndexError:print("报错了")# 获取一个文件的内容
def get_bit_file_content(filename, default_encoding='gb2312'):file = ''content = ''try:file = open(filename, 'rb')content = file.read()  # 以字节方式读取except:print("文件" + filename + "打开失败")finally:file.close()source_encoding = chardet.detect(content)['encoding']string = content.decode(source_encoding if source_encoding else default_encoding, 'ignore')return string# 获取所有的if语句分割后添加到二维数组中
def get_all_if_matrix(filename):string = get_bit_file_content(filename)# 正则 if(a==0)pattern_type = r"(\bif\b.+)"matches = re.findall(pattern_type, string)# ['if (V_Data>35&&V_Data<790)     //零上温度校准\r', 'if (V_Data==Temp_Tabe[i][1])\r',]for item in matches:add_variable_list(item)# 获取所有 变量名和类型 添加到字典中
def get_all_variable_dict(filename):string = get_bit_file_content(filename)# 正则 int AAA=0pattern_int = r"(?:\n\b(?:sbit|bit|uchar|uint|ulong|int|long|float|char|double)\b[^;)]+)"matches_int = re.findall(pattern_int,string)# 变量名添加for m_int in matches_int:# 剔除函数if '(' in m_int:continue# 剔除 =0m_int = m_int.lstrip('\n').strip()if '=' in m_int:# uint AAA=0,B=0type_variable_name_equal_split(m_int)else:# uint AAtype_variale_name_split(m_int)if __name__ ==  "__main__":try:filename = sys.argvfilelist = sum(list(map(glob.glob, filename[1:])), []) #获取所有文件名print('检测到的文件:')for item in filelist:print(item)# 获取所有的变量和类型list(map(get_all_variable_dict, filelist))# 获取所有的if语句list(map(get_all_if_matrix, filelist))# 获取桌面路径desktop_path = Path.home() / "Desktop"# print(desktop_path / 'output_all_if.txt')with open(desktop_path / 'output_if.txt', 'w') as fp:for row in matrix:fp.write(row[0]+'\n')for a_bit in row[1:]:fp.write('    '+a_bit)fp.write('\n')print('查询完成,文件保存至:')print("  " + str(desktop_path / 'output_all_if.txt'))except Exception as e:print(str(e))

 需要修改的地方

上面代码,所需要的包,自行导入

 Python 生成 exe

pip install pyinstaller     -- 自行安装包

pyinstaller -Fw .\Select_All_if.py 

Keil C51 插件安装

"$E*.c" "$E*.h" -- 表示当前的所有文件

 效果

 

 不会改的,自行留言

这篇关于Keil C51 插件 检测所有if语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099034

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco