你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS在STM32F2平台的移植(后续有更新)  

[复制链接]
caizhiwei 发布时间:2015-3-13 13:56
阅读主题, 点击返回1楼
收藏 3 评论52 发布时间:2015-3-13 13:56
52个回答
caizhiwei 回答时间:2015-4-29 17:00:00
30楼的代码是:任务间的通信,使用队列实现
FreeRTOS中信号量与互斥琐的底层都是通过队列来实现的!
在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分。FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用。
参考代码中存在两个任务,任务Task3 和任务task 4。任务Task4 扮演生产者的角色,任务Task4每隔1S向队列中填充内容,填充的内容为4个int8_t类型的变量,填充完之后该变量累加;任务Task 3 扮演消费者的角色,任务Task3 不断的从队列中提取内容,并通过串口打印.
caizhiwei 回答时间:2015-4-29 17:00:31
实验结果:
qiu-368230 回答时间:2015-4-30 16:41:24
厉害,几代后续更新哦
caizhiwei 回答时间:2015-5-4 09:28:46
5月4号更新:互斥信号量的使用~
相当于多个任务不能同时操作一个全局变量,如果不互斥,就乱套了,必须一个一个来,要排队哦
天使♀的☆宇★翼 回答时间:2015-5-4 09:37:15
谢谢楼主分享
caizhiwei 回答时间:2015-5-4 09:37:28
一个任务想要合法地访问资源,其必须先成功地得到(Take) 该资源对应的令牌 (成为令牌持有者)。当令牌持有者完成资源使用,其必须马上归还(Give) 令牌。只有归还了令牌,其它任务才可能成功持有,也才可能安全地访问该共享资源。
caizhiwei 回答时间:2015-5-4 09:39:45
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: vTask3
  4. *        功能说明: 接收队列信息               
  5. *        形    参:pvParameters 是在创建该任务时传递的形参
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void vTask3( void *pvParameters )
  10. {
  11.     portTickType xLastWakeTime;
  12.     const portTickType xFrequency = 1000;

  13.     // Initialise the xLastWakeTime variable with the current time.
  14.     xLastWakeTime = xTaskGetTickCount();

  15.     while(1)
  16.     {                               
  17.       /* 一个任务想要合法地访问资源,其必须先成功地得到(Take) 该资源对应的令牌
  18.       (成为令牌持有者)。当令牌持有者完成资源使用,其必须马上归还(Give) 令牌。
  19.       只有归还了令牌,其它任务才可能成功持有,也才可能安全地访问该共享资源。*/
  20.       xSemaphoreTake( xSemaphore, portMAX_DELAY);
  21.       printf("Task 3 is running\r\n");
  22.       xSemaphoreGive( xSemaphore );
  23.       vTaskDelayUntil( &xLastWakeTime, xFrequency );
  24.     }
  25. }

  26. /*
  27. *********************************************************************************************************
  28. *        函 数 名: vTask4
  29. *        功能说明: 向队列中填充内容       
  30. *        形    参:pvParameters 是在创建该任务时传递的形参
  31. *        返 回 值: 无
  32. *********************************************************************************************************
  33. */
  34. void vTask4( void *pvParameters )
  35. {
  36.     portTickType xLastWakeTime;
  37.     const portTickType xFrequency = 1000;

  38.     // Initialise the xLastWakeTime variable with the current time.
  39.     xLastWakeTime = xTaskGetTickCount();

  40.     while(1)
  41.     {
  42.       /* 用于互斥的信号量必须归还。用于同步的信号量通常是完成同步之后便丢弃,不再归还。*/
  43.       xSemaphoreTake( xSemaphore, portMAX_DELAY);
  44.       printf("Task 4 is running\r\n");
  45.       xSemaphoreGive( xSemaphore );
  46.       vTaskDelayUntil( &xLastWakeTime, xFrequency );
  47.     }
  48. }
复制代码
stary666 回答时间:2015-5-4 09:51:30
支持原创。。。
日落123 回答时间:2015-5-7 20:30:14
谢谢分享  学习中
mouse_ 回答时间:2015-5-8 09:08:11
一个寒假过后就会

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版