Tool/software: TI C/C++ Compiler
hello evrybody!
I have meet some problems when i would like to compile a tutorial program...
#include <io.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
/* Project includes */
#include "clock.h"
#include "leds.h"
#include "uart0.h"
#include "tsl2550.h"
#include "ds1722.h"
#include "ds2411.h"
#include "timerA.h"
#include "mac.h"
// choose channel int [0-20]
#define CHANNEL 17
// UART callback function
static uint16_t char_rx(uint8_t c);
// timer alarm function
static uint16_t alarm(void);
// printf's putchar
int16_t putchar(int16_t c)
{
return uart0_putchar(c);
}
/* Global variables */
// value storing the character received from the UART, analyzed by the main function
// volatile is required to prevent optimizations on it.
volatile int8_t cmd = 0;
// print help every second
volatile int8_t print_help = 1;
enum {
NO_EVENT = 0,
RX_PKT,
TX_PKT,
TX_PKT_ERROR,
};
// Got a radio event
volatile struct {
int8_t got_event;
uint8_t packet[256];
uint16_t length;
uint16_t addr;
int16_t rssi;
} radio = {0};
/**
* Serial Number
*/
static void serial_number()
{
uint16_t node_addr = (((uint16_t)ds2411_id.serial1)<<8) + (ds2411_id.serial0);
printf("Unique identifier: %x\n", node_addr);
}
/**
* Sensors
*/
static void temperature_sensor()
{
int16_t value_0, value_1;
value_0 = ds1722_read_MSB();
value_1 = ds1722_read_LSB();
value_1 >>= 5;
value_1 *= 125;
printf("Temperature measure: %i.%i\n", value_0, value_1);
}
static void light_sensor()
{
int16_t value_0, value_1;
tsl2550_init();
value_0 = tsl2550_read_adc0();
value_1 = tsl2550_read_adc1();
/* Recover UART0 config for serial */
uart0_init(UART0_CONFIG_1MHZ_115200);
uart0_register_callback(char_rx);
printf("Luminosity measure: %i:%i\n", value_0, value_1);
}
/*
* Radio config
*/
static void send_packet()
{
uint16_t ret;
static uint8_t num = 0;
// max pkt length <= max(cc2420, cc1101)
snprintf((char*)radio.packet, 58, "Hello World!: %u", num);
radio.length = 1 + strlen((char*)radio.packet);
radio.addr = MAC_BROADCAST;
ret = mac_send((uint8_t *)radio.packet, radio.length, radio.addr);
num++;
if (ret)
printf("mac_send ret %u\n", ret);
}
static uint16_t mac_rx_isr(uint8_t packet[], uint16_t length,
uint16_t src_addr, int16_t rssi)
{
radio.got_event = RX_PKT;
strcpy((char*)radio.packet, (char*)packet);
radio.length = length;
radio.addr = src_addr;
radio.rssi = rssi;
return 1;
}
static uint16_t mac_tx_done_isr()
{
radio.got_event = TX_PKT;
return 1;
}
static uint16_t mac_tx_fail_isr()
{
radio.got_event = TX_PKT_ERROR;
return 1;
}
/*
* HELP
*/
static void print_usage()
{
printf("\n\nIoT-LAB Simple Demo program\n");
printf("Type command\n");
printf("\th:\tprint this help\n");
printf("\tt:\ttemperature measure\n");
printf("\tl:\tluminosity measure\n");
printf("\tu:\tprint uid\n");
printf("\ts:\tsend a radio packet\n");
if (print_help)
printf("\n Type Enter to stop printing this help\n");
printf("\n");
}
static void hardware_init()
{
// Stop the watchdog timer.
WDTCTL = WDTPW + WDTHOLD;
// Setup MCLK 8MHz and SMCLK 1MHz
set_mcu_speed_xt2_mclk_8MHz_smclk_1MHz();
set_aclk_div(8); // ACKL is at 4096Hz
// Initialize the LEDs
LEDS_INIT();
LEDS_OFF();
// Initialize the temperature sensor
ds1722_init();
ds1722_set_res(12);
ds1722_sample_cont();
// Initialize the Luminosity sensor
tsl2550_init();
tsl2550_powerup();
tsl2550_set_standard();
// Initialize the Serial Number
ds2411_init();
// Init csma Radio mac layer
mac_init(CHANNEL);
mac_set_rx_cb(mac_rx_isr);
mac_set_sent_cb(mac_tx_done_isr);
mac_set_error_cb(mac_tx_fail_isr);
// Initialize the UART0
uart0_init(UART0_CONFIG_1MHZ_115200); // We want 115kbaud,
// and SMCLK is running at 1MHz
uart0_register_callback(char_rx); // Set the UART callback function
// it will be called every time a
// character is received.
// Enable Interrupts
eint();
// Initialize the timer for the LEDs
timerA_init();
timerA_start_ACLK_div(TIMERA_DIV_8); // TimerA clock is at 512Hz
timerA_set_alarm_from_now(TIMERA_ALARM_CCR0, 512, 512); // 1s period
timerA_register_cb(TIMERA_ALARM_CCR0, alarm);
}
static void handle_cmd(uint8_t cmd)
{
switch (cmd) {
case 't':
temperature_sensor();
break;
case 'l':
light_sensor();
break;
case 'u':
serial_number();
break;
case 's':
send_packet();
break;
case '\n':
break;
case 'h':
default:
print_usage();
break;
}
}
static void handle_radio()
{
if (radio.got_event == NO_EVENT)
return;
printf("\nradio > ");
switch (radio.got_event) {
case RX_PKT:
printf("Got packet from %x. Len: %u Rssi: %d: '%s'\n",
radio.addr, radio.length, radio.rssi, (char*)radio.packet);
break;
case TX_PKT:
printf("Packet sent\n");
break;
case TX_PKT_ERROR:
printf("Packet sent failed\n");
break;
default:
printf("Uknown event\n");
break;
}
}
int main( void )
{
hardware_init();
while (1) {
while ((cmd == 0) && (radio.got_event == 0))
LPM0; // Low Power Mode 1: SMCLK remains active for UART
if (cmd) {
handle_cmd(cmd);
cmd = 0;
}
if (radio.got_event) {
// disable help message
print_help = 0;
handle_radio();
radio.got_event = 0;
}
printf("cmd > ");
}
return 0;
}
static uint16_t char_rx(uint8_t c) {
// disable help message after receiving char
print_help = 0;
if (c=='t' || c=='l' || c=='h' || c=='u' || c=='s' || c=='\n') {
// copy received character to cmd variable.
cmd = c;
// return not zero to wake the CPU up.
return 1;
}
// if not a valid command don't wake the CPU up.
return 0;
}
static uint16_t alarm(void) {
LED_RED_TOGGLE();
LED_BLUE_TOGGLE();
LED_GREEN_TOGGLE();
/* Print help before getting first real \n */
if (print_help) {
cmd = 'h';
return 1;
}
return 0;
}
you canfind the librairy on this website: https://github.com/iot-lab/wsn430
I can't run the program...can you help me?
Cordialy