小编mod*_*est的帖子

澄清以太网,MII,SGMII,RGMII和PHY

我主要来自嵌入式软件背景,因此我对硬件的了解非常有限.我总是将以太网视为计算机上连接以太网电缆的小型物理连接器.从软件的角度来看,您需要做的就是安装驱动程序(在Windows中)或配置Linux内核以包含以太网的驱动程序.

问题:

但正如我已经开始下降一个等级(对硬件)和寻找不同的数据表和图表,我已经开始遇到像PHY,MII,SGMII,RGMII等方面,现在我是什么构成有点困惑以太网?例如,当我说英特尔82574L 1.0 Gbps以太网端口时,所有这些术语适用于哪里?

networking ethernet

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

基于OSI模型,数据包如何通过Internet从一台计算机传输到另一台计算机

我对基本的OSI模型很熟悉,但我总是感到困惑的是,数据包是如何通过Internet从一台机器传输到另一台机器的,以及OSI层是如何形成的?例如,对于以下拓扑:

机器A <-----> Switch <----> Router <----> Router <----> Router <----> Switch <----> Machine B

在显示多个路由器代表互联网的情况下,当机器A向机器B发送数据包(比如通过FTP的简单"ls"命令)时,OSI层级会发生什么.

以上只是一个建议的例子,但如果任何人可以解释任何其他网络拓扑,那也没关系.我正在寻找一个非常基本的解释,说明如何将数据包转换到每个节点(机器,交换机,路由器等)的不同OSI层.

networking

25
推荐指数
1
解决办法
8万
查看次数

ARM系统上的Bootrom与bootloader有什么区别

我主要来自x86系统背景,其中BIOS(固件)负责从PowerON加载引导加载程序(如GRUB),后者又加载操作系统.我现在一直在阅读ARM系统上的等效启动序列,似乎网上有文章引用了两个术语:bootrom和bootloader.

有些文章提到,从PowerON开始,引导加载程序(如u-boot)是第一个被执行的东西,而有些文章说,从PowerON开始,bootrom(通常在处理器的内部ROM上闪存)首先执行,然后加载引导加载程序(如uboot)然后加载操作系统.

任何人都可以提供一些关于bootrom vs bootloader的说明吗?另外,我想知道通常在ARM系统中使用的流行bootrom的名称.

arm bootloader

20
推荐指数
1
解决办法
4万
查看次数

使用char和int访问内存映射寄存器之间的区别

我一直在阅读有关访问外围设备的内存映射寄存器的信息,看来你可以采取多种方式.例如:

方法1:

#define MyReg 0x30610000

volatile int *ptrMyReg;
ptrMyReg = (volatile int *) MyReg;
*ptrMyReg = 0x7FFFFFFF; /* Turn  ON all bits */
Run Code Online (Sandbox Code Playgroud)

方法2:

#define MyReg 0x30610000

volatile unsigned char *ptrMyReg;
ptrMyReg = (volatile unsigned char *) MyReg;
*ptrMyReg = 0x7FFFFFFF; /* Turn  ON all bits */
Run Code Online (Sandbox Code Playgroud)

问题:为什么人们会选择一个而不是另一个?

假设:体系结构上int的大小为4个字节.

c embedded

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

返回不同数据类型的C函数的正确返回类型是什么

曾经有人要求我写一个函数,它会在一些成功的条件下返回指向内存中某些数据的指针,否则它应该返回"-1".在这种情况下,什么是正确的返回类型.如果我只需要返回数据,那么我将使用char*作为函数myfunction的返回类型.但在这种情况下,我可能会返回-1有返回类型.

<what-type> myfunction() {

char *data;

if (some condition true)
  return data;
else 
  return -1
}

int main () {

 myfunction

}
Run Code Online (Sandbox Code Playgroud)

c

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

'while'循环字符串比较函数循环超过必要

strcmp_kr函数基于K&R的字符串比较功能.

#include<stdio.h>
#include<string.h>

int strcmp_kr (char *s, char *d) {

int i=0;

    while ((s[i] == d[i])) {
        printf("Entered while loop\n");
        if (s[i] == '\0')
            return 0;
        i++;
    }
    return s[i] - d[i];
}

int main() {

char s1[15];
char s2[15];
printf("Enter string no. 1:");
scanf("%s", s1);
printf("Enter string no. 2:");
scanf("%s", s2);
strcmp_kr(s1, s2) == 0 ? printf("Strings equal!\n") : \
printf("Strings not equal by %d!\n", strcmp_kr(s1, s2));
Run Code Online (Sandbox Code Playgroud)

}

输出:

$ ./a.out

输入字符串号.1:谦虚

输入字符串号.2:modesy

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环 …

c

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

"__svnversion__"在Python源代码中的含义是什么

最近,我在python脚本中看到了以下代码:

#!/usr/bin/env python
__svnversion__ = '$Id: setup.py 303 2010-10-20 02:51:64Z xyz $'    
import sys
Run Code Online (Sandbox Code Playgroud)

看来这是一种以某种方式跟踪SVN中脚本版本的方法,但我完全不知道为什么以及如何使用它?我在哪里可以阅读更多关于这种编码风格以及人们使用它的原因?

python version-control

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

标签 统计

c ×3

networking ×2

arm ×1

bootloader ×1

embedded ×1

ethernet ×1

python ×1

version-control ×1