int locat_sq(SqList L,ElemType e) { int i=0; while() // /*将未完成的代码补全,提示:此处添加一条语句*/ i++; if(i<=L.length-1) return(i+1); }
时间: 2024-09-13 07:04:36 浏览: 81
这段代码是一个函数,名为`locat_sq`,它接收一个名为`L`的SqList类型参数(假设是一种链表结构,元素类型为`ElemType`),目的是在一个顺序存储的列表中查找指定元素`e`首次出现的位置,并返回该位置。函数通过遍历列表来寻找元素。
函数定义了变量`i`初始化为0,然后进入while循环,条件应该是`while (i < L.length)`,表示只要当前索引`i`小于链表的长度。在循环体内部,需要添加一条语句来检查当前位置的元素是否等于目标元素`e`;如果相等,则找到了目标元素,返回`i + 1`作为索引。如果没有找到,`i++`递增后继续下一轮循环。
完整函数应如下所示:
```c++
int locat_sq(SqList L, ElemType e) {
int i = 0;
while (i < L.length) { // 将未完成的代码补全, 提示:此处添加一行检查元素
if (L.data[i] == e) { // 检查当前元素是否等于目标元素
return i + 1; // 找到元素,返回其位置
}
i++;
}
// 如果遍历完都没有找到,返回链表长度(因为下标从0开始)
return L.length;
}
相关问题
include "Key.h" /* ---------------------------------------------------------------------------- * @breif:发送按键信息给从机 * @input:NONE * @retval:NONE */ void Send_Key_Inf(void) { uint16_t crc16=0; //校验码 if(sending_flag[USART1_Locat] == 0) { //没有报文正在发送 if(Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0) { //有按键按下 Txbuf[0] = SLAVE_ADDRESS; //装置地址 Txbuf[1] = MOD_WRITE_M_REGISTER; Txbuf[2] = (uint8_t)(ADR_KEY_START>>8); Txbuf[3] = (uint8_t)(ADR_KEY_START); Txbuf[4] = 0x00; Txbuf[5] = 0x02; Txbuf[6] = 0x04; Txbuf[7] = (uint8_t)(Dealwith.Key1_REG>>8); Txbuf[8] = (uint8_t)(Dealwith.Key1_REG); Txbuf[9] = (uint8_t)(Dealwith.Key2_REG>>8); Txbuf[10] = (uint8_t)(Dealwith.Key2_REG); crc16 = CRC16(Txbuf,11); Txbuf[11] = (uint8_t)(crc16); Txbuf[12] = (uint8_t)(crc16>>8); Txlen = 13; //发送数据 DMA_Usart1_Send(Txbuf,Txlen); } } }将代码修改为被动发送数据
下面是将代码修改为被动发送数据的版本:
```c
#include "Key.h"
/* ----------------------------------------------------------------------------
* @brief:发送按键信息给从机
* @input:NONE
* @retval:NONE
*/
void Send_Key_Inf(void)
{
uint16_t crc16 = 0; //校验码
if (sending_flag[USART1_Locat] == 0)
{
//没有报文正在发送
if (Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0)
{
//有按键按下
Txbuf[0] = SLAVE_ADDRESS; //装置地址
Txbuf[1] = MOD_WRITE_M_REGISTER;
Txbuf[2] = (uint8_t)(ADR_KEY_START >> 8);
Txbuf[3] = (uint8_t)(ADR_KEY_START);
Txbuf[4] = 0x00;
Txbuf[5] = 0x02;
Txbuf[6] = 0x04;
Txbuf[7] = (uint8_t)(Dealwith.Key1_REG >> 8);
Txbuf[8] = (uint8_t)(Dealwith.Key1_REG);
Txbuf[9] = (uint8_t)(Dealwith.Key2_REG >> 8);
Txbuf[10] = (uint8_t)(Dealwith.Key2_REG);
crc16 = CRC16(Txbuf, 11);
Txbuf[11] = (uint8_t)(crc16);
Txbuf[12] = (uint8_t)(crc16 >> 8);
Txlen = 13;
//发送数据
DMA_Usart1_Send(Txbuf, Txlen);
// 设置发送标志位,表示数据已被动发送
sending_flag[USART1_Locat] = 1;
}
}
}
```
这里将原来的代码加了一行 `sending_flag[USART1_Locat] = 1;` ,设置发送标志位,表示数据已被动发送。这样在下次调用 `Send_Key_Inf` 函数时,会先检查 `sending_flag` 标志位,如果为1,则说明数据已经被动发送,不会再次发送。这样就实现了被动发送数据的功能。
#include "Key.h" /* ---------------------------------------------------------------------------- * @breif:发送按键信息给从机 * @input:NONE * @retval:NONE */ void Send_Key_Inf(void) { uint16_t crc16=0; //校验码 if(sending_flag[USART1_Locat] == 0) { //没有报文正在发送 if(Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0) { //有按键按下 Txbuf[0] = SLAVE_ADDRESS; //装置地址 Txbuf[1] = MOD_WRITE_M_REGISTER; Txbuf[2] = (uint8_t)(ADR_KEY_START>>8); Txbuf[3] = (uint8_t)(ADR_KEY_START); Txbuf[4] = 0x00; Txbuf[5] = 0x02; Txbuf[6] = 0x04; Txbuf[7] = (uint8_t)(Dealwith.Key1_REG>>8); Txbuf[8] = (uint8_t)(Dealwith.Key1_REG); Txbuf[9] = (uint8_t)(Dealwith.Key2_REG>>8); Txbuf[10] = (uint8_t)(Dealwith.Key2_REG); crc16 = CRC16(Txbuf,11); Txbuf[11] = (uint8_t)(crc16); Txbuf[12] = (uint8_t)(crc16>>8); Txlen = 13; //发送数据 DMA_Usart1_Send(Txbuf,Txlen); } } }
这段代码是一个函数`Send_Key_Inf`,用于向从机发送按键信息。让我们逐行分析代码。
```c
void Send_Key_Inf(void)
{
uint16_t crc16 = 0; // 校验码
if (sending_flag[USART1_Locat] == 0)
{
// 没有报文正在发送
if (Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0)
{
// 有按键按下
Txbuf[0] = SLAVE_ADDRESS; // 装置地址
Txbuf[1] = MOD_WRITE_M_REGISTER;
Txbuf[2] = (uint8_t)(ADR_KEY_START >> 8);
Txbuf[3] = (uint8_t)(ADR_KEY_START);
Txbuf[4] = 0x00;
Txbuf[5] = 0x02;
Txbuf[6] = 0x04;
Txbuf[7] = (uint8_t)(Dealwith.Key1_REG >> 8);
Txbuf[8] = (uint8_t)(Dealwith.Key1_REG);
Txbuf[9] = (uint8_t)(Dealwith.Key2_REG >> 8);
Txbuf[10] = (uint8_t)(Dealwith.Key2_REG);
crc16 = CRC16(Txbuf, 11);
Txbuf[11] = (uint8_t)(crc16);
Txbuf[12] = (uint8_t)(crc16 >> 8);
Txlen = 13;
// 发送数据
DMA_Usart1_Send(Txbuf, Txlen);
}
}
}
```
首先,函数检查`sending_flag[USART1_Locat]`的值是否为0,表示没有报文正在发送。如果是这样,进入下一步检查。
然后,函数检查`Dealwith.Key1_REG`和`Dealwith.Key2_REG`是否有按键被按下。如果有按键被按下,进入下一步操作。
接下来,函数构建发送的数据帧`Txbuf`。这个数据帧包括装置地址、写寄存器的功能码、寄存器地址、寄存器数量以及按键的状态信息。具体地,装置地址存储在`Txbuf[0]`,功能码为`MOD_WRITE_M_REGISTER`存储在`Txbuf[1]`,寄存器地址的高8位和低8位分别存储在`Txbuf[2]`和`Txbuf[3]`,寄存器数量为2存储在`Txbuf[5]`,按键的状态信息分别存储在`Txbuf[7]`、`Txbuf[8]`、`Txbuf[9]`、`Txbuf[10]`。
接下来,函数计算数据帧的校验码,并将校验码的低8位存储在`Txbuf[11]`,高8位存储在`Txbuf[12]`。
最后,函数将数据帧的长度13存储在变量`Txlen`中,并调用`DMA_Usart1_Send`函数发送数据。
以上就是代码的分析。该函数用于根据按键的状态信息构建并发送数据帧给从机,从而实现按键信息的传输。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)