基于IAR和STM32的uCOS-II移植
SECTION
.text:CODE:REORDER(1)
OS_CPU_PendSVHandler;PendSV_Handler
B OS_CPU_PendSVHandler;PendSV_Handler
PUBWEAK OS_CPU_SysTickHandler;SysTick_Handler
SECTION .text:CODE:REORDER(1)
OS_CPU_SysTickHandler;SysTick_Handler
B OS_CPU_SysTickHandler;SysTick_Handler
(void)到main.c中。
#include "ucos_ii.h"
#include "os_cpu.h"
#include "stm32f10x.h" #define STARTUP_TASK_PRIO 10
#define STARTUP_TASK_STK_SIZE 64
OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE]; //LED1任务
//设置任务优先级
#define LED1_TASK_PRIO 5
//设置任务堆栈大小
#define LED1_STK_SIZE 64
//创建任务堆栈空间
OS_STK LED1_TASK_STK[LED1_STK_SIZE]; //LED2任务
//设置任务优先级
#define LED2_TASK_PRIO 6
//设置任务堆栈大小
#define LED2_STK_SIZE 64
//创建任务堆栈空间
OS_STK LED2_TASK_STK[LED2_STK_SIZE]; void led1_task(void *p_arg);
void led2_task(void *p_arg); INT32U OS_CPU_SysTickClkFreq (void)
{
INT32U freq; RCC_ClocksTypeDef rcc_clocks; RCC_GetClocksFreq(&rcc_clocks); freq = (INT32U)rcc_clocks.HCLK_Frequency; return (freq);
} void LED_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED0-->PA.2 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.2
GPIO_ResetBits(GPIOA,GPIO_Pin_2); //PA.2 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //LED1-->PB.12 端口配置, 推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //PB.12 输出高
} static void startup_task(void *p_arg)
{
INT8U err;
OS_CPU_SR cpu_sr=0; OS_CPU_SysTickInit(); #if (OS_TASK_STAT_EN > 0)
OSStatInit();
#endif OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) err = OSTaskCreate(led1_task, (void *)0,
(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1], LED1_TASK_PRIO);
err = OSTaskCreate(led2_task, (void *)0,
(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1], LED2_TASK_PRIO); OSTaskSuspend(STARTUP_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) if (OS_ERR_NONE != err)
while(1); OSTaskDel(OS_PRIO_SELF);
} int main(void)
{
LED_Init();
OSInit();
OSTaskCreate(startup_task, (void *)0,
(OS_STK*)&startup_task_stk[STARTUP_TASK_STK_SIZE-1],
STARTUP_TASK_PRIO);
OSStart();
return 0;
} //LED1任务
void led1_task(void *p_arg)
{
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
OSTimeDly(500);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
OSTimeDly(500);
}
} //LED2任务
void led2_task(void *p_arg)
{
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
OSTimeDly(500);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
OSTimeDly(500);
}
}
基于IAR和STM32的uCOS-II移植的更多相关文章
- 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)
基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...
- 基于s5pv210嵌入式linux系统sqlite3数据库移植
基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...
- 基于Petri网的工作流分析和移植
基于Petri网的工作流分析和移植 一.前言 在实际应用场景,包括PEC的订单流程从下订单到订单派送一直到订单完成都是按照一系列预先规定好的工作流策略进行的. 通常情况下如果是采用面向过程的编程方法, ...
- ucos ii 46个系统API函数解析
源: ucos ii 46个系统API函数解析
- FreeRTOS 和uCOS II的简单比较
转载:http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=114 这是两种RTOS, 现在粗略比较一下. freeRTOS比uCO ...
- 基于IAR平台FreeRTOS移植
开始这篇文章之前先简单说明一下,我使用的MCU是我们公司自主研发的ACH1180芯片,和STM32差不多,都是Cortex-M4的核,所以移植的过程参考了STM32移植的步骤. 1.解压FreeRT ...
- IAR为STM32创建工程模板(基于STM32f103zet6)
今天给小伙伴分享一篇给stm32新建工程模版 1.首先打开IAR,就是这个样子 2.再建一个目录文件夹 3.建立一个工作空间,以及建好工作空间如右图所示 4.接下来建立工程,Project------ ...
随机推荐
- IOS UI-自定义UIColectionView布局
ViewController.m // // ViewController.m // IOS_0226_自定义UIColectionView布局 // // Created by ma c on 16 ...
- 详解offset
offset offset 译为“偏移量”,是javascript很重要的一个概念.涉及到便宜量的主要有offsetLeft.offsetTop.offHeight.offsetWidth这四个属性还 ...
- JAVA运行war包
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m java %JAVA_OPTS% ...
- L155
Wireless Festival has been given permission to remain in London's Finsbury Park, provided performers ...
- Chrome自定义最小字号
============= ============== =======================
- vue.js 源代码学习笔记 ----- core lifecycle
/* @flow */ import config from '../config' import Watcher from '../observer/watcher' import { mark, ...
- (转)Hive自定义UDAF详解
UDAF有两种,第一种是比较简单的形式,利用抽象类UDAF和UDAFEvaluator,暂不做讨论.主要说一下第二种形式,利用接口GenericUDAFResolver2(或者抽象类AbstractG ...
- js的事件循环机制和任务队列
上篇讲异步的时候,提到了同步队列和异步队列的说法,其实只是一种形象的称呼,分别代表主线程中的任务和任务队列中的任务,那么此篇我们就来详细探讨这两者. 一.来张图感受一下 如果看完觉得一脸懵逼,请继续往 ...
- Java基础部分全套教程.
这是我自己早前听课时整理的java基础全套知识,使用于初学者,也可以适用于中级的程序员,我做成了chm文档的类型,你们可以下载 笔记是比较系统全面,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的 ...
- Codeforces 808G Anthem of Berland【KMP】【DP】
LINK 简要题意 给你一个串s,上面有字母和一些通配符,问你将通配符换成字母之后最多可以出现多少次串t 首先有一个很傻子的做法就是\(dp_{i,j}\)表示s到第i个位置匹配t串前j个字符的完整t ...