习学发开 发表于 2020-3-13 20:47:27

开一贴专门答疑C语言问题

有什么各种C语言的问题尽管问

尽量解答。

cheungman 发表于 2020-3-13 20:59:14

vscode工程里如果有.a静态库, 编译的时候提示"Fatal Error: cannot open source file" 怎么解决呢

wye11083 发表于 2020-3-13 21:06:59

cheungman 发表于 2020-3-13 20:59
vscode工程里如果有.a静态库, 编译的时候提示"Fatal Error: cannot open source file" 怎么解决呢 ...

你这不是c语言问题。你在ide里屏蔽掉这个文件就行了(exclude from compile)。

68336016 发表于 2020-3-13 21:29:09

追随妹子学习C语言{:victory:}

wanggoals 发表于 2020-3-13 21:46:55

开讲啦,我也跟着学学C,上学那会我们老师教的Passcal。

SUPER_CRJ 发表于 2020-3-13 22:08:16

我有一个关于二级指针与const组合的问题:const u8* const p; 请问这个p没有女朋友怎么办?

shiva_shiva 发表于 2020-3-13 22:35:56

C语言有对象吗?

isakura 发表于 2020-3-13 22:41:15

谁能告诉怎么把对象追到手....是学会{:biggrin:}

zhcj66 发表于 2020-3-13 22:53:50

**p怎么理解

styleno1 发表于 2020-3-13 23:05:36

支持楼主,不过近几年没有语法上的问题

习学发开 发表于 2020-3-14 08:06:14

cheungman 发表于 2020-3-13 20:59
vscode工程里如果有.a静态库, 编译的时候提示"Fatal Error: cannot open source file" 怎么解决呢 ...

嵌入式相关和纯C语言问题哦

习学发开 发表于 2020-3-14 08:07:12

zhcj66 发表于 2020-3-13 22:53
**p怎么理解

问个有点难度的吧{:tongue:}

takashiki 发表于 2020-3-14 08:59:39

我的帖子[原创]在C语言数组初始化中放入任意数据类型里面最后放了一个链表进去,如果不使用指定初始化(写起来太长了,看起来一点也不自由)怎样才能消除掉警告?

823032003 发表于 2020-3-14 09:02:46

如何防止除0?

hzpyl 发表于 2020-3-14 09:14:15

追随妹子学习C语言

Excellence 发表于 2020-3-14 09:20:20

追随妹子学习C语言

OOXX110 发表于 2020-3-14 09:53:33

让妹子带入C语言的殿堂

HXDZ-AAA 发表于 2020-3-14 10:00:51

在单片机领域,对C语言的掌控程度决定你的路走多远,对外语的掌握程度决定你的路走多宽,C语言真是一门伟大的语言,短小精悍,知识面永无止境,可谓干到老学到老,希望楼主把这帖子开下去,让我也跟着充充电。

lbhj310 发表于 2020-3-14 10:02:20

C语言巅峰还没过?

习学发开 发表于 2020-3-14 10:52:28

lbhj310 发表于 2020-3-14 10:02
C语言巅峰还没过?

Linux一天不玩但

C语言永不没落

skynet 发表于 2020-3-14 10:54:01

如何用C语言追妹子

习学发开 发表于 2020-3-14 10:56:59

823032003 发表于 2020-3-14 09:02
如何防止除0?

没有特别好的办法。

通过编程习惯解决

在函数体中多做检查

在函数入口处使用宏定义进行参数检查

宏定义是纯粹展开,所以写的时候也要注意平台和编译器的差别,例如

#define full_bit_mask 0xffff

就不如

#define full_bit_mask (0-1)

可移植性高。

icoyool 发表于 2020-3-14 11:12:35

既然大神来来, 我就问几个问题
1, 字符串中的部分内容使用宏来代替, 如何实现
2, 使用宏来定义编译时间的年月日时分秒, 但是不是字符串类型,需要int类型
3,C文件里面在使用utf-8编码的情况下,如何给特定的字符串指定编码方式
4,能否把ENUM里面的名称,快速的转换成字符串, 不需要再修改ENUM之后, 再去修改专门的转换函数

lizg 发表于 2020-3-14 12:27:58

三人行必有我师,我是来学习的!

waymcu 发表于 2020-3-14 14:16:38

来学习学习!

Error.Dan 发表于 2020-3-14 19:17:28

C本质上还是一门简单的语言,基本语法和关键字都不多,更新的也慢(像C#这种现代语言,年年爬起来更新,每个大版本都加功能,学都学不完...
而且因为贴近硬件,到了最后就是在学习特定编译器和具体实现.
当然,确实可以提炼一些有用的通用经验,比如可移植性之类的技巧,但是这部分的内容也是有限的.

当年上大学的时候死磕《C专家编程》和《C陷阱与缺陷》现在想想,书里几乎每个有用的点都在讲编译器,这里有个坑是编译器挖的,那里你会给编译器挖个坑.
所以,老话说的好,<del>学一门语言最好的方式就是去写个编译器<del>~

当然,语言学的好是基础,起码能写二级指针才能玩的出花样,但是日常工作,不夸张的说郭天祥其实够了~
有功夫还是多学学软件工程的相关知识吧~

dongwang_fl 发表于 2020-3-14 19:34:05

这种贴还是要支持的。

rei1984 发表于 2020-3-14 19:40:09

Error.Dan 发表于 2020-3-14 19:17
C本质上还是一门简单的语言,基本语法和关键字都不多,更新的也慢(像C#这种现代语言,年年爬起来更新,每个大版 ...



兄弟 说的 太好了。。

c语言 只是一门语言。   

最近我在学习 shell 的知识, 其实 更多的是在学习linux的命令 怎么用, 熟悉linux的命令。


软件工程 就是 要有一个全局观来把项目做出来。 而不局限于使用哪门语言, 当然具体的项目用什么语言可以走捷径,那就是经验的积累了!!

xczxwy 发表于 2020-3-14 20:49:37

大部分写单片机程序的人在工作用C语言最多用到二维数组,到指针就顶天了(还不是函数指针)。什么链表,二叉树,图基本不用。

liuyingqing139 发表于 2020-3-14 21:28:53


追随妹子学习C语言

0712 发表于 2020-3-14 21:49:00

定义一个全局变量,其他复位都不能改变它的值,硬重启才能改变,如何实现

xbmo1234 发表于 2020-3-14 23:42:43

0712 发表于 2020-3-14 21:49
定义一个全局变量,其他复位都不能改变它的值,硬重启才能改变,如何实现 ...

使用分散加载文件,划出内存块,指定该内存块不随软复位而复位。ARM核是这样的,其它架构的不了解。这种一般使用在非法复位后需要重复现场的情况。

liu672992381 发表于 2020-3-15 07:48:31

感谢楼主乐于助人,遇到的真实问题,请教楼主帮忙解答。有一个8个字节的数组(用于保存串口接收到的数据),怎么快速访问数组的每个字节中的每个位(比如51单片机,访问IO可以是P1_1).

习学发开 发表于 2020-3-15 09:27:06

本帖最后由 习学发开 于 2020-3-15 09:57 编辑

liu672992381 发表于 2020-3-15 07:48
感谢楼主乐于助人,遇到的真实问题,请教楼主帮忙解答。有一个8个字节的数组(用于保存串口接收到的数据) ...

请考虑使用结构体+位域组合的方法。

typedef struct
{
unsigned char bit0:1;
unsigned char bit1:1;
...
unsigned char bit63:1;
}_64bit_type_def;

使用的时候:

static _64bit_type_def cache_64bit;

cache_64bit.bit0 = 1;

哎呀呀忘记你问的问题具体了:

应该这么用:

_64bit_type_def * p_cache_64bit = (_64bit_type_def*)&input_array;

p_cache_64bit->bit0 = 1;

liu672992381 发表于 2020-3-15 12:56:50

本帖最后由 liu672992381 于 2020-3-15 12:58 编辑

习学发开 发表于 2020-3-15 09:27
请考虑使用结构体+位域组合的方法。

typedef struct


定义64个位的结构体,这也太麻烦了。前面的我看懂了,但到了这一句不太懂,麻烦再解答一下。
_64bit_type_def * p_cache_64bit = (_64bit_type_def*)&input_array;

p_cache_64bit->bit0 = 1;

另请教,已知一个数组,想知道数组的每一个字节每一位的二进制数据是多少,下面这种方法是不是最简单的。
charN = {1,2,3,4,5,6,7,8}
N1_n0 = (N & 0x02) == 0x01 ? 1 : 0;
N1_n1 = (N & 0x02) == 0x02 ? 1 : 0;
N1_n2 = (N& 0x04) == 0x04 ? 1 : 0;
N1_n3 = (N& 0x08) == 0x08 ? 1 : 0;
N1_n4 = (N& 0x10) == 0x10 ? 1 : 0;
N1_n5 = (N& 0x20) == 0x20 ? 1 : 0;
N1_n6 = (N& 0x40) == 0x40 ? 1 : 0;
N1_n7 = (N& 0x80) == 0x80 ? 1 : 0;
.............................................................
N7_n7 = (N& 0x80) == 0x80 ? 1 : 0;

还有没有更好的办法,比如写成一个函数,直接获取Fi为数组的第几字节,j为对应的位。


编辑原因,"F"二维数组显示不出来。

unifax001 发表于 2020-3-15 15:50:52

c语言内的那个“趋向于”的运算符找不到帖子了 ,大神给讲讲吧

fct8591 发表于 2020-3-15 18:31:19

支持一下

习学发开 发表于 2020-3-15 19:40:21

unifax001 发表于 2020-3-15 15:50
c语言内的那个“趋向于”的运算符找不到帖子了 ,大神给讲讲吧

具体点,如果可能给英文名称

不然我很难想到~~

unifax001 发表于 2020-3-15 22:04:19

本帖最后由 unifax001 于 2020-3-15 22:06 编辑

习学发开 发表于 2020-3-15 19:40
具体点,如果可能给英文名称

不然我很难想到~~

#include<stdio.h>

int main()
{
   int XXKF=0X0A;
   while( XXFK    -->   0 )
    {
         printf("%d",XXFK);
    }
}


就是这个程序 ,运行的结果是

9 8 7 6 5 4 3 2 1 0 请按任意键继续。。。

就是这个趋向于的运算符 -->
哦 英语可能是Tend to 吧 我不太懂英语

cctv02 发表于 2020-3-15 22:18:54

请问书中int (*)怎么理解里雾里的。

sunpower 发表于 2020-3-15 22:31:26

unifax001 发表于 2020-3-15 22:04
#include

int main()


这个问题问得好{:titter:}

acmilannast 发表于 2020-3-15 22:32:01

unifax001 发表于 2020-3-15 22:04
#include

int main()


有才,用趋向于 瞬间高大上

daicp 发表于 2020-3-15 22:37:20

unifax001 发表于 2020-3-15 22:04
#include

int main()


{:titter:}

huangqi412 发表于 2020-3-15 22:57:14

unifax001 发表于 2020-3-15 22:04
#include

int main()


哈哈。。。。。。。都别笑

uindex 发表于 2020-3-15 23:02:31

huangqi412 发表于 2020-3-15 22:57
哈哈。。。。。。。都别笑

保不准妹子也在笑了~

liangerfan 发表于 2020-3-16 00:56:30

如何减少if

qq78929709 发表于 2020-3-16 17:13:26

liangerfan 发表于 2020-3-16 00:56
如何减少if

switch{:lol:}

习学发开 发表于 2020-3-16 22:39:08

takashiki 发表于 2020-3-14 08:59
我的帖子[原创]在C语言数组初始化中放入任意数据类型里面最后放了一个链表进去,如果不使用指定初始化(写 ...

你用的什么编译器?GNU C 根本无法通过。

华芯 发表于 2020-3-17 05:24:16

貌似有不少干货{:lol:}先记号,等待更多分享

takashiki 发表于 2020-3-17 06:22:33

习学发开 发表于 2020-3-16 22:39
你用的什么编译器?GNU C 根本无法通过。

Keil UV 4.72,开启 --c99 --gnu。
GNU C 根本无法通过的原因应该是SystemInit没有定义吧,这个是MDK的初始化函数,为了把各种各样的类型都塞进去放了个这个。你就在前面放上个 void SystemInit() {} 好了。
我刚才特意用低版本的PC版GCC试了,可以通过,无错误,有警告,调试结果是对的。Code::Blocks 8.02,带的GCC是3.4.5版的。

习学发开 发表于 2020-3-17 09:35:37

icoyool 发表于 2020-3-14 11:12
既然大神来来, 我就问几个问题
1, 字符串中的部分内容使用宏来代替, 如何实现
2, 使用宏来定义编译时间的 ...

答:

1. 无法确定你说的具体场合,只好给个我能想到的最接近的:

#defineA first
#defineSTR_EXP(foo) #foo
#defineSTR_CON(foo) STR_EXP(foo)

char* str = "This is the " STR_CON(A) " string.";

printf("%s\n",str);

出不了正确结果请注意勾选 C99和GNU相关选项

2、__DATE___是string,因此可以当作字符数组来用

因此就可以使用这个操作:

(__DATE__[ 7] - '0') * 1000

这个得到的就是int类型的数据。

其他的等我有心情了再答~~

梨花 发表于 2020-3-17 11:08:19

请问下,1、链表在嵌入式软件中的应用场景都有那些呢?2、双向链表,一般是定义头尾指针还是只定义一个头指针进行访问呢?谢谢啦!

kyq_linux 发表于 2020-3-17 11:15:45

如何用C 建立对象?

liu672992381 发表于 2020-3-17 11:40:37

lianglee 发表于 2020-3-17 11:19
多简单的事儿。

谢谢解答。我自己,想了很久,都没有找到好的方法。我试一下,这个行不行。

csq463276932 发表于 2020-3-17 13:15:57

本帖最后由 csq463276932 于 2020-3-17 14:02 编辑

liu672992381 发表于 2020-3-15 12:56
定义64个位的结构体,这也太麻烦了。前面的我看懂了,但到了这一句不太懂,麻烦再解答一下。
_64bit_type ...


_64bit_type_def * p_cache_64bit = (_64bit_type_def*)&input_array;

类似于这样理解: uchar* p_cache_64bit= (uchar*)&input_array;

_64bit_type_def 是一个新定义的数据类型。

ssaiwo 发表于 2020-3-17 13:22:34

我也有个不大理解的,各位大佬指导指导
static char m_MemArray = {0};
    for (i = 0; i < WIN_COUNTOF(m_MemArray); i++)
      *(int *)&m_MemArray = (int)&m_MemArray;

csq463276932 发表于 2020-3-17 14:34:05

ssaiwo 发表于 2020-3-17 13:22
我也有个不大理解的,各位大佬指导指导
static char m_MemArray = {0};
    for (i = ...

不知道你这写法的用途的意义。

ssaiwo 发表于 2020-3-17 14:46:33

csq463276932 发表于 2020-3-17 14:34
不知道你这写法的用途的意义。

m_MemArray这个数组所有值初始值为0,这个函数是用来传递函数指针和函数形参的,关键我也没看明白

习学发开 发表于 2020-3-17 15:24:51

takashiki 发表于 2020-3-17 06:22
Keil UV 4.72,开启 --c99 --gnu。
GNU C 根本无法通过的原因应该是SystemInit没有定义吧,这个是MDK的初 ...

不是

是无法计算数组长度错误,无法通过

我过段时间换一个编译器试试看。

csq463276932 发表于 2020-3-17 15:25:41

本帖最后由 csq463276932 于 2020-3-17 15:27 编辑

ssaiwo 发表于 2020-3-17 14:46
m_MemArray这个数组所有值初始值为0,这个函数是用来传递函数指针和函数形参的,关键我也没看明白 ...

有点类似这样的使用。

canspider 发表于 2020-3-17 15:41:24

csq463276932 发表于 2020-3-17 15:25
有点类似这样的使用。

换本书吧

csq463276932 发表于 2020-3-17 15:50:12

canspider 发表于 2020-3-17 15:41
换本书吧

啥意思?是指这本书讲错了?讲得不好?

ssaiwo 发表于 2020-3-17 15:55:21

csq463276932 发表于 2020-3-17 15:25
有点类似这样的使用。

感谢,我好像看明白了,用这个函数可以实现同时传递函数首地址和函数形参

yat 发表于 2020-3-17 16:11:17

我是来看妹子什么语言无所谓

69879 发表于 2020-3-17 16:35:20

来学习的

gallle 发表于 2020-3-17 16:39:51

习学发开 发表于 2020-3-14 08:06
嵌入式相关和纯C语言问题哦

有个协议,需要通过MCU的管脚串行发送9bit数据,其中一个是起始位,后边8bit是数据位,怎么能提高整合数据串的效率? 数据长度3~60数据字节

戬邪 发表于 2020-3-25 17:43:52

icoyool 发表于 2020-3-14 11:12
既然大神来来, 我就问几个问题
1, 字符串中的部分内容使用宏来代替, 如何实现
2, 使用宏来定义编译时间的 ...

分享珍藏多年的编译时间宏 可以直接调用
#define YEAR ((((__DATE__ - '0') * 10 + (__DATE__ - '0')) * 10 \
    + (__DATE__ - '0')) * 10 + (__DATE__ - '0'))

#define MYYEAR ((__DATE__ - '0') * 10 + (__DATE__ - '0'))
#define MONTH (__DATE__ == 'n' ? (__DATE__ == 'a' ? 0 : 5) \
    : __DATE__ == 'b' ? 1 \
    : __DATE__ == 'r' ? (__DATE__ == 'M' ? 2 : 3) \
    : __DATE__ == 'y' ? 4 \
    : __DATE__ == 'n' ? 5 \
    : __DATE__ == 'l' ? 6 \
    : __DATE__ == 'g' ? 7 \
    : __DATE__ == 'p' ? 8 \
    : __DATE__ == 't' ? 9 \
    : __DATE__ == 'v' ? 10 : 11)

#define DAY ((__DATE__ == ' ' ? 0 : __DATE__ - '0') * 10 \
    + (__DATE__ - '0'))

printf("OK+VER:20%02d%02d%02d\r\n",MYYEAR,(MONTH+1),DAY);

qinxg 发表于 2020-3-26 17:35:21

我有一个宏定义的问题. 想实现如下功能
#define ABC(a, b)\
#if( a ) \
abc(b) \
#endif
过不了编译, 有没有其他变通的方法

uindex 发表于 2020-3-27 01:23:02

qinxg 发表于 2020-3-26 17:35
我有一个宏定义的问题. 想实现如下功能
#define ABC(a, b)\
#if( a ) \


变通一下形式能不能接受:

#if (a)
    #define ABC(a, b) abc(b)
#else
    #define ABC
#endif

tim 发表于 2020-3-27 01:58:22

823032003 发表于 2020-3-14 09:02
如何防止除0?

为什么要防止除0?

qinxg 发表于 2020-3-27 08:54:51

本帖最后由 qinxg 于 2020-3-27 08:56 编辑

uindex 发表于 2020-3-27 01:23
变通一下形式能不能接受:

#if (a)


接受不能.这样会让调试代码到处都是#if..#endif, 没法看
Debug_Chars( DEBUG_APP, "\r\n BleApp_MainHandle() evt_id = %02xH", id);这里只要定义了DEBUG_APP, 这条语句就好打印出来. 而且代码整洁

dong7758 发表于 2020-3-27 14:24:21

追随妹子学习C语言

chen_ym 发表于 2020-3-27 15:25:44

如何让妹子对学习C语言感兴趣?

HXDZ-AAA 发表于 2020-3-27 16:09:31

见过ACM竟赛高手们编写的C程序,各种C语言技巧运用的真是出神入化,让人叹为观止,我想如果让他们对android系统针对某品牌手机进行优化,执行起来是不是应该和苹果的ios一样流畅?尽管没有搞过大型程序,但我坚信,高质量的程序执行起来从各方面比较肯定不一样。

习学发开 发表于 2020-4-4 16:33:21

unifax001 发表于 2020-3-15 22:04
#include

int main()


这个是属于奇技淫巧,没有任何意义

忽略即可。

习学发开 发表于 2020-4-4 16:45:27

cctv02 发表于 2020-3-15 22:18
请问书中int (*)怎么理解里雾里的。

这个没有办法,只能主观接受它。

前提是你搞清楚“指针数组” 和 “数组指针”的差别。

这种东西存粹是硬性规定,没什么理解不理解的呢

习学发开 发表于 2020-4-4 17:14:38

liu672992381 发表于 2020-3-15 12:56
定义64个位的结构体,这也太麻烦了。前面的我看懂了,但到了这一句不太懂,麻烦再解答一下。
_64bit_type ...

"另请教,已知一个数组,想知道数组的每一个字节每一位的二进制数据是多少,下面这种方法是不是最简单的。
charN = {1,2,3,4,5,6,7,8}
N1_n0 = (N & 0x02) == 0x01 ? 1 : 0;
N1_n1 = (N & 0x02) == 0x02 ? 1 : 0;
N1_n2 = (N& 0x04) == 0x04 ? 1 : 0;
N1_n3 = (N& 0x08) == 0x08 ? 1 : 0;
N1_n4 = (N& 0x10) == 0x10 ? 1 : 0;
N1_n5 = (N& 0x20) == 0x20 ? 1 : 0;
N1_n6 = (N& 0x40) == 0x40 ? 1 : 0;
N1_n7 = (N& 0x80) == 0x80 ? 1 : 0;
.............................................................
N7_n7 = (N& 0x80) == 0x80 ? 1 : 0;

还有没有更好的办法,比如写成一个函数,直接获取Fi为数组的第几字节,j为对应的位。
"

还是用我之前讲的结构体指针啊?

用位域,很方便,直接用

你这个应当是看PLC什么的点位吧?

实际操作也可以按字节进行的,没必要用bit一位一位来

但要看情况

习学发开 发表于 2020-4-4 17:15:24

liangerfan 发表于 2020-3-16 00:56
如何减少if

有没有什么目的?

if很多时候比swtich case还要优越。

习学发开 发表于 2020-4-4 17:21:21

梨花 发表于 2020-3-17 11:08
请问下,1、链表在嵌入式软件中的应用场景都有那些呢?2、双向链表,一般是定义头尾指针还是只定义一个头指 ...

1、大部分情况下用不到。

数据结构只会用在数据量大且对访问效率有要求的场合。

这种场合再嵌入式编程中很少见。

2、这个我也不太清楚,

应当根据需要来吧?

armok. 发表于 2020-4-4 17:57:14

欢迎楼主的义举。

习学发开 发表于 2020-4-4 19:13:19

ssaiwo 发表于 2020-3-17 13:22
我也有个不大理解的,各位大佬指导指导
static char m_MemArray = {0};
    for (i = ...

需要更多的上下文。

从程序本身看是把二维数组每行开头所在的地址

存放到了自身数组里面

其中(int *) 这个强制转换明显是让一个地址值变为lvalue

必须要有更多的程序来判断这么做的目的

习学发开 发表于 2020-4-4 19:13:38

armok 发表于 2020-4-4 17:57
欢迎楼主的义举。

谢谢赞赏{:tongue:}

zxq6 发表于 2020-4-4 19:32:24

请问一下,在32b鸡上,有没有办法定义一个16b的float或者double?

BSMGood 发表于 2020-4-4 19:39:16

楼主什么是EABI?你对此有自己独特的见解吗?

习学发开 发表于 2020-4-4 19:52:36

gallle 发表于 2020-3-17 16:39
有个协议,需要通过MCU的管脚串行发送9bit数据,其中一个是起始位,后边8bit是数据位,怎么能提高整合数 ...

说实话没有太听懂您的问题哦


您是指尽量少发送数据帧吗?

8个bit的payload已经非常标准了,不知道还怎么压缩剩余空间

如果是10个bit或许还需要做手脚……

习学发开 发表于 2020-4-4 19:59:02

zxq6 发表于 2020-4-4 19:32
请问一下,在32b鸡上,有没有办法定义一个16b的float或者double?

数据位实际上都是靠编译器来实现的。

如果编译器原生不支持,那么只能通过手敲代码软件实现了

具体做起来会比较麻烦且执行效率也不会高

一般都是位数低的平台模拟位数高的平台,

很少有倒过来做的,因为64bit平台的float 可以轻松兼容32bit的float,反之未必

可能会有更好的办法呢,这个问题还真的没有仔细考虑过

以前遇到过8bit单片机为了运算足够快,double float只有48bit的

yoz 发表于 2020-4-4 21:25:02

zxq6 发表于 2020-4-4 19:32
请问一下,在32b鸡上,有没有办法定义一个16b的float或者double?

16bit的float就不是float了吧?你想说的是half(GPU之类的硬件支持)吗?

zxq6 发表于 2020-4-5 08:14:23

yoz 发表于 2020-4-4 21:25
16bit的float就不是float了吧?你想说的是half(GPU之类的硬件支持)吗?

不是,最近研究modbus poll,发现其float类型就是16b的,所以想从单片机直接发送16b的float给modbus poll,然后就能够显示了

a_y_ang 发表于 2020-4-5 22:41:09

我是来学习的

supercoo 发表于 2020-4-7 09:20:15

不是情感问题?

liu672992381 发表于 2020-4-7 17:53:39

习学发开 发表于 2020-4-4 17:14
还是用我之前讲的结构体指针啊?

用位域,很方便,直接用


是自己掉在了怪圈里,一直纠结位这种东西。其实能够一次操作4字节,为什么还要去操作一个位。目前C语言水平,个人觉得处于入门阶段,要想进步只有通过不断写代码吗?

asj1989 发表于 2020-4-7 21:41:27

zxq6 发表于 2020-4-5 08:14
不是,最近研究modbus poll,发现其float类型就是16b的,所以想从单片机直接发送16b的float给modbus poll ...

modbus 里面的float实际上是32bit,占2个地址

zxq6 发表于 2020-4-8 08:45:31

asj1989 发表于 2020-4-7 21:41
modbus 里面的float实际上是32bit,占2个地址

这样啊,我一直以为是16b的,好久试一试,谢谢!

tim4146 发表于 2020-4-8 09:39:55

在编程过程中,包含了某个.h文件后,就可以使用bool这个变量类型,但是查不到bool这个类型是哪里定义的,我觉得编译器内部肯定不是真的一个bit存储的,能否请大神讲解一二

yangff 发表于 2020-4-8 22:35:05

qinxg 发表于 2020-3-26 17:35
我有一个宏定义的问题. 想实现如下功能
#define ABC(a, b)\
#if( a ) \



#ifdef APP_DEBUG
#define debugOnly(x) x
#else
#define debugOnly(x)
#endif

#define ABC(b) debugOnly(printf("Debug: %s", b))

lzyr 发表于 2020-4-9 23:09:35

lbhj310 发表于 2020-3-14 10:02
C语言巅峰还没过?

冯诺依曼体系什么时候还在用,C 就不会没落

lzyr 发表于 2020-4-9 23:13:00

BSMGood 发表于 2020-4-4 19:39
楼主什么是EABI?你对此有自己独特的见解吗?

EABI 是一种接口协议 你当成modbus之类看就行了
它是二进制的接口协议,你调用别人的库的时候 要遵守

lileistone 发表于 2020-4-9 23:28:10

所以ABI类似于寄存器使用规则这些?

liansh2002 发表于 2020-4-10 09:05:25

zxq6 发表于 2020-4-4 19:32
请问一下,在32b鸡上,有没有办法定义一个16b的float或者double?

半精度浮点数,也是IEEE标准格式,某次客户要求使用此格式通讯,折腾了好久。参考一下页面,有详细解释以及转换方法
https://stackoverflow.com/questions/3026441/float32-to-float16/3026505
https://stackoverflow.com/questions/1659440/32-bit-to-16-bit-floating-point-conversion

oooios 发表于 2020-4-11 08:41:24

异步回调普及下?
页: [1] 2
查看完整版本: 开一贴专门答疑C语言问题