PE Project 1 - goofcode/UR GitHub Wiki
- ์ค์ ์คํ๊ณผ simulation ๋ชจ๋ ์งํ
- stack์ ์ต๋ํ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด ์คํํ ๊ฒ
- Null MAC๊ณผ CSMA ๋ ๋ฐฉ์์ ๋ํด ๋ชจ๋ ์คํํ ๊ฒ
- ๊ฐ๊ฐ์ ์คํ์์ [ํจํท ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์ด๋น Tx, Rx ํจํท ์] ๊ทธ๋ํ์ ์ด๋ก๋ถํฐ [ํจํท ํฌ๊ธฐ์ ๋ฐ๋ฅธ Tx, Rx bps] ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ๊ฒ
contiki-ng์์๋ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์ network stack์ธ null net์ ์ง์ํ์ง๋ง, contiki-ng์์์ null MAC์ tx, rx ์์ฒด๋ฅผ ํ์ง ์์.
๋ฐ๋ผ์ ํจํท์ ์ค์ ๋ก ๋ณด๋ด๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ณ , CSMA์์ ๋น๊ต๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จ๋์ด, contiki-os์์ rime broadcast + nullmac + nullrdc + framer_nullmac ์ธํ ์ผ๋ก ์คํ์ ์งํํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํจ.
null rdc, null mac, framer_nullmac(null mac์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ์์ธ๋ฏ, ์ค์ ํ์ง ์์ผ๋ฉด ํจํท์ด transmit๋์ง ์์)
all: sender receiver
CONTIKI = ../..
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
CONTIKI_WITH_RIME = 1
include $(CONTIKI)/Makefile.include
#define NETSTACK_CONF_RDC nullrdc_driver
#define NETSTACK_CONF_MAC nullmac_driver
#define NETSTACK_CONF_FRAMER framer_nullmac
// settings for packet
#define MAX_PKT_NUM 1000
#define PKT_SIZE 10
// settings for sender
#define TX_DELAY_SEC 0
// settings for receiver
#define EXPECTED_TX_DURATION_SEC 10
- ์ํํ ์คํ์ ์ํด sender๋ 5์ด์ delay ํ์ ํจํท์ ๋ณด๋ด๊ธฐ ์์.
- while loop์ ์ฌ์ง ์๊ณ ์ํํ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค๊ฐ ์ฌ์์๋๋ ๋ฌธ์ ๊ฐ ์์. while loop ๋ด์ PROCESS_PAUSE() ์ถ๊ฐ.
- printf %ใน ์ถ๋ ฅ ์ ๋จ...
#include "contiki.h"
#include "net/rime/rime.h"
#include <stdio.h> /* For printf() */
#define MAX_PKT_NUM 1000
#define PKT_SIZE 117
#define CHANNEL_NUM 129
#define TX_DELAY 0
#define WAIT_RX_DELAY 5
/*---------------------------------------------------------------------------*/
PROCESS(project_1_sender, "sender process");
AUTOSTART_PROCESSES(&project_1_sender);
/*---------------------------------------------------------------------------*/
static void
broadcast_recv(struct broadcast_conn *c, const linkaddr_t *from)
{
/* do nothing */
}
static const struct broadcast_callbacks recv_callbacks = {broadcast_recv};
static struct broadcast_conn broadcast;
PROCESS_THREAD(project_1_sender, ev, data)
{
static uint8_t payload[PKT_SIZE] = {0,};
static int count = 0;
static struct etimer et;
static clock_time_t begin_time, end_time;
PROCESS_EXITHANDLER(broadcast_close(&broadcast));
PROCESS_BEGIN();
printf("Wait for receiver to start\n");
etimer_set(&et, WAIT_RX_DELAY * CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
broadcast_open(&broadcast, CHANNEL_NUM, &recv_callbacks);
printf("Start sending...\n");
begin_time = clock_time();
while (count < MAX_PKT_NUM){
packetbuf_copyfrom(payload, PKT_SIZE);
broadcast_send(&broadcast);
count++;
#if TX_DELAY == 0
PROCESS_PAUSE();
#else
etimer_set(&et, TX_DELAY_SEC);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
#endif
}
end_time = clock_time();
printf("%d packets (length: %d bytes) sent in %lu clocks (CLOCK_SECOND: %lu)\n",
count, PKT_SIZE, end_time-begin_time, CLOCK_SECOND);
PROCESS_END();
}
- ์ผ์ ์๊ฐ ๋์ ๊ธฐ๋ค๋ฆฐ ๋ค ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
#include "contiki.h"
#include "net/rime/rime.h"
#include <stdio.h> /* For printf() */
#define CHANNEL_NUM 129
#define EXPECTED_TX_DURATION 30
/*---------------------------------------------------------------------------*/
PROCESS(project_1_receiver, "receiver process");
AUTOSTART_PROCESSES(&project_1_receiver);
/*---------------------------------------------------------------------------*/
static int count = 0;
static clock_time_t begin_time, end_time;
static void
broadcast_recv(struct broadcast_conn *c, const linkaddr_t *from)
{
// if this is first packet
if(count == 0)
begin_time = clock_time();
end_time = clock_time();
count++;
}
static const struct broadcast_callbacks recv_callbacks = {broadcast_recv};
static struct broadcast_conn broadcast;
PROCESS_THREAD(project_1_receiver, ev, data)
{
static struct etimer et;
PROCESS_EXITHANDLER(broadcast_close(&broadcast);)
PROCESS_BEGIN();
broadcast_open(&broadcast, CHANNEL_NUM, &recv_callbacks);
etimer_set(&et, EXPECTED_TX_DURATION * CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
printf("%d packets received in %lu (CLOCK_SECOND: %lu) \n",
count, end_time-begin_time, CLOCK_SECOND);
PROCESS_END();
}
- ์ ๋ฐ์ ์ผ๋ก null mac์ ๋นํด csma์์ ๋ ๋ฎ์ throughput ๊ด์ฐฐ
- 2๋์ transmitter(sender)๋ฅผ ๋ ๊ฒฝ์ฐ
- null mac์ throughput์ ํฐ ๊ฒฝํฅ์ฑ ์์ด ๋ ๋ฐ์ง๋ง, csma์ ๊ฒฝ์ฐ์๋ ์์ ์ ์ผ๋ก ๋ณด์
- csma์์ ๋ ๋ง์ packet์ด ์์ ์ฑ๊ณต
- ๋๋ฌด ๊ฐ๊น์ฐ๋ฉด ์ ํธ๋ฅผ ๋ชป ๋ฐ๋๋ค.. ์กฐ๊ธ ๋จ์ด๋จ๋ ค ๋ณด๊ฑฐ๋ tx power ๋ฅผ ์กฐ์ ํด ๋ณด์
- tx power ๋ฅผ ์กฐ์ ํด๋ ์ต์ 50~60cm ์ ๋๋ ๋จ์ด๋จ๋ ค์ผ ํ๋ ๋ฏ
- ์ค๊ฐ์ ์ฅ์ ๋ฌผ์ด ์์ด๋ ์ ์ ๋ฐ์์ง๋ ์ฃผ์ํ์