大家好,我是春哥。我又回来了,前些天我懒了,在耍,今天来更新一下我毕业设计的内容。今天这个更新之后就可以完完全全实现整个流程了,可以看到演示效果了。
内容全在B站视频里。视频地址贴下面,有需要的小伙伴自行获取。https://www.bilibili.com/video/BV1tt4y1h7YB?spm_id_from=333.999.0.0&vd_source=7cc77a87bc55ee33aba6ea24258d27aa
源代码如下:
sim_catch.c
#include <string.h>
#include <time.h>
#include "task.h"
static struct tasks_info *tasks;
static char* task_labels[] = {"仓库1","仓库2","仓库3","仓库4","仓库5"};
void get_data(int num){
tasks->num=num;
for (int i = 0; i < num; ++i) {
tasks->data[i].temp=((rand()/9000)+1000)/100.0;
snprintf(tasks->data[i].label,"%s",task_labels[i]);
tasks->data[i].humi=(rand()/9000)/100.0;
}
}
int main(){
srand(time(NULL));
tasks = (struct tasks_info*)init_shm();
while (1) {
get_data(3);
sleep(1);
}
return 0;
}
复制
task.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "task.h"
void *init_shm(){
key_t k1;
int shm_id;
void *res;
struct tasks_info *t1;
k1=ftok("/root",10);
if(k1==-1){
return;
}
shm_id=shmget(k1,sizeof(struct tasks_info),IPC_CREAT | 0644);
if(shm_id == -1){
return;
}
res = (struct tasks_info*)shmat(shm_id, NULL, 0);
return res;
}
复制
task.h
#ifndef WEB_TEST_TASK_H
#define WEB_TEST_TASK_H
#define MAX_TASK 5
#define KEY_1 "/root"
#define KEY_2 10
struct task_msg{
double temp;
double humi;
char label[32];
};
struct tasks_info{
int num;
struct task_msg data[MAX_TASK];
};
//初始化共享内存空间,返回对应进程空间映射地址
extern void *init_shm();
extern detach_shm(void *p);
#endif //WEB_TEST_TASK_H
复制
temp_cgi.c
//
// Created by Alex Yan on 2022/1/19.
//
#include <string.h>
#include <time.h>
#include "task.h"
#include "cJSON.h"
static struct tasks_info *tasks;
void send_json(){
cJSON *infos;
cJSON *info;
char *temp[16];
char *humi[16];
char *str;
cJSON *root = cJSON_CreateObject();
if(root == NULL){
goto end;
}
int num=tasks->num;
cJSON_AddItemToObject(root,"num",cJSON_CreateNumber(num+1));
infos = cJSON_CreateArray();
cJSON_AddItemToObject(root,"data",infos);
for (int i = 0; i < num; ++i) {
info = cJSON_CreateObject();
if(info == NULL){
goto end;
}
cJSON_AddItemToArray(infos,info);
cJSON_AddItemToObject(info,"label",cJSON_CreateString(tasks->data[i].label));
snprintf(temp,sizeof(temp),"%.1f",tasks->data[i].temp);
cJSON_AddItemToObject(info,"temp",cJSON_CreateString(temp));
snprintf(humi,sizeof(humi),"%.1f",tasks->data[i].humi);
cJSON_AddItemToObject(info,"humi",cJSON_CreateString(humi));
}
str = cJSON_Print(root);
printf("%s",str);
free(str);
end:
cJSON_Delete(root);
return;
}
int main(){
printf("Content-Type:text/html;charset=utf-8\r\n");
printf("\r\n");
tasks = (struct tasks_info*)init_shm();
if(tasks == NULL){
return -1;
}
send_json();
return 0;
}
复制
makefile
TARGET1 := sim_catch
TARGET2 := temp_cgi
CROSS_COMPILE :=
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
OBJS1 := sim_catch.o task.o
OBJS2 := temp_cgi.o task.o cJSON.o
CFLAGS += -Wall -I./inc
LDFLAGS +=
OUTPUT_DIR = home/alex/Graduation_Project/cgi/
all:$(TARGET1) $(TARGET2)
$(TARGET1):$(OBJS1)
$(CC) $(LDFLAGS) -o $@ $^
cp $@ $(OUTPUT_DIR)
$(TARGET2):$(OBJS2)
$(CC) $(LDFLAGS) -o $@ $^
cp $@ $(OUTPUT_DIR)
%.o : %.c
$(CC) $(CFLAGS) -c -o $@ $^
clean:
rm -f $(TARGET1) $(OBJS1) $(TARGET2) $(OBJS2)
复制
文章转载自春哥的嵌入式小世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle函数
芃芃
43次阅读
2025-03-28 18:37:13
数据库SQL优化大总结之 百万级数据库优化方案
听溪
41次阅读
2025-04-01 20:55:52
共享内存+图计算,渊亭科技再获一项高效数据处理专利授权
渊亭科技
33次阅读
2025-04-01 18:30:24
Doris 中 Compaction 问题的深度剖析与解决方案
数据极客圈
21次阅读
2025-04-14 09:40:47
从被动救火到主动预防,StarRocks 监控与告警全攻略
StarRocks
19次阅读
2025-04-23 11:19:33
轻松上手:通过 RPM 包快速部署 NebulaGraph
NebulaGraph 技术社区
19次阅读
2025-04-18 10:01:13
Nginx 是什么?Nginx高并发架构拆解指南
捡田螺的小男孩
11次阅读
2025-04-10 08:46:46
scrapy框架 - 基础操作
老柴杂货铺
11次阅读
2025-04-14 01:23:22
Kubernetes中命名空间级别内核参数有哪些
运维笔谈
10次阅读
2025-04-03 07:04:48
cJSON轻量级的C语言JSON解析器
SmallDB
6次阅读
2025-03-28 19:47:31