暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

春哥的毕业设计之共享内存2

      大家好,我是春哥。我又回来了,前些天我懒了,在耍,今天来更新一下我毕业设计的内容。今天这个更新之后就可以完完全全实现整个流程了,可以看到演示效果了。

      内容全在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论