打印
[C语言]

请教,资源紧张的情况下用什么样的程序结构?

[复制链接]
楼主: winter1999
手机看帖
扫描二维码
随时随地手机跟帖
21
winter1999|  楼主 | 2014-10-16 11:05 | 只看该作者 回帖奖励 |倒序浏览
zhaoyu2005 发表于 2014-10-16 10:36
你这不是自找麻烦么,有硬件资源的当然硬件资源优先,没有的才模拟。比如595你用硬件spi,发送数据不用管 ...

没办法,我拿到的硬件就是这样子,现在只能在这个基础上想办法

使用特权

评论回复
22
ayb_ice| | 2014-10-16 11:23 | 只看该作者
winter1999 发表于 2014-10-16 11:03
嗯,关键是有些数据计算很耗时。

那优化计算算法,不行就用汇编。。。

使用特权

评论回复
23
winter1999|  楼主 | 2014-10-16 11:28 | 只看该作者
ayb_ice 发表于 2014-10-16 11:23
那优化计算算法,不行就用汇编。。。

是啊。现在就进行这个过程,痛苦啊。谢谢

使用特权

评论回复
24
dirtwillfly| | 2014-10-16 11:31 | 只看该作者
升级下单片机吧。以MEGA8的价格,有好多可以替换的,片上资源更多

使用特权

评论回复
25
winter1999|  楼主 | 2014-10-16 11:42 | 只看该作者
dirtwillfly 发表于 2014-10-16 11:31
升级下单片机吧。以MEGA8的价格,有好多可以替换的,片上资源更多

是说呢,如果能换我肯定上32bit的,我里面好多运算都是32bit的乘除法。死的心都有啊

使用特权

评论回复
26
xiongxiao| | 2014-10-16 11:46 | 只看该作者
有限的资源想做无限的事情!坑,是考验的时候了!!

使用特权

评论回复
27
FAQ| | 2014-10-16 12:21 | 只看该作者
好好理理思路吧,办法总是有的。

使用特权

评论回复
28
chen_jhhb| | 2014-10-16 15:10 | 只看该作者
减少定时中断的时间,把任务A放在中断外面,根据中断的次数来执行。合理安排所有任务的时间。

使用特权

评论回复
29
ayb_ice| | 2014-10-16 15:30 | 只看该作者
chen_jhhb 发表于 2014-10-16 15:10
减少定时中断的时间,把任务A放在中断外面,根据中断的次数来执行。合理安排所有任务的时间。 ...

这不可能实现的,

你一次大循环不可能在500US以内时间执行完的

使用特权

评论回复
30
m564522634| | 2014-10-16 16:34 | 只看该作者
开双定时器,任务A当独占一个。另外一个作系统时钟,任务A在单独一个定时器中执行,系统时钟管理其他ms级的任务延时。应该就不会有什么问题了吧。

使用特权

评论回复
31
m564522634| | 2014-10-16 16:39 | 只看该作者
m564522634 发表于 2014-10-16 16:34
开双定时器,任务A当独占一个。另外一个作系统时钟,任务A在单独一个定时器中执行,系统时钟管理其他ms级的 ...

主程序里的延时都做成非阻塞的,时间不到不去等,直接执行其他 的程序 。系统定时器的优先级高于A定时器的优先级,但系统定时器中什么也不要做只做timecount++;

使用特权

评论回复
32
zzyfidy| | 2014-10-16 17:04 | 只看该作者
挺难的,没有可靠的招。

使用特权

评论回复
33
winter1999|  楼主 | 2014-10-16 18:26 | 只看该作者
m564522634 发表于 2014-10-16 16:39
主程序里的延时都做成非阻塞的,时间不到不去等,直接执行其他 的程序 。系统定时器的优先级高于A定时器 ...

主程序里是非阻塞的。目前我只开了一个500us的定时器,用剩下的150us做timecount++,不知这样和开两个定时器哪个好些呢?

使用特权

评论回复
34
gnaijnaoul| | 2014-10-16 20:30 | 只看该作者
把工作频率提高一倍!

使用特权

评论回复
35
zwz7219| | 2014-10-17 14:18 | 只看该作者
既然别人已经在这堆硬件上做过了,那肯定是有解的,8位机,无论多难,也难不到哪去

使用特权

评论回复
36
xlsbz| | 2014-10-17 14:54 | 只看该作者
我觉得吧 楼主最好把需求说得再具体一点。

觉得不可能需要那么强的实时性。

先搞清楚需求。

感觉无解。很难办。即便是STM32都不容易。

所以我觉得是需求有问题

使用特权

评论回复
37
xlsbz| | 2014-10-17 14:56 | 只看该作者
比如对于第二条  就可以不写出来 很容易实现的 没必要粘贴出来。

其余的 要说得更细致一点

使用特权

评论回复
38
xlsbz| | 2014-10-17 14:58 | 只看该作者
捕捉中断 是周期性的么?

还是非常偶尔的???比如一天才一次??还是大概1秒一次?

使用特权

评论回复
39
winter1999|  楼主 | 2014-10-17 15:49 | 只看该作者
xlsbz 发表于 2014-10-17 14:58
捕捉中断 是周期性的么?

还是非常偶尔的???比如一天才一次??还是大概1秒一次?

谢谢回复。
捕捉不是周期性的,有时几十us有时几百us甚至ms级别,不定。
----
现在我基本完成了功能,就是觉得我目前的处理方式(前后台)不是很顺,
特别是需要相对准确的定时的时候,比如我每隔20ms串口要发一次数据。
我中断计时到了20ms设定标志位,但主程序里查到这个标志位的时候往往超过了20ms。
就是主程序里的一些函数太耗时,我一直在想办法拆分成可靠的状态机,但进展不大,所以头痛中。

使用特权

评论回复
40
coody| | 2014-10-17 18:56 | 只看该作者
MEGA8,8M晶振。
单是这个“1、任务A需要每500us调用一次,任务执行周期350us,无法分解。”
就占掉CPU 70%的时间了,别的程序还要那么快,别以为M8是神器,这货速度没你想得那么快。
跑16M还好办。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则