写一段Python代码: 使用正则表达式,筛选出指定txt文档中“VREF_BF_TRIM= 584.0MV”中间的数字,并另存为一个叫“OK”的txt文件中
时间: 2024-05-12 21:18:44 浏览: 12
```python
import re
# 打开原始文本文件
with open("original.txt", "r") as f:
content = f.read()
# 使用正则表达式匹配数字
match = re.search(r"VREF_BF_TRIM=\s*(\d+(\.\d+)?)MV", content)
if match:
# 提取匹配到的数字
num = match.group(1)
# 将数字保存到新的文本文件中
with open("OK.txt", "w") as f:
f.write(num)
else:
print("No match found.")
```
其中,`original.txt`为指定的文本文件名,`VREF_BF_TRIM= 584.0MV`为待匹配的字符串,数字`584.0`将被提取并保存到新的文本文件`OK.txt`中。如果没有匹配到,则输出提示信息。
相关问题
Read Spd Begin... The memory on CH :1 are different! N: pre svc call fun = 0xc2000f04 -- pm-1 = 0, pm-2 = 29819750, pm-3 = 0 N: ddr fun = 0x0 -- pm = 0x29819750, pm2 = 0x0 N: parameter mcu: v0.5 Mcu Start Work ... get_clocks_value: scpi send command start: 0x10 scpi send command success get clocks = 533 MHZ pll_scp_num = 8 Lmu Freq = 1066Mhz ch = 0 parameter set ch closed! DIMM Don't Probed! ch = 1 the dimm info is from uboot... Dimm_Capacity = 8GB Mcu Channel 1 AES configuration begin... AES bypass end... TZC configuration begin... TZC bypass end... use_0x14 == 0xb0100 ctl_cfg_begin...... pi_cfg_begin...... phy_cfg_begin...... fast mode caslat = 15 wrlat = 14 tinit = 856000 r2r_diffcs_dly = 4 r2w_diffcs_dly = 5 w2r_diffcs_dly = 3 w2w_diffcs_dly = 7 r2w_samecs_dly = 4 w2r_samecs_dly = 0 r2r_samecs_dly = 0 w2w_samecs_dly = 0 ch 1 adapter_alg -- 0-0-0-0-0-0-0 rtt_wr = dis rtt_park = 80ohm ron = 34ohm val_cpudrv = 34 rtt_nom = 48ohm val_cpuodt = 48 vref_dev = 10 vrefsel = 0x45 dq_oe_timing = 0x42 rank_num_decode = 1 set phy_indep_init_mode set pi_dram_init_en set_pi_start & ctl_start...... wait init complete...... init complete done...... wait complete done...... rddqs_lat = 0x2 tdfi_phy_rdlat = 0x1f begin software ntp training... rank_num: 0 phy_write_path_lat_add =-1-1-1-1-1-1-1-1-1 phy_write_path_lat_add = 0 0 0 0 0 0 0 0 0 phy_write_path_lat_add = 1 1 1 1 1 1 1 1 1 phy_write_path_lat_add = 2 2 2 2 2 2 2 2 2 phy_write_path_lat_add = 3 3 3 3 3 3 3 3 3 phy_write_path_lat_add = 4 4 4 4 4 4 4 4 4 rank 0 wdqlvl! r2r_diffcs_dly = 4 r2w_diffcs_dly = 7 w2r_diffcs_dly = 4 w2w_diffcs_dly = 6 r2w_samecs_dly = 5 rank 0 ch 1 training fail
根据您提供的信息,似乎是内存训练过程中出现了错误。错误信息中指出了CH1内存信息不同的问题,以及训练过程中的一些参数和配置。其中,"Mcu Channel 1 AES configuration begin... AES bypass end... TZC configuration begin... TZC bypass end... use_0x14 == 0xb0100 ctl_cfg_begin"等信息表示内存控制器的一些配置和初始化过程。而"rank 0 wdqlvl! r2r_diffcs_dly = 4 r2w_diffcs_dly = 7 w2r_diffcs_dly = 4 w2w_diffcs_dly = 6 r2w_samecs_dly = 5 rank 0 ch 1 training fail"则表示在对CH1的rank0进行写数据时出现了训练失败的情况。
具体的原因可能需要进一步分析,可能与内存硬件、时序参数、内存控制器等方面有关。建议您尝试重新启动或重新插拔内存模块,并检查是否有硬件故障或不良连接的情况。同时,您也可以检查内存访问时序参数和内存控制器的配置是否正确。如果问题仍然存在,建议您查看更详细的错误信息或寻求专业的技术支持。
注释以下每一行代码#include "bflb_adc.h" #include "bflb_mtimer.h" #include "board.h" struct bflb_device_s *adc; #define TEST_ADC_CHANNELS 2 #define TEST_COUNT 10 struct bflb_adc_channel_s chan[] = { { .pos_chan = ADC_CHANNEL_2, .neg_chan = ADC_CHANNEL_GND }, { .pos_chan = ADC_CHANNEL_GND, .neg_chan = ADC_CHANNEL_3 }, }; int main(void) { board_init(); board_adc_gpio_init(); adc = bflb_device_get_by_name("adc"); /* adc clock = XCLK / 2 / 32 */ struct bflb_adc_config_s cfg; cfg.clk_div = ADC_CLK_DIV_32; cfg.scan_conv_mode = true; cfg.continuous_conv_mode = false; cfg.differential_mode = true; cfg.resolution = ADC_RESOLUTION_16B; cfg.vref = ADC_VREF_3P2V; bflb_adc_init(adc, &cfg); bflb_adc_channel_config(adc, chan, TEST_ADC_CHANNELS); for (uint32_t i = 0; i < TEST_COUNT; i++) { bflb_adc_start_conversion(adc); while (bflb_adc_get_count(adc) < TEST_ADC_CHANNELS) { bflb_mtimer_delay_ms(1); } for (size_t j = 0; j < TEST_ADC_CHANNELS; j++) { struct bflb_adc_result_s result; uint32_t raw_data = bflb_adc_read_raw(adc); printf("raw data:%08x\r\n", raw_data); bflb_adc_parse_result(adc, &raw_data, &result, 1); printf("pos chan %d,neg chan %d,%d mv \r\n", result.pos_chan, result.neg_chan, result.millivolt); } bflb_adc_stop_conversion(adc); bflb_mtimer_delay_ms(100); } while (1) { } }
这段代码是使用芯片上的ADC模块读取外部电压信号,并将读取结果打印出来。具体注释如下:
```
#include "bflb_adc.h" // 包含 ADC 操作库的头文件
#include "bflb_mtimer.h" // 包含毫秒级延时库的头文件
#include "board.h" // 包含与硬件板子相关的头文件
struct bflb_device_s *adc; // 定义一个指向 ADC 设备的结构体指针
#define TEST_ADC_CHANNELS 2 // 定义测试的 ADC 通道数量为 2
#define TEST_COUNT 10 // 定义测试的次数为 10
struct bflb_adc_channel_s chan[] = { // 定义 ADC 通道的结构体数组
{.pos_chan = ADC_CHANNEL_2, .neg_chan = ADC_CHANNEL_GND},
{.pos_chan = ADC_CHANNEL_GND, .neg_chan = ADC_CHANNEL_3},
};
int main(void) { // 主函数
board_init(); // 初始化板子
board_adc_gpio_init(); // 初始化 ADC 相关的 GPIO
adc = bflb_device_get_by_name("adc"); // 获取 ADC 设备的结构体指针
/* adc clock = XCLK / 2 / 32 */ // 设置 ADC 的时钟分频为 XCLK/2/32
struct bflb_adc_config_s cfg;
cfg.clk_div = ADC_CLK_DIV_32;
cfg.scan_conv_mode = true;
cfg.continuous_conv_mode = false;
cfg.differential_mode = true;
cfg.resolution = ADC_RESOLUTION_16B;
cfg.vref = ADC_VREF_3P2V;
bflb_adc_init(adc, &cfg); // 初始化 ADC
bflb_adc_channel_config(adc, chan, TEST_ADC_CHANNELS); // 配置 ADC 通道
for (uint32_t i = 0; i < TEST_COUNT; i++) { // 循环读取 ADC 的值
bflb_adc_start_conversion(adc); // 启动 ADC 转换
while (bflb_adc_get_count(adc) < TEST_ADC_CHANNELS) { // 等待 ADC 转换完成
bflb_mtimer_delay_ms(1); // 延时 1 毫秒
}
for (size_t j = 0; j < TEST_ADC_CHANNELS; j++) { // 遍历每个 ADC 通道
struct bflb_adc_result_s result; // 定义保存 ADC 转换结果的结构体
uint32_t raw_data = bflb_adc_read_raw(adc); // 读取 ADC 原始数据
printf("raw data:%08x\r\n", raw_data); // 打印原始数据
bflb_adc_parse_result(adc, &raw_data, &result, 1); // 解析 ADC 转换结果
printf("pos chan %d,neg chan %d,%d mv \r\n", result.pos_chan, result.neg_chan, result.millivolt); // 打印解析后的数据
}
bflb_adc_stop_conversion(adc); // 停止 ADC 转换
bflb_mtimer_delay_ms(100); // 延时 100 毫秒
}
while (1) { // 循环等待
}
}
```