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

[复制链接]
 楼主| winter1999 发表于 2014-10-16 11:05 | 显示全部楼层
zhaoyu2005 发表于 2014-10-16 10:36
你这不是自找麻烦么,有硬件资源的当然硬件资源优先,没有的才模拟。比如595你用硬件spi,发送数据不用管 ...

没办法,我拿到的硬件就是这样子,现在只能在这个基础上想办法
ayb_ice 发表于 2014-10-16 11:23 | 显示全部楼层
winter1999 发表于 2014-10-16 11:03
嗯,关键是有些数据计算很耗时。

那优化计算算法,不行就用汇编。。。
 楼主| winter1999 发表于 2014-10-16 11:28 | 显示全部楼层
ayb_ice 发表于 2014-10-16 11:23
那优化计算算法,不行就用汇编。。。

是啊。现在就进行这个过程,痛苦啊。谢谢
dirtwillfly 发表于 2014-10-16 11:31 | 显示全部楼层
升级下单片机吧。以MEGA8的价格,有好多可以替换的,片上资源更多
 楼主| winter1999 发表于 2014-10-16 11:42 | 显示全部楼层
dirtwillfly 发表于 2014-10-16 11:31
升级下单片机吧。以MEGA8的价格,有好多可以替换的,片上资源更多

是说呢,如果能换我肯定上32bit的,我里面好多运算都是32bit的乘除法。死的心都有啊
xiongxiao 发表于 2014-10-16 11:46 | 显示全部楼层
有限的资源想做无限的事情!坑,是考验的时候了!!
FAQ 发表于 2014-10-16 12:21 | 显示全部楼层
好好理理思路吧,办法总是有的。
chen_jhhb 发表于 2014-10-16 15:10 | 显示全部楼层
减少定时中断的时间,把任务A放在中断外面,根据中断的次数来执行。合理安排所有任务的时间。
ayb_ice 发表于 2014-10-16 15:30 | 显示全部楼层
chen_jhhb 发表于 2014-10-16 15:10
减少定时中断的时间,把任务A放在中断外面,根据中断的次数来执行。合理安排所有任务的时间。 ...

这不可能实现的,

你一次大循环不可能在500US以内时间执行完的
m564522634 发表于 2014-10-16 16:34 | 显示全部楼层
开双定时器,任务A当独占一个。另外一个作系统时钟,任务A在单独一个定时器中执行,系统时钟管理其他ms级的任务延时。应该就不会有什么问题了吧。
m564522634 发表于 2014-10-16 16:39 | 显示全部楼层
m564522634 发表于 2014-10-16 16:34
开双定时器,任务A当独占一个。另外一个作系统时钟,任务A在单独一个定时器中执行,系统时钟管理其他ms级的 ...

主程序里的延时都做成非阻塞的,时间不到不去等,直接执行其他 的程序 。系统定时器的优先级高于A定时器的优先级,但系统定时器中什么也不要做只做timecount++;
zzyfidy 发表于 2014-10-16 17:04 | 显示全部楼层
挺难的,没有可靠的招。
 楼主| winter1999 发表于 2014-10-16 18:26 | 显示全部楼层
m564522634 发表于 2014-10-16 16:39
主程序里的延时都做成非阻塞的,时间不到不去等,直接执行其他 的程序 。系统定时器的优先级高于A定时器 ...

主程序里是非阻塞的。目前我只开了一个500us的定时器,用剩下的150us做timecount++,不知这样和开两个定时器哪个好些呢?
gnaijnaoul 发表于 2014-10-16 20:30 | 显示全部楼层
把工作频率提高一倍!
zwz7219 发表于 2014-10-17 14:18 | 显示全部楼层
既然别人已经在这堆硬件上做过了,那肯定是有解的,8位机,无论多难,也难不到哪去
xlsbz 发表于 2014-10-17 14:54 | 显示全部楼层
我觉得吧 楼主最好把需求说得再具体一点。

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

先搞清楚需求。

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

所以我觉得是需求有问题
xlsbz 发表于 2014-10-17 14:56 | 显示全部楼层
比如对于第二条  就可以不写出来 很容易实现的 没必要粘贴出来。

其余的 要说得更细致一点
xlsbz 发表于 2014-10-17 14:58 | 显示全部楼层
捕捉中断 是周期性的么?

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

 楼主| winter1999 发表于 2014-10-17 15:49 | 显示全部楼层
xlsbz 发表于 2014-10-17 14:58
捕捉中断 是周期性的么?

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

谢谢回复。
捕捉不是周期性的,有时几十us有时几百us甚至ms级别,不定。
----
现在我基本完成了功能,就是觉得我目前的处理方式(前后台)不是很顺,
特别是需要相对准确的定时的时候,比如我每隔20ms串口要发一次数据。
我中断计时到了20ms设定标志位,但主程序里查到这个标志位的时候往往超过了20ms。
就是主程序里的一些函数太耗时,我一直在想办法拆分成可靠的状态机,但进展不大,所以头痛中。
coody 发表于 2014-10-17 18:56 | 显示全部楼层
MEGA8,8M晶振。
单是这个“1、任务A需要每500us调用一次,任务执行周期350us,无法分解。”
就占掉CPU 70%的时间了,别的程序还要那么快,别以为M8是神器,这货速度没你想得那么快。
跑16M还好办。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部