void
clock_init()
{
if (systick_config(systemcoreclock /clock_second))
{
while(1);
}
}
void
systick_handler(void)
{current_clock ;
if(etimer_pending() && etimer_next_expiration_time() <=current_clock) {
etimer_request_poll();
/*printf("%d,%d\n", clock_time(),etimer_next_expiration_time ());*/
}
if(--second_countdown == 0) {
current_seconds ;
second_countdown = clock_second;
}
}
将圈红的两个文件复制到user目录下面
其他文件的填写参考野火建立工程的方式
#include "stm32f10x.h"
#include "led.h"
#include
#include
//#include
#include
#include
#include
#include
#include
#include "contiki.h"
unsigned int idle_count = 0;
//事件的声明
static process_event_t event_ledoff;
static process_event_t event_ledon;
//函数声明
void delay(__io u32 ncount);
//两个进程的声明
process(led_on, "led_on");
process(led_off, "led_off");
//将两个进程加入autostart_processes
autostart_processes(&led_on, &led_off);
//进程1的函数主体
process_thread(led_on, ev, data)
{
//进程开始
process_begin();
//获得一个事件或者是初始化
event_ledoff = process_alloc_event();
while(1)
{
//等待事件发生进入,若没有事件发生系统调度到其他地方
process_wait_event_until(ev == event_ledon);
//打开led 注意延时
led1(on);
//delay(0xfffef);
delay_us(2);
//发送一个事件,这里是唤醒了第二个进程
process_post(&led_off, event_ledoff, null);
}
//进程结束
process_end();
}
process_thread(led_off, ev, data)
{
process_begin();
event_ledon = process_alloc_event();
while(1)
{
process_wait_event_until(ev == event_ledoff);
//打开led 注意延时
led1(off);
//delay(0xfffef);
delay_us(2);
process_post(&led_on, event_ledon, null);
}
process_end();
}
int main(void)
{
led_gpio_config();
//做指示灯
led2(on);
clock_init();
process_init();
//etimer_process 是系统进程
process_start(&etimer_process,null);
//下面这句后面的都不能执行,加锁就可以
autostart_start(autostart_processes);
event_ledon = process_alloc_event();
process_post(&led_on, event_ledon, null);
while(1) {
do
{
}
while(process_run()> 0);
idle_count ;
}
return 0;
}
void delay(__io u32 ncount)
{
for(;ncount != 0; ncount--);
}
例:在clock.c 中添加
#include "stm32f10x.h"
#include "stm32f10x_it.h"
删除原来的
#include
#include
http://blog.chinaunix.net/uid-9112803-id-2978041.html
『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』