#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
typedef struct {
uint8_t index; // 1字节
char value[15]; // 15字节
char footprint[10]; // 10字节
char Bear[6]; // 6字节
uint16_t quantity; // 2字节
} DataItem;
#define ARRAY_SIZE 81
DataItem dataArray[ARRAY_SIZE];
//初始化数组
void initDataArray(){
for (int i = 0; i < ARRAY_SIZE; i++) {
dataArray[i].index = i;
memset(dataArray[i].value, 0, sizeof(dataArray[i].value));
memset(dataArray[i].footprint, 0, sizeof(dataArray[i].footprint));
memset(dataArray[i].Bear, 0, sizeof(dataArray[i].Bear));
dataArray[i].quantity = 0;
}
}
// 设置数组中某个元素的值
void setDataItem(int pos, uint8_t index, const char* value, const char* footprint, const char* Bear, uint16_t quantity) {
if (pos < 0 || pos >= ARRAY_SIZE) {
printf("位置 %d 超出数组范围\n", pos);
return;
}
dataArray[pos].index = index;
strncpy(dataArray[pos].value, value, sizeof(dataArray[pos].value) - 1);
strncpy(dataArray[pos].footprint, footprint, sizeof(dataArray[pos].footprint) - 1);
strncpy(dataArray[pos].Bear, Bear, sizeof(dataArray[pos].Bear) - 1);
dataArray[pos].quantity = quantity;
}
// 获取数组中某个元素的值
DataItem getDataItem(int pos) {
DataItem item;
if (pos < 0 || pos >= ARRAY_SIZE) {
printf("位置 %d 超出数组范围,返回空数据\n", pos);
memset(&item, 0, sizeof(DataItem));
return item;
}
item = dataArray[pos];
return item;
}
void app_main(void)
{
// 初始化数组
initDataArray();
// 设置第10个元素
setDataItem(9, 10, "ValueExample", "Footprint1", "BearA", 100);
// 获取并打印第10个元素
DataItem item = getDataItem(9);
// 为了让任务持续运行(ESP-IDF 需要)
while (1) {
printf("Index: %d\n", item.index);
printf("Value: %s\n", item.value);
printf("Footprint: %s\n", item.footprint);
printf("Bear: %s\n", item.Bear);
printf("Quantity: %d\n", item.quantity);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}