- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C30 和 MPLAB X 试验一个奇怪的问题,我有这段代码:
unsigned char mode;
switch(mode){ // Eligo el modo que se envio a traves del UART
case FRECUENCIMETER:
vFrecuencimetro();
break;
case LC_METER:
vLC_Meter();
break;
case VOLTMETER:
break;
case 'L':
vLogicAnalizer();
break;
}
if(mode == 'L'){
vLogicAnalizer();
}
当模式等于“L”字符时,开关不会按应有的方式进入“case 'L'”,但会进入 if 语句。但是当我以这种方式更改代码时:
unsigned char mode;
switch(mode){
case 'L':
vLogicAnalizer();
break;
}
if(mode == 'L'){
vLogicAnalizer();
}
它完美地进入 switch 语句。其他情况定义如下:
#define FRECUENCIMETER 0
#define LC_METER 1
#define VOLTMETER 3
我使用的是 C30 编译器 v3.31 和 MPLAB X v1.41。希望你能帮助我。
谢谢
<小时/>编辑:
好的,根据答案和评论,我已经这样更改了我的代码:
char mode;
#define FRECUENCIMETER 0
#define LC_METER 1
#define LOGIC_ANALIZER 76 // 'L'
#define VOLTMETER 3
#define NO_MODE 4
switch(mode){ // Eligo el modo que se envio a traves del UART
case FRECUENCIMETER:
vFrecuencimetro();
break;
case LC_METER:
vLC_Meter();
break;
case VOLTMETER:
break;
case LOGIC_ANALIZER:
vLogicAnalizer();
break;
}
如果在 switch 语句之前我写:
mode = 'L';
switch 语句工作得很好,但是当我使用函数 ReadUART1() 从 UART 得到一个“L”时,该函数返回无符号整数:
unsigned int ReadUART1(void);
根据我的调试器,它返回“L”,对应于 unsigned int 中的数字 76,switch 语句不起作用,但模式仍然是“L”。即使我将模式更改为 unsigned int 以与该函数相同,它也不起作用。我想我必须使用 if() 语句。
最佳答案
已解决。我改变了:
unsigned int mode;
致:
volatile unsigned int mode;
或者与编译器优化级别 0 一起使用:
unsigned int mode;
感谢您的帮助。
关于c - 使用 C30 和 MPLAB X 的 switch 语句的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146959/
我用 PIC 汇编语言编写了一些测试代码,我无意在实际的 PIC MCU 上运行这些代码,而是打算生成跟踪文件,以便以后可以使用单独的工具对其进行分析。因此,我需要一种方法来永久停止特定代码点中的模拟
我在 Windows(XC32 v1.40 编译器)上使用带有 PIC32 的 MPLAB X (3.26)。作为审查的一部分,我正在尝试使用夹板对某人的代码进行静态代码分析。我已经对大部分编译器定义
我在 linux 上使用 MPLABX IPE 1.95。出于某种原因,程序员决定使主窗口不可调整大小。 所以不可能正确地看到内存 View 。如果内存 View 没有打开,我什至看不到输出窗口的底部
在我的代码中,我添加了带有版本号的时间戳。 const char prog_id[] = { __TIME__ " " __DATE__ "Foo project V1.3" } ; 输出: 11:0
我尝试为 PIC32 构建 Microchip USB 协议(protocol)栈文件,但 MPLAB X IDE 给出错误,提示构建失败。 以下是构建时的错误。 系统找不到指定的路径。make[2]
我正在 MikroC PRO for PIC v6.0.0 中编写代码,我想使用 PICKit3 和 MPLab 对其进行调试。我正在尝试使用 MPLab v8.92 和 MPLabX v2.05。当
Microchip PIC MPLAB (MCC18) 编译器将其内存分段为 256 个 block (0x100)。 如何创建大于 256 字节的数组? char buffer[256]; 为了达到
我收到了这个消息,这很烦人。有人能看到错误吗?并知道如何解决它吗? warning: (373) implicit signed to unsigned conversion unsigned cha
我正在解析一个用逗号分隔的字符串并打印这些值,但由于某种原因,如果我在 MPLAB C 编译器上运行该代码,则该代码仅打印第一个值。但是,如果我在 Codeblocks 上运行此代码,它会打印出所有值
以下代码在 CodeBlocks 编译器上运行良好,但在 MPLAB C18 编译器上我没有得到相同的结果。我正在使用 PIC18 微 Controller 。 代码 int d[6];
在 MPLAB IDE 中,数据类型的大小是多少(int、unsigned int、float、unsigned float, char...)? 最佳答案 如果不知道要为哪个 CPU 编译代码,这很
它似乎不像其他可识别的关键字那样突出显示,但我没有收到编译器错误。 有没有办法检查程序集?我不在 unix 环境中,所以我不能执行 objdump,但是有没有其他方法可以查看适当的文件? 谢谢! 最佳
我有主文件: #include "modbus.h" void main(void) { modbus_frame_t frame; // (...) // ERROR O
我有一个混合 C 和汇编的 PIC18F25K50 项目;我想做的大部分事情我都可以在 Assembly 中轻松管理(并且必须提高效率),但是我更关心开发的易用性的某些部分使用 C。我实际上有几个,我
我正在使用带有 PIC18 的 MPLAB C18 编译器。我的问题是,即使此代码在 CodeBlocks 上 100% 有效,我也无法打印所有值。我花了 3 个多小时在谷歌上搜索这个问题,但我不明白
我最近开始使用 MPLAB,但对于使用 Eclipse 和 VS IDE 的人来说,它非常有限。您知道任何免费的 IDE 或如何将 Ecplise 或 Netbeans 配置为 PIC 开发吗? 谢谢
我在 mplab 编译器用户指南中搜索此内容,但没有找到任何内容。我在这里问它是为了确认我不是盲人或其他什么: GCC 编译器提供了一些非常有趣和有用的内置函数,例如 __builtin_consta
我编写了一个使用 Timer0 中断的程序。 我似乎无法编译我的代码,第 14 行出现错误,声明中没有标识符。 这是完整的代码: #include #define _XTAL_FREQ 4000000
我开发了这个程序,该程序应该在 LCD 的顶行显示 1-99 之间的所有奇数,每次迭代之间有 0.5 秒的延迟。 但是,当我运行下面的代码时,我的输出只是“13”然后是“133”,我很困惑为什么会这样
我正在使用带有 PIC16F628 的 velleman K8048 pic 程序板。几年前,我在使用 .asm 与该板/芯片之前成功进行了编程。 这次,我想学习使用C语言编程。我已经安装了MPLAB
我是一名优秀的程序员,十分优秀!