v3学院教你学习-task和function的异同

task(任务)与function(函数)的不同
任务与函数主要有以下四点不同:
l 函数只能与主模块共用一个仿真时间单位,而任务定义自己的仿真时间单位。
l 函数不能启动任务,任务可以启动其他任务和函数。
l 函数至少要有一个输入变量,而任务可以没有或有多任何类型的变量。
l 函数返回一个值,而任务不返回值。

  1. task语句说明
    l 任务的定义
    定义任务的语法如下:
    task<任务名>
    <端口及数据类型声明语句>
    <语句1>
    <语句2>
    …………
    <语句n>
    endtask
    l 任务的调用及变量的传递
    任务的调用:
    <任务名>(端口1,端口2,…..,端口n);
    下面举例子说明怎么定义任务与调用任务:
    任务定义:
    task my_task;
    input a,b;
    output c;
    <语句>
    ….
    endtask
    任务调用:my_task(v,w,x);
    任务调用变量(v,w,x)和任务定义的I/O变量(a,b,c)之间是一一对应的,当任务启动时,由v和w传入的变量赋给了a和b,而当任务完成之后的输出又通过c赋给x,下面举一个具体程序来介绍:
    代码如下:
    165861-20170302091601907-1139394826.jpg
    165861-20170302091621376-1717043377.jpg
    165861-20170302091629126-1044190025.jpg

测试代码如下:
165861-20170302091647923-1242725676.jpg
165861-20170302091655907-1900165231.jpg

仿真波形图如下:
165861-20170302091710548-1617045231.jpg
165861-20170302091722188-180428428.jpg
当start信号变成高电平的时候,即当state状态由0跳变到1时,
调用load任务,把data_in的值寄存在save_data的同时状态机状态跳转到2,当状态跳转到2的时候,调用shift任务,把save_data的值往左移一位的同时状态机状态跳转到3,当状态跳转到3的时候,调用out任务,把save_data的值往data_out赋值的同时状态机状态跳转到0,仿真的波形跟设计的完全一样。

  1. function说明语句
    l 定义函数的语法:
    function<返回值的类型或范围>(函数名);
    <端口说明语句>
    <变量类型说明语句>
    begin
    <语句>
    ………
    end
    endfunction
    注意:<返回值的类型或范围>这一项是可选项,如缺省则返回值位一位寄存器类型数据
    l 举例说明
    下面举一个实际程序的例子,来说明一下function函数的实际定
    义与如何调用。
    程序代码如下:
    165861-20170302091750610-1689258038.jpg
    165861-20170302091803141-654306004.jpg
    165861-20170302091813204-1014760627.jpg
    165861-20170302091820516-1036395612.jpg

测试代码如下:
165861-20170302091843891-1879579891.jpg
165861-20170302091855626-976596728.jpg

仿真波形图如下:
165861-20170302091919095-665972912.jpg
165861-20170302091932110-604181736.jpg
165861-20170302091940641-460959647.jpg

当start信号变成高电平的时候,即当state状态有0跳变到1时,调用load_data(data_in)函数,把data_in的值寄存在save_data的同时状态机状态跳转到2,当状态跳转到2的时候,调用shift(save_data)函数,把save_data的值往左移一位的同时状态机状态跳转到3,当状态跳转到3的时候,调用load_data(save_data)函数,把save_data的值往data_out赋值的同时状态机状态跳转到0,仿真的波形跟设计的完全一样。
此文章为原创出自 V3学院 www.v3edu.org

posted on 2017-03-02 09:20 老凯 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/laokai/p/6488866.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TaskFunction_t是一个函数指针类型,它指向一个参数为void指针的函数函数返回类型为void。\[3\]在任务创建函数中,需要传入一个TaskFunction_t类型的参数,用于指定任务的入口函数。这个入口函数会在任务创建后被调用,并执行任务的具体逻辑。 #### 引用[.reference_title] - *1* [源码分析之任务创建](https://blog.csdn.net/qq_41890114/article/details/121132108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [02_FreeRTOS内核实现---任务定义任务切换](https://blog.csdn.net/qq_70244454/article/details/125823771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FreeRTOS任务函数函数指针](https://blog.csdn.net/ssssadw/article/details/111147256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值