当前位置: 首页 > article >正文

优秀代码段案例__笔记

一、关于协议报警部分

如果想让一种情况只触发一次,可以增加一个新的标志位例如,在条件成立时赋值,复位后清空

bool status_pack_arr[32] = {false}; // 用于标记是否处理过报警

但是如果是上位机去读这种状态,需要再次进来这种状态,那么就需要走else if()

然后在else if加一些限制条件和要传送的值

二、下拉部件 的优化操作,适合多索引值

    static char* generate_sequence(int max) {
    int size = (max + 1) * 4; // 每个数字最多占用3个字符加上一个换行符  max+1是从0-max
    char *str = malloc(size + 1); // 分配足够的内存
    if (str == NULL) {
        return NULL; // 内存分配失败
    }
    char *ptr = str;//这样返回的字符串还是从开始的地址开始str不受印象  使用ptr进行移动
    for (int i = 0; i < max; i++) {
        ptr += sprintf(ptr, "%d\n", i); // 将数字和换行符写入字符串
    }
    for (int i = max; i <= max; i++) {
        ptr += sprintf(ptr, "%d", i); // 将数字和换行符写入字符串
    }
    return str;
    }


    const char *text2[5];
    text2[0] = generate_sequence(120);
    text2[1] = generate_sequence(10);
    text2[2] = generate_sequence(120);
    text2[3] = generate_sequence(10);
    text2[4] = generate_sequence(120);



    // 释放分配的内存
    free((char*)text2[0]);
    free((char*)text2[1]);
    free((char*)text2[2]);
    free((char*)text2[3]);
    free((char*)text2[4]);

三、多个相似变量的统一管理

如果有些变量的控制方式一样,方便统一管理,可以使用数组

bool conditions[] = {
            user_io.RELAY.v1,
            user_io.RELAY.v2,
            user_io.RELAY.v3,
            user_io.RELAY.r1,
            user_io.RELAY.r2,
            user_io.RELAY.r3,
            user_io.RELAY.r4,
            user_io.RELAY.r5,
            user_io.RELAY.r6,
            user_io.in1,
            user_io.in2,
        };

四、LVGL中点击后,提示对应的内容

因为需要上电后再次更新显示,所以需要存储对应的标签,然后定时刷新
static void updateDevInfo(struct _lv_timer_t *p)
{
    // 假设 readPara 是用来从 flash 读取配置的函数
    getPara(sys_config, &sysparam.config);

    if (sysparam.config.init_pack_cu == 1) {
        // 如果配置已初始化,按保存的数据更新标签显示
        for (int i = 0; i < 12; i++) {
            if (sysparam.config.cluster_config[i].is_set) {
                char label_text[64];

                // 更新并显示簇完成状态标签
                sprintf(label_text, "簇%d完成,", i + 1);
                lv_label_set_text(win_pack_cu.label_pack1[i], label_text);
                lv_obj_clear_flag(win_pack_cu.label_pack1[i], LV_OBJ_FLAG_HIDDEN);

                // 更新并显示探测器数量标签
                sprintf(label_text, "PACK数量%d", sysparam.config.cluster_config[i].detector_count);
                lv_label_set_text(win_pack_cu.label_pack2[i], label_text);
                lv_obj_clear_flag(win_pack_cu.label_pack2[i], LV_OBJ_FLAG_HIDDEN);
            }
        }
    } else {
        // 如果未初始化,隐藏所有标签
        for (int i = 0; i < 12; i++) {
            lv_obj_add_flag(win_pack_cu.label_pack1[i], LV_OBJ_FLAG_HIDDEN);
            lv_obj_add_flag(win_pack_cu.label_pack2[i], LV_OBJ_FLAG_HIDDEN);
        }
    }
}

因为按下按钮,从下拉列表中取数据,然后存储,以及弹出对应的标签显示
static void btn_event_cb(lv_event_t *e)
{
    lv_obj_t *target = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);

    if (code == LV_EVENT_CLICKED) //按下
    {
        uint8_t total_clusters = lv_dropdown_get_selected(win_pack_cu.dd[0]) + 5;  // 加5因为序号从5开始
        uint8_t selected_cluster = lv_dropdown_get_selected(win_pack_cu.dd[1]) + 1;    // 选择的簇
        uint8_t detectors_count = lv_dropdown_get_selected(win_pack_cu.dd[2]) + 1; // 加1因为序号从1开始
        
                // 更新系统配置
        sysparam.config.cu_num = total_clusters;
        sysparam.config.init_pack_cu = 1;
        sysparam.config.cluster_config[selected_cluster-1].is_set = true;//0表示第一簇
        sysparam.config.cluster_config[selected_cluster-1].detector_count = detectors_count;//先判断addr地址是否为1  然后判断cluster_config[0].detector_count探测器数量
        savePara(sys_config, &sysparam.config);
        
        // 确保选择的簇号不超过总簇数
        if (selected_cluster <= total_clusters)
        {
            // 更新标签文本和显示标签
            char label_text[64];
            sprintf(label_text, "簇%d完成,", selected_cluster);  // 簇号从1开始
            lv_label_set_text(win_pack_cu.label_pack1[selected_cluster-1], label_text);
            lv_obj_clear_flag(win_pack_cu.label_pack1[selected_cluster-1], LV_OBJ_FLAG_HIDDEN);

            sprintf(label_text, "PACK数量%d", detectors_count);
            lv_label_set_text(win_pack_cu.label_pack2[selected_cluster-1], label_text);
            lv_obj_clear_flag(win_pack_cu.label_pack2[selected_cluster-1], LV_OBJ_FLAG_HIDDEN);
        }
    }
}
清除所有的标签显示
static void btnclr_event_cb(lv_event_t *e)
{
    lv_obj_t *target = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);
    
    if (code == LV_EVENT_CLICKED) //按下
    {
        sysparam.config.init_pack_cu = 0;
        memset(sysparam.config.cluster_config, 0, sizeof(sysparam.config.cluster_config));
        // 保存配置到 flash
        savePara(sys_config, &sysparam.config);
        for(int i = 0; i < 12; i++)
        {
            lv_obj_add_flag(win_pack_cu.label_pack1[i], LV_OBJ_FLAG_HIDDEN);
            lv_obj_add_flag(win_pack_cu.label_pack2[i], LV_OBJ_FLAG_HIDDEN);
        }
    }
}

五、字符转int,转double

#include <stdio.h>

int main() {
    // 定义一个char类型的变量并初始化
    char c = 'A';
    // 将char转换为int
    int ascii_value = c;
    // 输出结果
    printf("The ASCII value of %c is %d\n", c, ascii_value);
    
    // 使用其他字符
    c = '0';  // 数字字符'0'
    ascii_value = c;  // 隐式转换到int
    printf("The ASCII value of %c is %d\n", c, ascii_value);
    
    c = ';';  // 符号';'
    ascii_value = c;  // 隐式转换到int
    printf("The ASCII value of %c is %d\n", c, ascii_value);
    
    return 0;
}


http://www.kler.cn/a/514051.html

相关文章:

  • ui文件转py程序的工具
  • 2024.ailx10的年终总结
  • 【云原生布道系列】第三篇:“软”饭“硬”吃的计算
  • 前端开发Web
  • Qt QML专栏目录结构
  • 前沿技术趋势洞察与分析:探寻科技变革的多维密码
  • C++11的多线程
  • 亚博microros小车-原生ubuntu支持系列:1 键盘控制
  • Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置
  • QT 中 UDP 的使用
  • 专业138总分400+中国科学技术大学843信号与系统考研中科大电子信息通信生医先研,真题,大纲,参考书。
  • Java面试专题——常见面试题1
  • (5)STM32 USB设备开发-USB键盘
  • TiDB 的优势与劣势
  • 基于卷积神经网络的验证码识别
  • oneplus3t-lineageos-16.1编译-android9,
  • 机器学习有哪些应用场景
  • Java后端Controller参数校验的一些干货及问题~
  • element-plus中的table为什么相同的数据并没有合并成一个
  • Ollama能本地部署Llama 3等大模型的原因解析(ollama核心架构、技术特性、实际应用)
  • html转义符+h5提供的新标签
  • HTML `<head>` 元素详解
  • PHP同城配送小程序
  • 《LT8712X》Type-c转HDMI2.0芯片
  • Spring Boot AOP实现动态数据脱敏
  • vue3 通过ref 进行数据响应