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

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楼的代码是:任务间的通信,使用队列实现
0 }) r, M5 d8 H3 s, w9 b/ w( d3 [ FreeRTOS中信号量与互斥琐的底层都是通过队列来实现的!
  G+ t$ w, a5 k7 h: u在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分。FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用。- f: S/ o' z+ g5 Z" N; M: G
参考代码中存在两个任务,任务Task3 和任务task 4。任务Task4 扮演生产者的角色,任务Task4每隔1S向队列中填充内容,填充的内容为4个int8_t类型的变量,填充完之后该变量累加;任务Task 3 扮演消费者的角色,任务Task3 不断的从队列中提取内容,并通过串口打印.
caizhiwei 回答时间:2015-4-29 17:00:31
实验结果:
* k& v" P5 P6 |% \9 [2 H9 W
qiu-368230 回答时间:2015-4-30 16:41:24
厉害,几代后续更新哦
caizhiwei 回答时间:2015-5-4 09:28:46
5月4号更新:互斥信号量的使用~
: ~( C& O! G8 z1 q0 q相当于多个任务不能同时操作一个全局变量,如果不互斥,就乱套了,必须一个一个来,要排队哦
天使♀的☆宇★翼 回答时间:2015-5-4 09:37:15
谢谢楼主分享
caizhiwei 回答时间:2015-5-4 09:37:28
一个任务想要合法地访问资源,其必须先成功地得到(Take) 该资源对应的令牌 (成为令牌持有者)。当令牌持有者完成资源使用,其必须马上归还(Give) 令牌。只有归还了令牌,其它任务才可能成功持有,也才可能安全地访问该共享资源。
caizhiwei 回答时间:2015-5-4 09:39:45
  1. /*
    7 D- q! O3 \: W, b& ^0 x2 X  G0 A
  2. *********************************************************************************************************6 d8 a7 A4 e5 y8 e
  3. *        函 数 名: vTask3
    - I: M5 V- h6 x
  4. *        功能说明: 接收队列信息               
    ) r0 X/ u# ]; B0 |) P
  5. *        形    参:pvParameters 是在创建该任务时传递的形参
    , {% }* b/ U2 E# @
  6. *        返 回 值: 无
    0 ^1 r$ Q" E( e% x8 l
  7. *********************************************************************************************************
    3 L( |" w; w8 V. _9 W; N) h) F  h
  8. */
    3 Z* a' W( R. U8 q) r/ D' g, n
  9. void vTask3( void *pvParameters )' V; Z& R5 s9 `* A0 T
  10. {2 z7 R3 |) H. q
  11.     portTickType xLastWakeTime;
    2 }* V% i0 q7 B4 t$ y/ l
  12.     const portTickType xFrequency = 1000;
    5 h6 t( Y) R8 \* e$ ~6 p2 R/ T' D

  13. & g* M, U7 }0 w, ~( d; q
  14.     // Initialise the xLastWakeTime variable with the current time.
    * h+ `- j$ ~' m: |
  15.     xLastWakeTime = xTaskGetTickCount();
    & r- m! n. W7 f  C5 \2 P
  16. 3 Q& K" Z) ~" {
  17.     while(1)
    ; n- \5 R% g  B7 p$ P# P8 y. r" p$ h
  18.     {                               
    : b% |# [4 V# l5 V4 K
  19.       /* 一个任务想要合法地访问资源,其必须先成功地得到(Take) 该资源对应的令牌
    / d7 f" m) }. r7 G2 Z3 K) y7 l
  20.       (成为令牌持有者)。当令牌持有者完成资源使用,其必须马上归还(Give) 令牌。( P1 ]9 R, `& E8 H& A& `
  21.       只有归还了令牌,其它任务才可能成功持有,也才可能安全地访问该共享资源。*/
    : t# y8 A/ Y! B' q( O+ @
  22.       xSemaphoreTake( xSemaphore, portMAX_DELAY);4 Y  C6 X0 Z8 ^) L0 l5 V2 i' ^
  23.       printf("Task 3 is running\r\n");
    : |" ]2 U' p3 g' w. E
  24.       xSemaphoreGive( xSemaphore );
    3 x) H0 O4 Q) p9 ?
  25.       vTaskDelayUntil( &xLastWakeTime, xFrequency );* B5 W: [3 ?+ O7 L1 N' B
  26.     }
    ; m& T3 H9 I- W8 ]' i4 R! j
  27. }/ h, L7 X# _( E9 {
  28. & J# ^( J# k4 M/ {0 q3 |
  29. /*. K' E/ c4 l4 g# a# J* l6 o
  30. *********************************************************************************************************
      e; {" @! d; u$ W- S3 \6 r
  31. *        函 数 名: vTask4" l" g. Z8 L$ C2 s
  32. *        功能说明: 向队列中填充内容       
    * j; g( b+ J1 z8 J+ `9 C; S/ Z
  33. *        形    参:pvParameters 是在创建该任务时传递的形参3 ^: Q* o4 P2 D5 n$ w
  34. *        返 回 值: 无' F, e8 V" j" R$ G, h* |6 {
  35. *********************************************************************************************************& h- `" f* C1 l- m7 Y
  36. */1 ]. U' I6 `# z# \0 q
  37. void vTask4( void *pvParameters )
    / d0 _+ u0 T( v8 i
  38. {; z2 L4 |* z4 `% X1 S
  39.     portTickType xLastWakeTime;
    % c/ z- s2 f4 h
  40.     const portTickType xFrequency = 1000;& N  y) C! Y) y- U

  41. . ^" e* l. j  x( K7 Z2 r
  42.     // Initialise the xLastWakeTime variable with the current time.$ G  Z) s1 o6 ?* \$ p$ H
  43.     xLastWakeTime = xTaskGetTickCount();
    6 T* P( R. [! n& {

  44. 3 @. W* W5 g6 i' n8 N# ]
  45.     while(1)
    2 f5 y$ i: f/ q
  46.     {( X5 X) ~+ i5 d
  47.       /* 用于互斥的信号量必须归还。用于同步的信号量通常是完成同步之后便丢弃,不再归还。*/. N* X/ Z! M: r8 x: y  i: _
  48.       xSemaphoreTake( xSemaphore, portMAX_DELAY);
    / A7 H8 k# R" q) w1 G
  49.       printf("Task 4 is running\r\n");
    # X4 }1 F$ f  u! h
  50.       xSemaphoreGive( xSemaphore );5 {1 d. g9 b0 L) W. i( O
  51.       vTaskDelayUntil( &xLastWakeTime, xFrequency );7 i# i9 N( ]9 ~' w) g3 e
  52.     }1 X/ q2 a# x$ H2 `: u2 z, b8 V
  53. }3 d; [# C& [" H# x3 k, Y; B# G
复制代码
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
+ u* o$ Y# D2 v  U, ?一个寒假过后就会
: K9 n! h5 P7 d% J9 x: o$ U( N2 d( B
哈哈,不过寒假就不会啦??
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版