请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
工具/软件:TI C/C++编译器
大家好!
当我想编译一个教程程序时遇到了一些问题...
#include
#include
#include
#include
/*项目包括*/
#include "clock.h"
#include "LEDs.h"
#include "uart0.h"
#include "tsl2550.h"
#include "ds1722.h"
#include "ds2411.h"
#include "timerA.h"
#include "mac.h"
//选择通道
警报[0-20] intchar 函数/inttchar t intrath (int16
)/inttchar intt_int16) intrath (intchar intc_static t_int16)/intt/intt_intchar intt intrat_int16
返回 uart0_putchar (c);
}
/*全局变量*/
//存储从 UART 接收到的字符的值(由主函数分析
)// volatile 是防止对其进行优化所必需的。
volatile INT8_t cmd = 0;
//每秒打印帮助
volatile INT8_t print_help = 1;
enum{
NO_EVENT = 0、
RX_PKT、
TX_PKT、
TX_PKT_ERROR
、};
//获取无线电事件
易失性结构{
int8_t GUST_EVENT;
uint8_t packet[256];
uint16_t length;
uint16_t addr;
int16_t RSSI;
}radio ={0};
/**
*序列号
*/
static void serial_number ()
{
uint16_t node_addr =(((uint16_t) ds2411_id.serial1)<<8)+(ds2411_id.serial0);
printf ("唯一标识符:%x\n"、node_addr);
}
/**
*传感器
*/
静态空 tempature_sensor ()
{
int16_t value_0、value_1;
value_0 = ds1722_read_msb ();
Value_1 = ds1722_read_LSB ();
Value_1 >=5;
Value_1 *= 125;
printf ("温度测量:%I.%i\n"、value_0、value_1);
}
静态空 lIGHT_SENSOR ()
{
int16_t value_0、value_1;
tsl2550_init();
value_0 = tsl2550_read_ADC0 ();
Value_1 = tsl2550_read_adc1 ();
/*恢复串行的 UART0配置*/
uart0_init (UART0_CONFIG_1MHz_115200);
uart0_register_callback (char_Rx);
printf ("亮度度量:%i:%i\n"、value_0、value_1);
}
//
*无线电配置
*/
静态 void send_packet ()
{
uint16_t ret;
静态 uint8_t num = 0;
//最大 pktt 长度<= 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);
}
静态 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 =长度;
radio.addr = src_addr;
radio.RSSI = RSSI;
返回1;
}
静态 uint16_t mac_TX_DONE_ISR ()
{
radio.GOT_EVENT = TX_PKT;
返回1;
}
静态 uint16_t Mac_TX_FAIL_ISR ()
{
radio.GOT_EVENT = TX_PKT_ERROR;
返回1;
}
//*
帮助
*/
静态 void print_usage()
{
printf ("\n\n\not-lab 简单演示程序\n"\});
printf ("类型命令\n");
printf ("\th:\tprint this help\n");
printf ("\tt:\ttemperature measure\n");
printf ("\tl:\tluminity measure\n");
printf ("\tu:\tprint uid\n");
printf ("\ts:\tsend a radio packet\n");
如果(print_help)
printf ("\n 键入 Enter 以停止打印此帮助\n"\};
printf ("\n");
}
静态 void hardware_init()
{
//停止看门狗计时器。
WDTCTL = WDTPW + WDTHOLD;
//设置 MCLK 8MHz 和 SMCLK 1MHz
SET_MCU_SPEED_XT2_MCLK_8MHz_smclk_1MHz ();
SET_aclk_div (8);// ACKL 为4096Hz
//初始化 LED
LED_INIT();
LED_OFF ();
//初始化温度传感器
ds1722_init();
ds1722_set_res (12);
ds1722_sample_cont();
//初始化亮度传感器
tsl2550_init();
tsl2550_powerup();
tsl2550_set_standard();
//初始化序列号
DS2411_init();
// Init CSMA 无线电 MAC 层
Mac_init (通道);
MAC_SET_Rx_CB (MAC_Rx_ISR);
MAC_SET_SENT_CB (Mac_TX_DONE _ISR);
MAC_SET_ERROR_CB (Mac_TX_FAIL_ISR);
//初始化 UART0
uart0_init (UART0_CONFIG_1MHz_115200);//我们需要115k 波特、
//和 SMCLK 以1MHz 运行
uart0_register_callback (char_Rx);//设置 UART 回调函数
//每次 a 都将调用它
//接收字符。
//启用中断
eint();
//初始化 LED 的计时器
timerA_init();
timerA_start_ACLK_div (TIMERA_DIV_8);// TimerA 时钟频率为512Hz
timerA_set_alarm_far_fin_now (TIMERA_alarm_CCR0、512、512);// 1s 周期
timerA_register_CB (TIMERA_alarm_CCR0、alarm);
}
静态空 handle_cmd (uint8_t cmd)
{
开关(cmd){
案例"t":
temater_sensor();
中断;
案例'l':
light_sensor();
中断;
案例"u":
serial_number();
中断;
案例"S":
send_packet();
中断;
案例'\n':
中断;
案例"h":
默认值:
print_usage();
中断;
}
}
静态空 handle_radio()
{
如果(radio.GOT 事件== NO_EVENT)
返回;
printf ("\nradio >");
switch (radio.Got_event){
RX_PKT 案例:
printf ("从%x 获取数据包 Len:%u RSSI:%d:'%s'\n"、
radio.addr、radio.length、radio.RSSI、(char*) radio.packet);
中断;
案例 TX_PKT:
printf ("发送的数据包\n");
中断;
案例 TX_PKT_ERROR:
printf ("发送的数据包失败\n");
中断;
默认值:
printf ("已知事件");
中断;
}
}
int main( void ){
hardware_init();
while (1){
while ((cmd =0)&&(radio.GK_event =0))
LPM0;//低功耗模式1:SMCLK 对于 UART 保持有效
如果(cmd){
handle_cmd (cmd);
CMD = 0;
}
if (radio.Got_event){
//禁用帮助消息
print_help = 0;
handle_radio();
radio.GOT 事件= 0;
}
printf ("cmd >");
}
返回0;
}
静态 uint16_t char_rx (uint8_t c){
//接收字符后禁用帮助消息
print_help = 0;
if (c='t'|| c='l'|| c='h'|| c='u'|| c='s'|| c='s'|| c='\n'){
//将接收到的字符复制到 cmd 变量。
CMD = c;
//返回非零来唤醒 CPU。
返回1;
}
//如果不是有效的命令,则不会唤醒 CPU。
返回0;
}
静态 uint16_t alarm (void){
LED_RED_TOGGLE ();
LED_blue_toggle ();
LED_GREEN_TOGGLE ();
/*在获得第一个实数之前打印帮助\n */
if (print_help){
CMD ='h';
返回1;
}
返回0;
}
您可以在以下网站上找到该库: https://github.com/iot-lab/wsn430
我无法运行 program...ca、您可以帮我吗?
科迪里