历史上的今天
今天是:2025年08月04日(星期一)
2018年08月04日 | 基于keil的contiki系统的stm32移植
2018-08-04 来源:eefocus
一, 全部代码的文件情况
二, keil中文件包含情况
三,源文件的修改情况
1,contiki-2.5(基于这个版本内核),在cpu/arm/stm32f103文件夹下面修改clock.c文件中的函数
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;
}
}
2,在contiki-2.5/platform/stm32test建立工程文件(这里以野火的工程建立方式为例)
将圈红的两个文件复制到user目录下面
其他文件的填写参考野火建立工程的方式
3,修改contiki-main.c文件如下
#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--);
}
4,将相应的头文件更改一下
例:在clock.c 中添加
#include "stm32f10x.h"
#include "stm32f10x_it.h"
删除原来的
#include
#include
5,如果头文件提示找不到,搜索一下,到对应平台(例stm32)下面的文件夹里面找(很重要)
四,说明
1,没有加入uart调试,可参考网络其他教程
2,强烈推荐网址
http://blog.chinaunix.net/uid-9112803-id-2978041.html
史海拾趣
|
运算放大器通过简单的外围元件,在模拟电路和数字电路中得到非常广泛的应用。运算放大器有好些个型号,在详细的性能参数上有几个差别,但原理和应用办法一样。 运算放大器通常有两个输入端,即正向输入端和反向输入端,有且只有一个输出端。部 ...… 查看全部问答> |
|
最近我常用的一个函数出了点异样,大虾米现身了!!!HOHO 函数如下: unsigned int SysTim; unsigned int PreTim1; unsigned int PreTim2; unsigned int LenTim(unsigned int preTim, unsigned int sysTim) { if (preTim > sysTim) { return (0 ...… 查看全部问答> |
|
众所周知,模拟电路难学,以最普遍的晶体管来说,我们分析它的时候必须首先分析直流偏置,其次在分析交流输出电压。可以说,确定工作点就是一项相当麻烦的工作(实际中来说),晶体管的参数多、参数的离散性也较大。但值得我们注意的是,模拟电路构 ...… 查看全部问答> |
|
有谁了解深圳\"研祥智能科技\"公司吗?那边的待遇怎么样,我是08年的应届毕业生,我很想知道,本科生在那边的待遇和发展怎么样呢? 望各位知情的大虾帮帮忙啊 ~谢过~… 查看全部问答> |
|
fatal error C1083: Cannot open include file: 'zlib.h': No such file or directory fatal error C1083: Cannot open include file: \'zlib.h\': No such file or directory 为什么会出这种错误,… 查看全部问答> |




