木子剑
生命不熄,学习不止!

在contiki-ng-release-v4.5\os\lib里面,是OS的lib内核库,其实用户可以在这里面增自己的私有库.

我们试验一下,首先在contiki-ng-release-v4.5\os\lib里面建立mycounter.h和mycounter.c令my

counter.h如下:

1 #include <string.h>
2 #include "contiki.h"
3 
4 #ifndef MYCOUNTER_H
5 #define MYCOUNTER_H
6 int next_counter(int current);
7 #endif

 

令mycounter.c如下:

 1 #include "contiki.h"
 2 #include "mycounter.h"
 3 
 4 int next_counter(int current)
 5 {
 6     if(current>7)
 7         current = 1;
 8     else
 9         current++;
10     return current;
11 }

 

然后,我们进入\contiki-ng-release-v4.5\examples建立一个文件夹demo-counter,文件夹里

面编写demo-counter.c和Makefile俩个文件,令demo-counter.c如下:


 1 #include "contiki.h"
 2 #include "sys/etimer.h"
 3 #include "mycounter.h"
 4 #include <stdio.h> /* For printf() */
 5 
 6 PROCESS(counter_process, "Counter process");
 7 AUTOSTART_PROCESSES(&counter_process);
 8 static struct etimer timer;
 9 static int counter = 0;
10 
11 PROCESS_THREAD(counter_process, ev, data)
12 {
13   PROCESS_BEGIN();
14   printf("Demo Counter\n");
15   while(1) {
16     etimer_set(&timer, CLOCK_SECOND/2);
17     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
18     counter = next_counter(counter);
19     printf("Counter: %d\n", counter);
20   }
21   PROCESS_END();
22 }

其实就是在hello-world例子的复制过来,少量改动一下就可以了,主要是文件层次是一样的,可

以直接使用原有的Makefile文件如下:

CONTIKI_PROJECT = demo-counter
all: $(CONTIKI_PROJECT)

CONTIKI = ../..
include $(CONTIKI)/Makefile.include

 

最后,我们打开InstantContiki3.0,进行测试,直接看图吧,打字太慢了.

 

上面就是我们例子中的printf("Counter: %d\n",counter)输出,说明我们自己的建立的lib库已

经用上了.这是一个很简单很典型的方法,在这个基础之上可以打开coniki NG无限之门.

 

时间:2020-12-13

今天又测试了一下这个DEMO,又有了新的收获,真不错.我们来聊聊CONTIKI下的Makefile

// lib的.h文件  就这样  不用加入任何头文件了
#ifndef MYCOUNTER_H
#define MYCOUNTER_H
int next_counter(int current);
#endif


// lib的.c文件
#include "mycounter.h"

int next_counter(int current)
{
    if(current>7)
        current = 1;
    else
        current++;
    return current;
}


// demo-counter.c测试文件
#include "contiki.h"
#include "sys/etimer.h"
#include "mycounter.h"

#include <stdio.h> /* For printf() */

PROCESS(counter_process, "Counter process");
AUTOSTART_PROCESSES(&counter_process);

static struct etimer timer;
static int counter = 0;

PROCESS_THREAD(counter_process, ev, data)
{
  PROCESS_BEGIN();
  printf("Demo Counter\n");
  while(1) {
    etimer_set(&timer, CLOCK_SECOND/2);
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
    counter = next_counter(counter);
    printf("Counter: %d\n", counter);
  }
  PROCESS_END();
}

 

我们来看一下,这个Makefile:

CONTIKI_PROJECT=demo-counter
all: $(CONTIKI_PROJECT)

PROJECT_SOURCEFILES += mycounter.c                             

CONTIKI=../..
include $(CONTIKI)/Makefile.include
————>>CONTIKI_PROJECT   它就是目标文件(伪目标).它不是文件夹名字,也不是H头文件名.
它是.C目标文件名.
————>>all: $(CONTIKI_PROJECT) 包含目标文件的路经.有目标文件名了,但是要有它的
路径信息,编译器才能找它.讲大白话联起来理解就是,比如demo-counter是你的仇家,你要找它
报仇,你是不是要先知道它住在哪呀?

————>>PROJECT_SOURCEFILES += xxx.c 包含用户自己写的代码信息,这里只能是.C文件
.理解成在IAR system环境里包含我们项目路经就对了.因为CONTIKI NG系统所用到的Makefile
文件,作者已经写好了.我们自己写的,就要自己通过PROJECT_SOURCEFILES加载进来,让NG系统
能找到它.当然,如果把你的代码放在OS/lib文件里面,就算你不写,系统也能找到它.但是,哈哈,
不说了,哈哈。。。。...

————>>CONTIKI=../.. 从目标文件的目录开始,去找到CONTIKI的根目录,因为哪里有整个
系统Makefile的入口,相对路径可能是../../../../../这些,不管怎么样,能找到根目录就行
————>>include $(CONTIKI)/Makefile.include     前面都找到CONTIKI的根目录,这里
包含总的Makefile.include文件.


最后我们打开Terminal并输入_>make demo-counter TARGET=native就完事了,它的意思是,
在本机对demo-counter.c进行链接并编译,所以我们就会在屏幕上看到这些信息:

  

要在本机进行执行,我们就输入_>./demo-counter.native,看清楚呀,是一个.  和一个/  (这就是黑色背景

的好处,程序员的最爱),然后demo-counter代码就在NG系统里面执行:

 

当前我测试的目录这是样子的:

  

但是,如果我建一个lib,将mycounter.c 和mycounter.h放进去,这个Makefile怎么写呢?

目前为止还没有搞明白,多级目录的Makefile编写方法,总不能全部丢在一个包里面吧?

这样子显得太乱了。

 

时间:2020-12-15

找到一个偏门的方法,如下:

// lib/ter.h
#ifndef TER_H
#define TER_H
int next_ter(int current); // 申明函数

int next_ter(int current)  // 函数实现
{
    if(current>14)
        current = 1;
    else
        current++;
    return current;
}
#endif



// demo-counter.c
#include "contiki.h"
#include "sys/etimer.h"
#include "lib/ter.h"   // 当前工程目录下的子目录

#include <stdio.h> /* For printf() */

PROCESS(counter_process, "Counter process");
AUTOSTART_PROCESSES(&counter_process);

static struct etimer timer;
static int ter = 0; // 测试变量ter

PROCESS_THREAD(counter_process, ev, data)
{
  PROCESS_BEGIN();
  printf("Demo ter\n");
  while(1) {
    etimer_set(&timer, CLOCK_SECOND/2);
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));

    ter = next_ter(ter); // lib下的ter.h函数入口
    printf("ter: %d\n", ter);  // 打ter印值
  }
  PROCESS_END();
}

先这样用吧,一个.c   配一个.h  的大众方法,以后学会了再更正!!哈哈

 

 

时间:2021-01-04

用户在contiki-ng\examples,建立测试文件时,makefile写成这样也是可以的

all: demo-counter

CONTIKI=../..

include ../../Makefile.include

 

 

时间:2021-02-18

在阅读makefile发现这样加入.C文件:

### CPU-dependent directories
CONTIKI_CPU_DIRS = . dev usb usb/common usb/common/cdc-acm

### CPU-dependent source files
CONTIKI_CPU_SOURCEFILES += soc.c clock.c rtimer-arch.c uart.c watchdog.c
CONTIKI_CPU_SOURCEFILES += nvic.c sys-ctrl.c gpio.c ioc.c spi-legacy.c adc.c
CONTIKI_CPU_SOURCEFILES += spi-arch.c
CONTIKI_CPU_SOURCEFILES += crypto.c aes.c ecb.c cbc.c ctr.c cbc-mac.c gcm.c
CONTIKI_CPU_SOURCEFILES += ccm.c sha256.c gpio-hal-arch.c
CONTIKI_CPU_SOURCEFILES += cc2538-aes-128.c cc2538-ccm-star.c
CONTIKI_CPU_SOURCEFILES += cc2538-rf.c udma.c lpm.c int-master.c
CONTIKI_CPU_SOURCEFILES += pka.c bignum-driver.c ecc-driver.c ecc-algorithm.c
CONTIKI_CPU_SOURCEFILES += ecc-curve.c
CONTIKI_CPU_SOURCEFILES += dbg.c ieee-addr.c
CONTIKI_CPU_SOURCEFILES += slip-arch.c slip.c
CONTIKI_CPU_SOURCEFILES += i2c.c cc2538-temp-sensor.c vdd3-sensor.c
CONTIKI_CPU_SOURCEFILES += cfs-coffee.c cfs-coffee-arch.c pwm.c

USB_SOURCEFILES += usb-core.c cdc-acm.c usb-arch.c usb-serial.c cdc-acm-descriptors.c

CPU_START_SOURCEFILES = startup-gcc.c

CONTIKI_SOURCEFILES += $(CONTIKI_CPU_SOURCEFILES) $(USB_SOURCEFILES)

CONTIKI_CPU_DIRS = . dev usb usb/common usb/common/cdc-acm  是包含路经, 

CONTIKI_SOURCEFILES += xxxxxxx  是使用包含.C文件!

 

 

在一些*.c文件这样引用头文件:

#include "dev/rom-util.h"
#include "dev/sys-ctrl.h"
#include "dev/ioc.h"
#include "dev/nvic.h"
#include "dev/sys-ctrl.h"
#include "dev/gpio-hal.h"

好像明白是什么意思了,有时间要试一下!!

posted on 2020-06-20 14:21  木子剑  阅读(490)  评论(0)    收藏  举报