大家好,我是春哥。我又回来了,前些天我懒了,在耍,今天来更新一下我毕业设计的内容。今天这个更新之后就可以完完全全实现整个流程了,可以看到演示效果了。
内容全在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 10struct 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_catchTARGET2 := temp_cgiCROSS_COMPILE :=CC = $(CROSS_COMPILE)gccLD = $(CROSS_COMPILE)ldOBJS1 := sim_catch.o task.oOBJS2 := temp_cgi.o task.o cJSON.oCFLAGS += -Wall -I./incLDFLAGS +=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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




