lugl4313820 发表于 2022-12-13 10:11

[ ST NUCLEO-U575ZI-Q 测评] FreeRTos的第一个任务

<div class='showpostmsg'><pre>
<code>#include &lt;Arduino.h&gt;
#include &lt;STM32FreeRTOS.h&gt; //引和freertos库

#ifndef LED_BUILTIN
#define LED_BUILTIN PC5
#endif

/*********************************************************************************
* @ 函数名: vTaskLed1
* @ 功能说明: LED1 任务,实现一个周期性的闪烁
* @ 参数    : pvParameters,当任务创建的时候传进来,可以没有
* @ 返回值: 无
********************************************************************************/
void vTaskLed1(void *pvParameters)
{
    /* 任务都是一个无限,不能返回 */
    while(1)
    {
      digitalWrite(LED_BUILTIN, HIGH);;
    /* 阻塞延时,单位ms */      
      vTaskDelay( 500 );
      digitalWrite(LED_BUILTIN, LOW);;   
      vTaskDelay( 500 );
      long tick = xTaskGetTickCount();
      Serial.print("running time = ");
      Serial.println(tick);
    }   
}
void setup()
{
Serial.begin(115200);
// initialize LED digital pin as an output.
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("start U575");
TaskHandle_t myTask1; //创建任务句柄
xTaskCreate(vTaskLed1,//创建任务
            "Led task",
            1024,
            NULL,
            6,
            &amp;myTask1);
// 开启任务
vTaskStartScheduler();
}

void loop()
{

}</code></pre>

<p>如上,开启FreeRTos。</p>

<p>效果:</p>

<p>&nbsp;第一个任务就成功了,给arduino点个赞吧。下一集,开启多任务系统。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

damiaa 发表于 2022-12-13 14:40

<p><img height="55" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan11.gif" width="70" />你已经开始了多任务<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan76.gif" width="48" /><img height="49" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan86.gif" width="66" /></p>

lugl4313820 发表于 2022-12-13 15:19

damiaa 发表于 2022-12-13 14:40
你已经开始了多任务

<p>对,加上setup里面的任务,算是两个任务了吧,我还是学习中。</p>

damiaa 发表于 2022-12-13 15:32

本帖最后由 damiaa 于 2022-12-13 20:11 编辑

<p>esp32 idf框架就是默认了3个任务。</p>

<table id="id23">
        <tbody>
                <tr>
                        <td>
                        <p>Main Task (<code>main</code>)</p>
                        </td>
                        <td>
                        <p>CPU0</p>
                        </td>
                        <td>
                        <p>1</p>
                        </td>
                        <td>
                        <p>Task that simply calls&nbsp;<code>app_main</code>. This task will self delete when&nbsp;<code>app_main</code>&nbsp;returns</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>Idle Tasks (<code>IDLEx</code>)</p>
                        </td>
                        <td>
                        <p>CPU0 and CPU1</p>
                        </td>
                        <td>
                        <p>0</p>
                        </td>
                        <td>
                        <p>Idle tasks created for (and pinned to) each CPU</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>IPC Tasks (<code>ipcx</code>)</p>
                        </td>
                        <td>
                        <p>CPU0 and CPU1</p>
                        </td>
                        <td>
                        <p>24</p>
                        </td>
                        <td>
                        <p>IPC tasks created for (and pinned to ) each CPU. IPC tasks are used to implement the IPC feature. See&nbsp;<a href="https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/system/ipc.html">Inter-Processor Call</a>&nbsp;for more details.</p>
                        </td>
                </tr>
        </tbody>
</table>

<p>esp32 的arduino 中用freertos在加载app_main的时候就创建了一个任务。</p>

<p>setup()和loop()函数包含在这个任务里面。</p>

<p>xTaskCreatePinnedToCore(loopTask, &quot;loopTask&quot;, 8192, NULL, 1, NULL, ARDUINO_RUNNING_CORE);</p>

<p>stm32 的arduino 中用freertos不知道什么情况。 可能不一样&nbsp; stm32的main.cpp 里面可能 没创建任务,但也包含了setup()和loop()函数。</p>

<p>如果这样 楼主的还是一个任务<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan76.gif" width="48" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan76.gif" width="48" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan76.gif" width="48" /></p>

okhxyyo 发表于 2023-1-12 09:26

<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页: [1]
查看完整版本: [ ST NUCLEO-U575ZI-Q 测评] FreeRTos的第一个任务