一:
问题描述:在core文件夹下的 code/future目录下创建一个文件夹myModule,这是子模块,然后在该文件夹下创建一个inc文件夹和src文件夹,以及make.h and Makefile文件,在src下创建
mymodulesys.c,文件,在inc下创建mymodulesys.h文件。
说明:这里的make.h文件和Makefile文件是描述mymodulesys.c文件的一些编译规则的。
二:
make.h的内容如下:
#!/bin/csh
# Set current directory to PROJ_EEE_DIR
PROJ_NAME = myModule
PROJ_EEE_DIR = ${BASE_DIR}/myModule
PROJ_SRC_DIR = ${PROJ_EEE_DIR}/src
PROJ_INC_DIR = ${PROJ_EEE_DIR}/inc
PROJ_OBJ_DIR = ${PROJ_EEE_DIR}/obj
INCS = ${COMMON_INCLUDE_DIRS} \
-I${BASE_DIR}/cfa2/inc \
-I${BASE_DIR}/cli/inc \
-I${BASE_DIR}/ISS/common/system/inc \
-I${PROJ_INC_DIR} \
-I${BASE_DIR}/inc/cli \
-I${BASE_DIR}/pf/inc
TOTAL_OPNS = $(GENERAL_COMPILATION_SWITCHES) \
$(SYSTEM_COMPILATION_SWITCHES)
MYMODULESYS = ${COMMON_DEPENDENCIES} \
${PROJ_EEE_DIR}/inc/mymodulesys.h \
$(PROJ_EEE_DIR)/make.h \
$(PROJ_EEE_DIR)/Makefile
Makefile内容如下:
#!/bin/csh
# include the make.h of this module
include ../LR/make.h
include ../LR/make.rule
include ./make.h
# Project/Module Object Files(s)
PROJ_OBJ_LIST = ${PROJ_OBJ_DIR}/mymodulesys.${ObjSuffix}
PROJ_OBJ = $(PROJ_OBJ_DIR)/$(PROJ_NAME).${ObjSuffix}
C_FLAGS = ${CC_FLAGS} ${TOTAL_OPNS} ${INCS}
# make
$(PROJ_OBJ) : obj $(PROJ_OBJ_LIST)
${LD} ${LD_FLAGS} ${CC_COMMON_OPTIONS} -o $(PROJ_OBJ) ${PROJ_OBJ_LIST}
obj :
$(MKDIR) $(MKDIR_FLAGS) obj
# The rules required for the compilation of the individual Object files
${PROJ_OBJ_DIR}/mymodulesys.${ObjSuffix}: $(PROJ_SRC_DIR)/mymodulesys.c ${MYMODULESYS}
$(CC) $(C_FLAGS) -o $@ $<
# clean .${ObjSuffix} files
clean :
@echo "Cleaning lbd object files"
$(RM) $(RM_FLAGS) obj/*.${ObjSuffix}
# for debug
rc:
echo PROJ_OBJ=${PROJ_OBJ}
注意点:写法要符合规则,尤其是tab键,另外还有一些和文件名,目录有关的东西要改,其它的不用改。
附:makefile教程:https://seisman.github.io/how-to-write-makefile/overview.html ,如果觉得GUN官网上的英文看到懵逼,可以看看这个链接,内容非常全面。
三:LR文件的修改
可参考:http://172.22.102.206/projects/crdc-sw2-jiangbang/wiki/Create_a_MyModule_in_core_
四:mymodulesys.c文件内容
#include<stdio.h>
#include "mymodulesys.h"
#include "lr.h"
/*
* @file mymodulesys.c
* @function print "my module system initialize success"
* @author tanxujia。
* @date 2020-06-04
*/
void MyModule_SysInit(void)
{
printf("\nmy module system initialize success \n");
return;
}
/*
* @file mymodulesys.c
* @function print "my module memory initialize success"
* @author tanxujia。
* @date 2020-06-04
*/
void MyModule_MemInit(void)
{
printf("my module memory initialize success \n");
return;
}
/*
* @file mymodulesys.c
* @function print "my module timer initialize success"
* @author tanxujia。
* @date 2020-06-04
*/
void MyModule_TimerInit(void)
{
printf("my module timer initialize success \n");
return;
}
/*
* @file mymodulesys.c
* @function Thread function entry
* @author tanxujia。
* @date 2020-06-04
*/
void MyModuleInit(void)
{
MyModule_SysInit();
MyModule_MemInit();
MyModule_TimerInit();
lrInitComplete(OSIX_SUCCESS);
return;
}
mymodulesys.h文件内容
#ifndef mymodulesys_h
#define mymodulesys_h
extern void MyModule_SysInit(void);
extern void MyModule_MemInit(void);
extern void MyModule_TimerInit(void);
extern void MyModuleInit(void);
#endif
说明:在LR文件下的lrmain.c文件正是通过一个函数指针调用了MyModuleInit()函数,才打印出了这3天语句。
LR目录下有的文件要修改的原因是由于要和主模块联系起来才要修改的。
另外,由于调用了lrInitComplete(OSIX_SUCCESS)函数,所以要加上lr.h,该函数表明了,这个线程的退出,也就是我现在运行的这几个函数成功执行结束了。这都是c的知识了,不作过多的概述。