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

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
一个寒假过后就会
caizhiwei 回答时间:2015-5-8 09:09:40
mouse_ 发表于 2015-5-8 09:08
一个寒假过后就会

哈哈,不过寒假就不会啦??
stary666 回答时间:2015-5-11 14:02:47
谢谢分享   
hooke 回答时间:2015-5-12 10:05:16
感谢分享,rtos还没做到
flintlovesam 回答时间:2015-5-14 12:35:34
stary666 回答时间:2015-5-14 12:39:03
还有更新吗?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版