小编con*_*sed的帖子

oververlow上的C unsigned char意外行为

我正在寻找一个传统的嵌入式项目,其中包含用于16位MCU的微芯片C30编译器.有一种预期的情况,索引从0xFF回绕,我认为这是预定义的行为.然而,//sad :(当我期望最终快乐时,下面的代码总是抛弃我.

unsigned char index = 0xFF;
unsigned char check = 0x02;

if(check == index +3){
    //happy!
}else{
    //sad :(
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我专门将它投射到unsigned char:

unsigned char index = 0xFF;
unsigned char check = 0x02;

if(check == (unsigned char) index +3){
    //happy!
}else{
    //sad :(
}
Run Code Online (Sandbox Code Playgroud)

它工作,我最终在//happy!所以我错过了什么?这只是编译器依赖的行为吗?

c

6
推荐指数
1
解决办法
111
查看次数

C使用#define指向或别名功能

如果我可以使用#define指向一个函数,我有点困惑.我有一个编解码器/ DSP谁的工具自动生成这样的代码页:

SIGMA_WRITE_REGISTER(address, data, length);
SIGMA_WRITE_REGISTER(address, data, length);
SIGMA_WRITE_REGISTER(address, data, length);
....
Run Code Online (Sandbox Code Playgroud)

然后在另一个.h文件中他们这样做:

    #define SIGMA_WRITE_REGISTER( address, data, length ) {
/*TODO: implement macro or define as function*/}
Run Code Online (Sandbox Code Playgroud)

这对于编写寄存器没有任何帮助.这很好,虽然为我的micro编写了一些代码,通过I2C编写寄存器,这似乎是有效的.现在我不想只将该代码粘贴到上面的定义中,并让它实例化1000次.我希望我可以使用is define作为我的函数的别名?

就像是:

#define SIGMA_WRITE_REGISTER(address, data, length) { my_i2_c_func(address, data, length)}
Run Code Online (Sandbox Code Playgroud)

我尝试了这样的东西并且编译了,我不太确定它是否正常工作.这是一件有效的事情,还是我在咆哮错误的树?

c embedded

5
推荐指数
1
解决办法
2459
查看次数

这组c演员是多么疯狂

我正在看这个开源启动加载器,我看到了这行代码.最后一行发生了什么?是某种指向函数的指针,是否转换为地址?

    uint8_t ret = init_api();
    uint16_t ptr;
    ptr = PGM_READ_WORD(JUMP_TABLE_INDEX(6));

    ret = ( (uint8_t(*)(uint32_t, uint8_t *, uint8_t)) ptr )(addr, data, erase);
Run Code Online (Sandbox Code Playgroud)

c casting

5
推荐指数
1
解决办法
84
查看次数

正确的python方式来清除bytearray

我想念memset.我在一个类中有一个帧缓冲区,它有一些来自其他操作的数据,现在我想将该帧缓冲区中的所有内容清除为0x00或0xFF.我没有在文档中看到明确的方法,有一个zfill方法可能有效.我想过再次调用字节数组的init方法,但想知道这是否会导致我在路上遇到一些内存问题.

我正在使用python 2.7.

python bytearray

5
推荐指数
2
解决办法
5021
查看次数

陌生的C速记{}

我继承了一些代码,它在调用时有一个这样的格式.要清楚一些函数定义在这样的地方:

void some_function(int a, int b, int c){
     printf("hi there\n");
}
Run Code Online (Sandbox Code Playgroud)

然后它在主代码中被调用如下:

some_function(2, 3, 4);
{
       x = 1200;
       another_function(&x);
}
Run Code Online (Sandbox Code Playgroud)

以上只是简短的说法:

if(some_function(2,3,4) == 1)
{
    //then execute code found here?
}
Run Code Online (Sandbox Code Playgroud)

我之前从未见过那个,我觉得因为some_function是void而且永远不会返回一个值,它永远不会运行括号中的代码?

c syntax

1
推荐指数
1
解决办法
81
查看次数

标签 统计

c ×4

bytearray ×1

casting ×1

embedded ×1

python ×1

syntax ×1