找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1700|回复: 11
打印 上一主题 下一主题
收起左侧

关于单片机中使用多个计算公式,并进行数组转换的问题

[复制链接]
跳转到指定楼层
楼主
ID:446775 发表于 2020-10-30 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在在单片机中的某一个数组的数据需要使用到两个公式来完成,这一个数组的数据是这两个公式把其它三个数组的数据代入进去所求出来的,这两个公式也是较为复杂,涉及到积分运算,在写程序时,是分别将这两个公式进行拆分来进行运算的,那么问题来了,在这些复杂的运算中间,需要设置时间间隔吗?如果需要该怎么设置时间间隔呢?还是说一步紧挨一步的执行?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:451718 发表于 2020-10-31 12:55 | 只看该作者
在运算前后,拿一个端口做翻转,用示波器看一下就知道了。  你自认为的复杂运算,交给芯片,可能是瞬间的事,反而有些你可以构思的循环运算,交给芯片,却是耗时较长的运算。  
回复

使用道具 举报

板凳
ID:837937 发表于 2020-11-2 20:22 | 只看该作者
应该可以直接计算,不需要设置间隔,单片机速度很快
回复

使用道具 举报

地板
ID:446775 发表于 2020-11-6 09:41 | 只看该作者
robinsonlin 发表于 2020-10-31 12:55
在运算前后,拿一个端口做翻转,用示波器看一下就知道了。  你自认为的复杂运算,交给芯片,可能是瞬间的事 ...

嗯嗯,只是我这里目前没有示波器可以用,还有就是如果说在计算的过程中,比如我的定时器中断时间比较短,而这个计算又比较复杂肯定要比这个定时器的时间要长很多的话,那么会有频繁进入定时器中断的情况发生,在这种情况下,是不是就可以在计算的时候把中断关掉,而等计算完成后再打开中断呢?
回复

使用道具 举报

5#
ID:451718 发表于 2020-11-6 15:59 | 只看该作者
karolyte 发表于 2020-11-6 09:41
嗯嗯,只是我这里目前没有示波器可以用,还有就是如果说在计算的过程中,比如我的定时器中断时间比较短, ...

你如何能够知道某一次的运算时长会超过 中断的处理时长?   如果这种情况经常发生,你芯片的运算一直处在中断中,你的主程序也无法运行的。
我的处理方法是,在中断中放标志位,在主程序中检测标志位的变化,然后判断是否要执行运行。  所有中断的处理时长,控制在中断时长的10%以内,是比较理想的
回复

使用道具 举报

6#
ID:446775 发表于 2020-11-12 22:20 | 只看该作者
robinsonlin 发表于 2020-11-6 15:59
你如何能够知道某一次的运算时长会超过 中断的处理时长?   如果这种情况经常发生,你芯片的运算一直处在 ...

嗯,按您这么说的话,我这个好像也不是运算时长超过了中断的处理时长,因为我的程序还是能够正常运行的,就是在执行这个运算时并不是这边按键按下,那边立马就出结果,而是等个几十秒钟才会出结果,另外您上面说的在主程序钟检测标志位的变化,然后判断是否要执行运行,这个运行指的就时这个运算吧?是不是就是说,如果这个标志位的变化满足条件了,那么就执行这个运算呢?但是我这个运算是放在一个按键的动作里了,那么问题就来了,我的按键扫描是放在中断服务函数里的,然后按键动作是放在主函数里的,那如果我添加一个判断标志变化,我执行的运行是不是应该是这个按键动作函数呢?
回复

使用道具 举报

7#
ID:446775 发表于 2020-11-14 14:13 | 只看该作者
robinsonlin 发表于 2020-11-6 15:59
你如何能够知道某一次的运算时长会超过 中断的处理时长?   如果这种情况经常发生,你芯片的运算一直处在 ...

这里要执行的运行,你是放在主函数里的while(1)里了吗?
回复

使用道具 举报

8#
ID:446775 发表于 2020-11-14 15:41 | 只看该作者
robinsonlin 发表于 2020-11-6 15:59
你如何能够知道某一次的运算时长会超过 中断的处理时长?   如果这种情况经常发生,你芯片的运算一直处在 ...

我不确定这个某一次的运算时长超过了中断的处理时长,也不知道如何获取这个运算的时长,只是个人的推断,就是说这个运算的时间比较长才出来结果,但是我知道我这个推断不科学,需要验证之后才能说,所以在这里发个帖子请求您的帮助
回复

使用道具 举报

9#
ID:451718 发表于 2020-11-14 16:34 | 只看该作者
karolyte 发表于 2020-11-14 15:41
我不确定这个某一次的运算时长超过了中断的处理时长,也不知道如何获取这个运算的时长,只是个人的推断, ...

按键检测可以放在定时器中断里面判断,但是要累积判断。因为按键的最短有效时长公认为20ms,你总不能在中断里面等待20ms吧。所以,定义一个变量,进中断后判断按键状态,如果有效就++,如果无效就归零。直到加到某个值,比如100,才给按键标志赋值。      在主循环中,也就是while循环中处理主要的运算就好了。
回复

使用道具 举报

10#
ID:446775 发表于 2020-11-14 16:49 | 只看该作者
robinsonlin 发表于 2020-11-14 16:34
按键检测可以放在定时器中断里面判断,但是要累积判断。因为按键的最短有效时长公认为20ms,你总不能在中 ...

师傅,您说的这个是不是针对与单个键盘的操作,像我这个,使用的是矩阵键盘,我把矩阵键盘的检测都集成为一个函数了,然后放在定时器中断里执行,然后矩阵键盘的驱动函数我放在主循环中了,就是键盘一直在被驱动,而矩阵键盘的动作函数又是被驱动函数所调用的,基本上跟你说的while循环中处理主要的运算差不多吧
回复

使用道具 举报

11#
ID:451718 发表于 2020-11-16 14:59 | 只看该作者
karolyte 发表于 2020-11-14 16:49
师傅,您说的这个是不是针对与单个键盘的操作,像我这个,使用的是矩阵键盘,我把矩阵键盘的检测都集成为 ...

http://www.51hei.com/bbs/dpj-161402-1.html
回复

使用道具 举报

12#
ID:446775 发表于 2020-11-18 16:46 | 只看该作者
robinsonlin 发表于 2020-11-16 14:59
http://www.51hei.com/bbs/dpj-161402-1.html

你所说的运行效率具体指的是什么?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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