OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8382|回复: 3

采用SmallRTOS为STM32F4开发板编写Led跑马灯示例

[复制链接]

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2014-12-30
在线时间
1 小时
发表于 2015-1-24 07:59:25 | 显示全部楼层 |阅读模式

开发环境:IAR Embedded Workbench / Keil
SmallRTOS版本:V1.00
开发板:STM32F4

功能简介:采用微型嵌入式实时操作系统SmallRTOS创建控制任务CtrlTask,led任务Led1Task、Led2Task及相关同步信号量Led1SemHandle、Led2SemHandle等,由控制任务CtrlTask通过时间休眠的方式SRTaskuSleep控制Led灯的闪烁间隔,并通过Led1SemHandle、Led2SemHandle等信号量同步led任务Led1Task、Led2Task,实现led跑马灯的实验;

相关代码如下所示:
[mw_shl_code=c,true]/***************************************************************************************************** SmallRTOS - Copyright (C) 2012~2015 SmallRTOS.ORG http://www.SmallRTOS.org - Documentation, latest information, license and contact details. http://www.SmallRTOS.com - Commercial support, development, porting, licensing and training services. http://www.SmallRTOS.net - Forum, question and ask. ******************************************************************************************************/ /* Hardware and starter kit includes. */ #include "iar_stm32f407zg_sk.h" #include "stm32f4xx.h" #include "stm32f4xx_conf.h" //SmallRTOS #include "SmallRTOS.h" SRTASK_HANDLE Led1TaskHandle = NULL; SRTASK_HANDLE Led2TaskHandle = NULL; SRTASK_HANDLE CtrlTaskHandle = NULL; SRSEMAPHORE_HANDLE Led1SemHandle = NULL; SRSEMAPHORE_HANDLE Led2SemHandle = NULL; static void Led1Task( void *pvParameters ); static void Led2Task( void *pvParameters ); static void CtrlTask( void *pvParameters ); static void prvSetupHardware( void ); int main() { prvSetupHardware(); // 创建同步信号量 Led1SemHandle = SRCreateSemaphore("Led1"); Led2SemHandle = SRCreateSemaphore("Led2"); // 创建任务 Led1TaskHandle = SRCreateTask(Led1Task, NULL, SRLOWEAST_PRIORITY+1,256,"Led1Task",eTaskStateReady); Led2TaskHandle = SRCreateTask(Led2Task, NULL, SRLOWEAST_PRIORITY+1,256,"Led2Task",eTaskStateReady); CtrlTaskHandle = SRCreateTask(CtrlTask, NULL, SRLOWEAST_PRIORITY+1, 256, "CtrlTask",eTaskStateReady); // Start the scheduler. SRTaskStartScheduler(); //if everything is ok, can't reach here for( ;; ); return 0; } void vParTestInitialise( void ) { /* Initialise all four LEDs that are built onto the starter kit. */ STM_EVAL_LEDInit( LED1 ); STM_EVAL_LEDInit( LED2 ); } static void prvSetupHardware( void ) { /* Setup STM32 system (clock, PLL and Flash configuration) */ SystemInit(); /* Ensure all priority bits are assigned as preemption priority bits. */ NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 ); /* Setup the LED outputs. */ vParTestInitialise(); /* Configure the button input. This configures the interrupt to use the lowest interrupt priority, so it is ok to use the ISR safe SmallRTOS API from the button interrupt handler. */ STM_EVAL_PBInit( BUTTON_USER, BUTTON_MODE_EXTI ); } static void CtrlTask( void *pvParameters ) { for(;;) { SRTaskuSleep(0, 500);//休眠500毫秒 SRSemaphorePost(Led1SemHandle); SRTaskuSleep(0, 500);//休眠500毫秒 SRSemaphorePost(Led2SemHandle); } } static void Led1Task( void *pvParameters ) { for(;;) { SRSemaphorePend(Led1SemHandle, SRPEND_MAX_TICKS); STM_EVAL_LEDToggle( LED1 ); } } static void Led2Task( void *pvParameters ) { for(;;) { SRSemaphorePend(Led2SemHandle, SRPEND_MAX_TICKS); STM_EVAL_LEDToggle( LED2 ); } } [/mw_shl_code]



请访问官方网站:http://www.smallrtos.org/ 下载微型嵌入式实时操作系统SmallRTOS的最新内核代码。



SmallRTOSLed.rar

502.54 KB, 下载次数: 229

SmallRTOSLed_Keil.rar

478.41 KB, 下载次数: 197

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-24 13:49:17 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165463
金钱
165463
注册时间
2010-12-1
在线时间
2114 小时
发表于 2015-1-24 23:17:31 | 显示全部楼层
谢谢分享....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2014-12-30
在线时间
1 小时
 楼主| 发表于 2015-1-25 12:45:47 | 显示全部楼层
按照各位同学的建议,增加了Keil版本的示例工程,请大家根据自己的开发环境下载对应版本的示例工程包。

注:Keil版本的工程需要分配相关的Heap空间,供SmallRTOS创建任务及信号量用,这点与官方提供的其他工程不一样。

感谢“正点原子”、“八度空间”的支持,谢谢:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-24 23:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表