找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2861|回复: 5
收起左侧

关于FreeRTOS的us级延时和任务划分的问题分析

[复制链接]
ID:1001310 发表于 2022-6-2 10:05 | 显示全部楼层 |阅读模式
关于FreeRTOS小白提问:
1、FreeRTOS里面的时钟默认我看是设置成1ms(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )),
也就是1ms切换任务,那如果我要用I2C如何实现us级别的延时呢?
2、如果我找到了us级的延时,是否是读写i2C时程序循环等待i2C的时序,这和操作系统轮流使用CPU的思路对应不上呢?
3、如果我有这样的需求:读个i2c数据,根据数据PWM方式控制IO,再读i2C和AD,业务逻辑后输出DA、输出到串口数据、输出到I2C,我大致如何建任务呢?
回复

使用道具 举报

ID:808821 发表于 2022-6-2 15:32 | 显示全部楼层
iic通讯时 如果要使用us的延时函数 就要提前开启临界保护区  保证us延时函数正常工作
回复

使用道具 举报

ID:883242 发表于 2022-6-2 21:28 | 显示全部楼层
1)系统函数实现不了us级延迟,强行上us级tick会让单片机不堪重负。
2)思路对不上是次要的,重要的是实现功能。该舍弃什么不言而喻。
3)你到底要干什么,先弄清楚。具体实现细节放后面。
回复

使用道具 举报

ID:1026496 发表于 2022-6-2 21:39 | 显示全部楼层
一般很少用us级别的延时 最低的周期是1ms
回复

使用道具 举报

ID:883242 发表于 2022-6-2 22:09 | 显示全部楼层
yaoyao2022 发表于 2022-6-2 21:39
一般很少用us级别的延时 最低的周期是1ms

楼主的需求就必须要用us级延迟,需求大于一切。

除了发明IIC的NXP以外,其他厂家的IIC多多少少都有bug,软件模拟IIC才是正道,比如STM32F1 errata要求中断必须要最高优先级,或者DMA传输,这么宝贵的资源怎么可能给IIC这个不重要的peripheral呢?
回复

使用道具 举报

ID:123289 发表于 2022-6-6 11:23 | 显示全部楼层
需要楼主仔细规划时序!
首先在理论计算上要能通过。
必要时进入汇编,自己写最底层的时序软件。
你提出的这几个任务,相对还是比较好规划的,现在的51就能完成。
PWM:由模块自动完成,问题不大。如果自己用定时器去做,则要求优先级最高。但特别注意,中断服务程序必须短,越短越好,必须在此下功夫。
串口通讯:用中断完成,要点:中断服务程序中,只做数据收发,不要做数据分析。数据分析放在主程序中进行。
AD:用中断完成。要点:中断服务程序中,只做数据收发,不要做数据分析。数据分析放在主程序中进行。可利用定时器,定时标记采样起动标记,但起动命令在主程序中下达。
DA:需要写入的数据,事先在主程序中准备好……
IIC:它是异步带CLK通讯的,对脉冲的间隔要求不严,也即可以被其它中断打断,所以优先级可以放低一点。在时序,只要CLK符合IIC协议,基本上就可以了。例如,当DATA在数据线上准备好之后,早点读或迟点读入,都是可以的。再如,发出地址时,每个CLK移出一位地址,但CLK之间的间隔时间的要求是不严格的,也即,长一点短一点,都可以。
其它逻辑,正常进行。程序中尽可能不要用DELAY函数,尤其是中断服务程序中,禁用之。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表