传入最小月份和最大月份的时间戳获取一个从最大月份到最小月份的数组

getMonthList(minMonth,maxMonth){

            let d1 = new Date(minMonth);

            let d2 = new Date(maxMonth);

            let list = [];

            // 两个月份属于同一年的时候

            if(d1.getFullYear() == d2.getFullYear()){

                for(let i = d1.getMonth() + 1;i <= d2.getMonth() + 1; i++ ){

                    list.push(`${d1.getFullYear()}-${i >= 10 ? i : '0' + i}`)

                }

            }else{

                for(let y = d1.getFullYear();y <= d2.getFullYear();y++){

                    // 是否是最小年份 从最小月份循环到12月

                    if(y == d1.getFullYear()){

                        for(let i = d1.getMonth() + 1;i <= 12 ; i ++) {

                            list.push(`${y}-${i >= 10 ? i : '0' + i}`)

                        }

                    }else if(y == d2.getFullYear()){ // 是否是最大年份 从1月循环到最大月份

                        for(let i = 1;i <= d2.getMonth()+1;i++){

                            list.push(`${y}-${i >= 10 ? i : '0' + i}`)

                        }

                    }else{ // 不是最小,最大年份

                        for(let i = 1;i<=12;i++){

                            list.push(`${y}-${i >= 10 ? i : '0' + i}`)

                        }

                    }

                   

                   

                }

            }

            return list;

        },

在STM32平台上实现一个MQTT报文缓冲区,支持QoS 1/2,使用二维数组存储报文,并实现增删改查等等功能以及重传机制。重传时选择ID最小且重传次数未超限的报文。 设计要点: 二维数组:第一维表示缓冲区数量(固定大小),第二维存储每个报文的数据,严格按照下面数据结构: [0][1]: packet_id (两个字节) [2]: retries (重传次数,一个字节) [3][4]: len (两个字节,表示实际数据长度) [5]开始:实际数据 模块化函数设计: 初始化缓冲区 添加报文(QoS1/2存储) 根据ID查找报文(返回缓冲区索引) 根据ID删除报文(将对应的packet_id置为0x0000,并标记为空闲) 更新重传次数 重传机制:遍历缓冲区,找到重传次数小于最大重传次数且ID最小的报文,进行重传 重传机制: 每次重传前,先找到满足条件的报文(重传次数未超限,且ID最小) 重传后,该报文的重传次数加1 如果重传次数达到上限,则删除该报文(或标记为失败) 发送函数:提供send(char *data, int len)函数发送[5]及后面的数据部分。 不考虑大小端, packet_id (两个字节) retries (重传次数,一个字节) len (两个字节,表示实际数据长度) data(实际数据) 由函数参数传入, 不使用时间戳, QoS1/2在添加之前已经发送过一次,所以在添加进数组时不需要马上发送,不用再分析QoS0的情况,QoS0不添加到数组
09-16
在STM32平台上实现一个MQTT报文缓冲区,支持QoS 1/2,使用二维数组存储报文,并实现增删改查功能以及重传机制。重传时选择ID最小且重传次数未超限的报文。 设计要点: 二维数组:第一维表示缓冲区数量(固定大小),第二维存储每个报文的数据,具体结构如下: [0][1]: packet_id (两个字节) [2][3]: len (两个字节,表示实际数据长度) [4]: retries (重传次数,一个字节) [5]开始:实际数据 模块化函数设计: 初始化缓冲区 添加报文(QoS1/2存储) 根据ID查找报文(返回缓冲区索引) 根据ID删除报文(将对应的packet_id置为0x0000,并标记为空闲) 更新重传次数 重传机制:遍历缓冲区,找到重传次数小于最大重传次数且ID最小的报文,进行重传 重传机制: 每次重传前,先找到满足条件的报文(重传次数未超限,且ID最小) 重传后,该报文的重传次数加1 如果重传次数达到上限,则删除该报文(或标记为失败) 发送函数:使用send(char *data, int len)发送[5]及后面的数据部分。 避免阻塞:使用二维数组作为循环缓冲区,通过索引管理,避免在发送时阻塞其他任务。 不考虑大小端, packet_id (两个字节) len (两个字节,表示实际数据长度) retries (重传次数,一个字节) data(实际数据) 由函数参数传入, 不使用时间戳, 提供完整的send()函数, QoS1/2在添加之前已经发送过一次,所以在添加进数组时不需要马上发送,
09-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值