基于keil的contiki系统的stm32移植
2015-04-22 21:50
477 查看
一, 全部代码的文件情况
二, keil中文件包含情况
三,源文件的修改情况
1,contiki-2.5(基于这个版本内核),在cpu/arm/stm32f103文件夹下面修改clock.c文件中的函数
voidclock_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;
}
}
2,在contiki-2.5/platform/stm32test建立工程文件(这里以野火的工程建立方式为例)
将圈红的两个文件复制到user目录下面
其他文件的填写参考野火建立工程的方式
3,修改contiki-main.c文件如下
#include "stm32f10x.h"#include "led.h"
#include <stdint.h>
#include <stdio.h>
//#include <debug-uart.h> //这个在需要串口调试的时候加上
#include <clock.h>
#include <sys/process.h>
#include <sys/procinit.h>
#include <etimer.h>
#include <sys/autostart.h>
#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--);
}
4,将相应的头文件更改一下
例:在clock.c 中添加#include "stm32f10x.h"
#include "stm32f10x_it.h"
删除原来的
#include <stm32f10x_map.h>
#include<nvic.h>
5,如果头文件提示找不到,搜索一下,到对应平台(例stm32)下面的文件夹里面找(很重要)
四,说明
1,没有加入uart调试,可参考网络其他教程
2,强烈推荐网址
http://blog.chinaunix.net/uid-9112803-id-2978041.html相关文章推荐
- 基于SD卡的FatFs文件系统(FatFs移植到STM32)
- 手把手教你在MDK编译环境下移植基于STM32的UCOSII嵌入式系统
- STM32移植contiki入门之一:系统介绍和开发环境搭建
- 基于stm32-spi2的文件系统(寄存器)
- 第37章 基于SD卡的FatFs文件系统—零死角玩转STM32-F429系列
- 基于busybox1.19.3移植yaffs2文件系统至OK6410A开发板
- STM32移植contiki入门之三:从LED灯程序到contiki编程模型
- STM32移植contiki进阶之二:再叙systick
- STM32 FATFS文件系统移植
- 基于contiki系统的MCU使用经验总结
- C语言之循环队列的实战使用--基于stm32、keil IDE(四)
- U-Boot在基于ADSP BF533的嵌入式Linux系统上的移植
- ARM-Linux 内核移植--基于FL2440开发板(修改为Linux单系统)
- 基于S3C2440的Linux内核移植和yaffs2文件系统制作
- STM32基于库函数版本的系统工作频率与CAN工作波特率设置
- 基于s5pv210嵌入式系统busybox文件系统移植
- contiki系统的移植
- 基于S3C2440的linux-3.6.6移植——内核移植,建立自己的平台系统
- 手把手教你在STM32下移植UCGUI(基于正点原子的MINI开发板)
- 基于EncEthernet的FreeModbus-TCP 在stm32上的移植与测试