打印

哪位兄弟,有没有遇到这样的情况!

[复制链接]
2153|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luowei2651|  楼主 | 2009-1-9 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是C8051F340的芯片,不知道为什么,程序才18K,RAM也才400字节,不知道为什么就不能在switch中的case加程序了,一加,整个程序都不跑了,但能写函数,不知道什么原因,知道的请指教指教,帮帮忙,谢谢拉!

相关帖子

沙发
hab2000| | 2009-1-9 15:05 | 只看该作者

这是让大伙猜谜语呢?

谁能猜到?
问问题既要简洁,也要清楚,这样谁能猜啊?
要我猜:CASE太多了!

使用特权

评论回复
板凳
luowei2651|  楼主 | 2009-1-9 15:49 | 只看该作者

ls

我也不知道怎样才能说清楚了。
 我 把大致的代码贴一下吧。
main()
{
   cpu_Init();    
   lcd_init();//LCD初始化
   flash_set();//flash设置
 while(1)
 {
  key_shao();///键盘扫描
  if(KEY!=0) //有键按下
  {
   Deal_Fact()///问题就出在这里面
    }
     }
       }
void Deal_Fact()
{
switch(menu_flag)
{
case 0:
  .
  .            //就是不能在这中间增加case语句了
  .
case 100: menu_90();break
default:break;
  }
  }

使用特权

评论回复
地板
gw29| | 2009-1-9 17:45 | 只看该作者

re

老兄 编程风格不怎么好吧  或许是复制到这里后乱码了
你应该说明清楚  是怎么个不跑法  你加的何程序   
Deal_Fact()///问题就出在这里面
少了分号  能编译吗

还有  menu_flag  定义类型是什么  

使用特权

评论回复
5
luowei2651|  楼主 | 2009-1-9 17:59 | 只看该作者

ls

程序那么多,我没法把它全放出来,只把其中的几个关键的地方复制出来,少个";"号,那是我没复制好,不好意思,编译能通过,就是下载程序后,LCD没显示,程序跑一个语句就,开始复位了,假如没增加case,一切都能正常运行.

使用特权

评论回复
6
草履虫| | 2009-1-10 01:08 | 只看该作者

可能的原因如下

在C51里,用switch,好像翻译成汇编是CJNZ的语句,他是一条一条比的。最多能够跳256字节的地址,如果太多当然就不行了。

使用特权

评论回复
7
ayb_ice| | 2009-1-10 10:39 | 只看该作者

LS不要误导观众了

编译器自动依据CASE的数量和数值而编译,可能是CJNE,也可能是查表,或散转...
你这CASE算什么多,我的项目有多个200个左右的CASE,不要轻易怀疑KEIL,MCU等,还是从程序上下功夫,像这种问题调试是解决问题之道...

使用特权

评论回复
8
mohanwei| | 2009-1-10 12:01 | 只看该作者

我以前的程序最多用过近270个case都没有问题,不过

case后面的常数一定要用宏或者枚举,不然以后维护要搞死人的……
我一般用的就是:
enum TestEnum
{
    _ReadSensor,
    _WriteLed,
    _ClickKeyEnter,
    _ClickKeyUp,
    _ClickKeyDown,
    _ClickKeyLeft,
    _ClickKeyRight,
    _ReadParameter,
    ……
};

switch(Cmd)
{
    case: _ReadSensor//
    {
        ReadSensor();
        break;
    }
    case: _WriteLed//
    {
        WriteLed(Data);
        break;
    }
    ……
}
}

使用特权

评论回复
9
hotpower| | 2009-1-10 12:12 | 只看该作者

把strncpy(rx_p1+17,&yan_menu[0],3);换成_nop()先试试

使用特权

评论回复
10
zhaoyu2005| | 2009-1-12 09:08 | 只看该作者

是不是忘了喂狗了?

饿了就叫

使用特权

评论回复
11
starlite_jason| | 2009-1-12 09:21 | 只看该作者

估计是狗的问题

使用特权

评论回复
12
joson| | 2009-1-12 12:54 | 只看该作者

同意LS

使用特权

评论回复
13
luowei2651|  楼主 | 2009-1-13 12:16 | 只看该作者

先谢谢各位拉

我先去试下,我这个项目软件本来已经做完了,这个问题当时实在解决不了,我是在SWITCH {}前加了个IF语句代替了,就能正常运行,现在快过年了没什么事,想解决下这个问题,应该不是喂狗的问题吧,我都把狗给关闭拉,不知道是不是因为嵌套switch的原因,
  相当于
        switch()
          {case 1:
            case 2:{ lcd_view(); }
           ........case 100:
             }
  void lcd_view()
          {switch()
          {case 1:
            case 2:{tc_OK();  }
           ........case 100:
             }}
  void tc_OK()
          {switch()
          {case 1:
            case 2:{  }
           ........case 100:
             }}

就是大概相当于上面的情形.先谢谢各位拉

使用特权

评论回复
14
vwwj| | 2009-1-13 18:56 | 只看该作者

如图

使用特权

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

本版积分规则

12

主题

77

帖子

0

粉丝