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

关于ST NUCLEO-U575ZI-Q的测评创建第一个线程 RT—Thread (2 )

[复制链接]
STMCU小助手 发布时间:2023-1-9 14:00

创建线程是RT_Thread最基本的操作之一。

1、在man.c主程序下面创建静态线程:

  1. /* defined the LED1 pin: PC7 */
  2. /* defined the LED0 pin: PG2 */

  3. #define LED0_PIN    GET_PIN(G, 2)

  4. #define LED1_PIN    GET_PIN(C, 7)
  5. #define THREAD_PRIORITY         25
  6. #define THREAD_STACK_SIZE       512
  7. #define THREAD_TIMESLICE        5

  8. /* 线程led 的对象和运行时用到的栈 */
  9. static struct rt_thread thread_led;
  10. static rt_uint8_t thread_led_stack[512];

  11. /*  线程led 入口 */
  12. void thread_led_entry(void* parameter)
  13. {
  14.         rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
  15.         while(1)
  16.         {
  17.                 rt_pin_write(LED1_PIN,PIN_HIGH);
  18.                 rt_thread_mdelay(500);
  19.                 rt_pin_write(LED1_PIN, PIN_LOW);
  20.                 rt_thread_mdelay(500);
  21.         }
  22. }

  23. /* 线程LED1 初始化 */
  24. int thread_sample(void)
  25. {
  26.         rt_thread_t threadled_ptr;
  27.         rt_err_t result;
  28.        
  29.         /*
  30.         * 初始化 线程LED1
  31.         * 线程的入口是 thread_led_entry, 参数是RT_NULLL
  32.         * 线程栈是thread_led_stack
  33.         * 优先级是25,时间片是5 OS Tick
  34.                
  35.         */
  36.         result = rt_thread_init(&thread_led,
  37.                                                                                                         "thread led",
  38.                                                                                                         thread_led_entry, RT_NULL,
  39.                                                                                                         &thread_led_stack[0], sizeof(thread_led_stack),
  40.                                                                                                                 THREAD_PRIORITY-1,THREAD_TIMESLICE);
  41.         /*  启动线程 */
  42.         if(result == RT_EOK) rt_thread_startup(&thread_led);
  43.         return 0;
  44. }

  45. int main(void)
  46. {
  47.     int count = 1;
  48.     /* set LED0 pin mode to output */
  49.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
  50.         thread_sample();
  51.     while (count++)
  52.     {
  53.         rt_pin_write(LED0_PIN, PIN_HIGH);
  54.         rt_thread_mdelay(500);
  55.         rt_pin_write(LED0_PIN, PIN_LOW);
  56.         rt_thread_mdelay(500);
  57.     }

  58.     return RT_EOK;
  59. }
复制代码

编译下载后,可以看到LED3与LED1同时以500ms的频率闪烁。

在终端查看任务,看到led任务在运行中:


204742dbzbe33bhfuefwz3.png.thumb.png


转载自:社区用户:lugl发布


收藏 评论0 发布时间:2023-1-9 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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