task3

 

Task 3

  1. 双条件查找

https://jingyan.baidu.com/article/fd8044faf87ea55031137af6.html

作业

(请下载提供的数据集《DataAnalyst》) 链接:https://pan.baidu.com/s/1sCaFkQ9DoxYE-FyiY2ewPA  提取码:f55z 

  1. 用vlookup函数 查找以下公司的 companyId | companyFullName | |:----| | 上海云贝网络科技有限公司 | | 携程计算机技术(上海)有限公司 | | 浙江康健绿线网络技术有限公司 | | 久亿财富(北京)投资有限公司 | | 杭州木瓜科技有限公司 | | 思特沃克软件技术(成都)有限公司 | | 北京金山云网络技术有限公司 |

用match和index函数实现第一题的功能

用match和index函数查找以下id对应的公司名称,注意id是横向排列的 | companyId | 127200 | 151079 | 22225 | |----|----|----|----|

注意这里横向展开,所以要绝对引用,要不然会出错!!!

请根据companyId和postionId两个条件查找对应的工资水平 | companyId | positionId | salary | |:----|:----|:----| | 62 | 938038 | | | 1575 | 1157620 | | | 157392 | 2574696 | |

请思考,是否会存在相同的公司id和职位di对应多种工资水平,如果有请查找出来。 并思考,如果存在多种的情况,目前的公式还能不能用?

 

 

这段代码主要用于定义任务3的相关参数和数据结构,以下是对代码各部分含义的详细分析: ### 代码含义分析 1. **`#define TASK3_DEPTH_TYPE 128`**: - 这是一个宏定义,将 `TASK3_DEPTH_TYPE` 定义为 128。在任务创建时,这个值通常用于指定任务栈的深度,即任务栈可以容纳的栈帧数量。在后续代码中使用 `TASK3_DEPTH_TYPE` 可以提高代码的可读性和可维护性,如果需要修改任务栈深度,只需修改这个宏定义的值即可。 2. **`#define TASK3_PRIORITY 4`**: - 同样是一个宏定义,将 `TASK3_PRIORITY` 定义为 4。这个值用于指定任务3的优先级,在任务调度时,调度器会根据任务的优先级来决定哪个任务可以运行。优先级越高的任务越有可能被优先执行。 3. **`TaskHandle_t task3_handler;`**: - 定义了一个类型为 `TaskHandle_t` 的变量 `task3_handler`。`TaskHandle_t` 是一个任务句柄类型,用于唯一标识一个任务。在创建任务时,任务句柄会被返回,通过这个句柄可以对任务进行各种操作,如删除任务、挂起任务等。 4. **`StackType_t task3_stack[ TASK3_DEPTH_TYPE ];`**: - 定义了一个大小为 `TASK3_DEPTH_TYPE` 的数组 `task3_stack`,数组元素的类型为 `StackType_t`。这个数组用于作为任务3的栈空间,任务在运行过程中会使用这个栈来保存局部变量、函数调用信息等。 5. **`StaticTask_t task3_tcb;`**: - 定义了一个类型为 `StaticTask_t` 的变量 `task3_tcb`。`StaticTask_t` 是任务控制块(Task Control Block,TCB)的类型,任务控制块用于保存任务的状态信息,如任务的优先级、栈指针、任务状态等。在使用静态内存分配方式创建任务时,需要提供一个静态的任务控制块。 ### 优化建议 1. **使用常量代替宏定义**: - 宏定义在预处理阶段进行简单的文本替换,可能会带来一些潜在的问题,如宏名冲突、缺乏类型检查等。可以使用 `const` 关键字定义常量来代替宏定义,提高代码的安全性和可读性。 ```c const uint32_t TASK3_DEPTH_TYPE = 128; const uint32_t TASK3_PRIORITY = 4; ``` 2. **添加注释**: - 在代码中添加详细的注释可以提高代码的可读性,特别是对于其他开发者来说,更容易理解代码的意图。 ```c // 定义任务3的栈深度 const uint32_t TASK3_DEPTH_TYPE = 128; // 定义任务3的优先级 const uint32_t TASK3_PRIORITY = 4; // 任务3的句柄,用于操作任务 TaskHandle_t task3_handler; // 任务3的栈空间 StackType_t task3_stack[ TASK3_DEPTH_TYPE ]; // 任务3的任务控制块 StaticTask_t task3_tcb; ``` 3. **封装任务创建逻辑**: - 如果有多个任务需要创建,可以将任务创建的逻辑封装成一个函数,减少代码的重复。 ```c void create_task3(void) { const uint32_t TASK3_DEPTH_TYPE = 128; const uint32_t TASK3_PRIORITY = 4; TaskHandle_t task3_handler; StackType_t task3_stack[ TASK3_DEPTH_TYPE ]; StaticTask_t task3_tcb; // 创建任务3 xTaskCreateStatic( (TaskFunction_t)Task3_Entry, // 任务入口函数 (char*)"Task3", // 任务名称 TASK3_DEPTH_TYPE, // 任务栈深度 (void*)NULL, // 任务参数 TASK3_PRIORITY, // 任务优先级 task3_stack, // 任务栈 &task3_tcb // 任务控制块 ); } ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值