3412|3

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于uCOS-ii的一些其他问题,求解释啊 [复制链接]

 第一个问题:
/*
*********************************************************************************************************
*                                         uC/OS-II CONFIGURATION
*********************************************************************************************************
*/
#define OS_MAX_EVENTS             2L    /* Max. number of event control blocks in your application ...  */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_FLAGS              2L    /* Max. number of Event Flag Groups    in your application ...  */
                                       /* ... MUST be > 0  

上面两个蓝色标出的2L是什么数据格式?我学C语言时候没见过啊,可否将L去掉呢

第二个问题:

我看到很多人写的在各种MCU上移植的范例,开始就说该例程工作在大模式,有的是小模式,这个是什么意思呢?

最新回复

第一个问题:C语言后缀。 例如可以这么定义变量: unsigned long  num = 10000UL; 所以这里的L是表示long类型的数据,不给出这个的话有时可能会有问题。写出的话,会明确的告知阅读代码的人是什么类型的数据。增强代码的可阅读性和可靠性。 注意类型后缀大小写无关,所以写小写的“l”也是可以的,只是会让人看错。 第二个问题:大小端模式。 不给你用专业的术语解释了,给个实例一说就会,一试就懂。不是什么很深奥的东西。可能你基本没怎么用到,用到了就很清楚。 定义一个int类型的数据,假如说你的CPU上int类型长度是4字节。 给出实例: int data = 0x12345678;//写成16进制的数据便于后面的分析,希望你习惯 int *pdata = &data; 假如说 sizeof(data) = 4; pdata = 0x40000100; 那么也就是说在内存的0x40000100、0x40000101、0x40000102、0x40000103这个4字节内存地址上存放着4字节的数据,也就是data变量。那好,我问你,0x40000100里面存的是什么数据,0x40000101、0x40000102、0x40000103呢? 如果你设计CPU,你也会想到,这个其实有2种方法: 1:0x40000100 = 0x12,0x40000101 = 0x34,0x40000102 = 0x56,0x40000103 = 0x78; 2:0x40000100 = 0x78,0x40000101 = 0x56,0x40000102 = 0x34,0x40000103 = 0x12; 别搞出其他顺序,其他的都是乱的,必须是顺序的方式。 这里第一种,0x12是data的最高位数据,放在了0x40000100 这个最低地址;0x78是data的最低位数据,放在了0x40000103 这个最高地址。这就是大端模式。 反过来就是:0x12是data的最高位数据,放在了0x40000103 这个最高地址;0x78是data的最低位数据,放在了0x40000100 这个最低地址。这就是小端模式。 同理,如果你的CPU上sizeof(short) = 2,那么也存在这种问题。 用专业的术语: 大端模式所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。 注意,大小端模式都是与CPU内部支持的数据类型有关,和复杂结构体、复杂共用体无关。 字节内部不存在大小端模式问题,因为一个字节只有一个地址,大小端模式是地址和数据组织的问题。 有很多种方法来查当前CPU的大小端模式,你感兴趣的话可以动手写写。这个在找工作面试时一般会考到的。 另外,网络数据传输也存在大小端模式的问题,和这里的大小端问题基本一致。 你可以不记住大小端的具体定义,只要你知道怎么得知当前CPU的数据组织,怎么让你写的代码在用到这些特性时不出问题就行。 要记得话,就记住小端模式是一致的对应性。大数据对大地址,小数据对小地址。就是大对大,小对小。一致嘛。大端模式就反着,小端模式就顺着。  详情 回复 发表于 2013-1-22 18:32

点评

第一个问题:C语言后缀。 例如可以这么定义变量: unsigned long num = 10000UL; 所以这里的L是表示long类型的数据,不给出这个的话有时可能会有问题。写出的话,会明确的告知阅读代码的人是什么类型的数据。增  详情 回复 发表于 2013-1-22 18:32
点赞 关注
 

回复
举报

7219

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 
L  表明这个数是long int类型的,不写的话默认认为是int
大小模式就是大端小端模式?
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

板凳
 
原帖由 lxgree2013 于 2013-1-22 17:21 发表
第一个问题:
/*
*********************************************************************************************************
*                                         uC/OS-II CONFIGURATION
********* ...
第一个问题:C语言后缀。
例如可以这么定义变量:
unsigned long  num = 10000UL;
所以这里的L是表示long类型的数据,不给出这个的话有时可能会有问题。写出的话,会明确的告知阅读代码的人是什么类型的数据。增强代码的可阅读性和可靠性。
注意类型后缀大小写无关,所以写小写的“l”也是可以的,只是会让人看错。

第二个问题:大小端模式。
不给你用专业的术语解释了,给个实例一说就会,一试就懂。不是什么很深奥的东西。可能你基本没怎么用到,用到了就很清楚。
定义一个int类型的数据,假如说你的CPU上int类型长度是4字节。
给出实例:
int data = 0x12345678;//写成16进制的数据便于后面的分析,希望你习惯
int *pdata = &data;

假如说
sizeof(data) = 4;
pdata = 0x40000100;

那么也就是说在内存的0x40000100、0x40000101、0x40000102、0x40000103这个4字节内存地址上存放着4字节的数据,也就是data变量。那好,我问你,0x40000100里面存的是什么数据,0x40000101、0x40000102、0x40000103呢?

如果你设计CPU,你也会想到,这个其实有2种方法:
1:0x40000100 = 0x12,0x40000101 = 0x34,0x40000102 = 0x56,0x40000103 = 0x78;
2:0x40000100 = 0x78,0x40000101 = 0x56,0x40000102 = 0x34,0x40000103 = 0x12;

别搞出其他顺序,其他的都是乱的,必须是顺序的方式。

这里第一种,0x12是data的最高位数据,放在了0x40000100 这个最低地址;0x78是data的最低位数据,放在了0x40000103 这个最高地址。这就是大端模式。
反过来就是:0x12是data的最高位数据,放在了0x40000103 这个最高地址;0x78是data的最低位数据,放在了0x40000100 这个最低地址。这就是小端模式。

同理,如果你的CPU上sizeof(short) = 2,那么也存在这种问题。

用专业的术语:
大端模式所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

注意,大小端模式都是与CPU内部支持的数据类型有关,和复杂结构体、复杂共用体无关。
字节内部不存在大小端模式问题,因为一个字节只有一个地址,大小端模式是地址和数据组织的问题。

有很多种方法来查当前CPU的大小端模式,你感兴趣的话可以动手写写。这个在找工作面试时一般会考到的。


另外,网络数据传输也存在大小端模式的问题,和这里的大小端问题基本一致。

你可以不记住大小端的具体定义,只要你知道怎么得知当前CPU的数据组织,怎么让你写的代码在用到这些特性时不出问题就行。

要记得话,就记住小端模式是一致的对应性。大数据对大地址,小数据对小地址。就是大对大,小对小。一致嘛。大端模式就反着,小端模式就顺着。

点评

你回复的好详细啊,我都不知道怎么感谢你了  详情 回复 发表于 2013-1-22 21:49
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 lr2131 的帖子

你回复的好详细啊,我都不知道怎么感谢你了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表