侵权投诉

探究Linux GNU C与ANSI C之间的区别

奈因PCB电路板设计 ? 2021-07-26 16:54 ? 次阅读

Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行一系列扩展,以增强标准C的功能。

1.零长度和变量长度数组

GNU C允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如:

struct var_data {

int len;

char data[0];

};

char data[0]仅仅意味着程序中通过var_data结构体实例的data[index]成员可以访问len之后的第index个地址,它并 没有为data[]数组分配内存,因此sizeof(struct var_data)=sizeof(int)。

假设struct var_data的数据域就保存在struct var_data紧接着的内存区域中,则通过如下代码可以遍历这些数据:

struct var_data s;

。。。

for (i = 0; i 《 s.len; i++)

printf(“%02x”, s.data[i]);

GNU C中也可以使用1个变量定义数组,例如如下代码中定义的“double x[n]”:

int main (int argc, char *argv[])

{

int i, n = argc;

double x[n];

for (i = 0; i 《 n; i++)

x[i] = i;

return 0;

}

2.case范围

GNU C支持case x…y这样的语法,区间[x,y]中的数都会满足这个case的条件,请看下面的代码:

switch (ch) {

case ‘0’。。。 ‘9’: c -= ‘0’;

break;

case ‘a’。。。 ‘f’: c -= ‘a’ - 10;

break;

case ‘A’。。。 ‘F’: c -= ‘A’ - 10;

break;

}

代码中的case‘0’。。?!?’等价于标准C中的:

case ‘0’: case ‘1’: case ‘2’: case ‘3’: case ‘4’:

case ‘5’: case ‘6’: case ‘7’: case ‘8’: case ‘9’:

3.语句表达式

GNU C把包含在括号中的复合语句看成是一个表达式,称为语句表达式,它可以出现在任何允许表达式的地 方。我们可以在语句表达式中使用原本只能在复合语句中使用的循环、局部变量等,例如:

#define min_t(type,x,y)

( { type _ _x =(x);type _ _y = (y); _ _x《_ _y _ _x: _ _y; })

int ia, ib, mini;

float fa, fb, minf;

mini = min_t(int, ia, ib);

minf = min_t(float, fa, fb);

因为重新定义了__xx和__y这两个局部变量,所以用上述方式定义的宏将不会有副作用。在标准C中,对应的如 下宏则会产生副作用:

#define min(x,y) ((x) 《 (y) (x) : (y))

代码min(++ia,++ib)会展开为((++ia)《(++ib)(++ia):(++ib)),传入宏的“参数”增加两次。

4.typeof关键字

typeof(x)语句可以获得x的类型,因此,可以借助typeof重新定义min这个宏:

#define min(x,y) ({ const typeof(x) _x = (x);

const typeof(y) _y = (y);

(void) (&_x == &_y);

_x 《 _y _x : _y; })

我们不需要像min_t(type,x,y)那个宏那样把type传入,因为通过typeof(x)、typeof(y)可以获得type。代 码行(void)(&_x==&_y)的作用是检查_x和_y的类型是否一致。

5.可变参数宏

标准C就支持可变参数函数,意味着函数的参数是不固定的,例如printf()函数的原型为:

int printf( const char *format [, argument]。。。 );

而在GNU C中,宏也可以接受可变数目的参数,例如:

#define pr_debug(fmt,arg.。。)

printk(fmt,##arg)

这里arg表示其余的参数,可以有零个或多个参数,这些参数以及参数之间的逗号构成arg的值,在宏扩展时替换 arg,如下列代码:

pr_debug(“%s:%d”,filename,line)

会被扩展为:

printk(“%s:%d”, filename, line)

使用“##”是为了处理arg不代表任何参数的情况,这时候,前面的逗号就变得多余了。使用“##”之后,GNU C预 处理器会丢弃前面的逗号,这样,下列代码:

pr_debug(“success!

”)

会被正确地扩展为:

printk(“success!

”)

而不是:

printk(“success!

”,)

6.标号元素

标准C要求数组或结构体的初始化值必须以固定的顺序出现,在GNU C中,通过指定索引或结构体成员名,允许 初始化值以任意顺序出现。

指定数组索引的方法是在初始化值前添加“[INDEX]=”,当然也可以用“[FIRST.。.LAST]=”的形式指定一个范围。例如,下面的代码定义了一个数组,并把其中的所有元素赋值为0:

unsigned char data[MAX] = { [0 。。。 MAX-1] = 0 };

下面的代码借助结构体成员名初始化结构体:

struct file_operations ext2_file_operations = {

llseek: generic_file_llseek,

read: generic_file_read,

write: generic_file_write,

ioctl: ext2_ioctl,

mmap: generic_file_mmap,

open: generic_file_open,

release: ext2_release_file,

fsync: ext2_sync_file,

};

但是,Linux 2.6推荐类似的代码应该尽量采用标准C的方式:

struct file_operations ext2_file_operations = {

.llseek = generic_file_llseek,

.read = generic_file_read,

.write = generic_file_write,

.aio_read = generic_file_aio_read,

.aio_write = generic_file_aio_write,

.ioct = ext2_ioctl,

.mmap = generic_file_mmap,

.open = generic_file_open,

.release = ext2_release_file,

.fsync = ext2_sync_file,

.readv = generic_file_readv,

.writev = generic_file_writev,

.sendfile = generic_file_sendfile,

};

7.当前函数名

GNU C预定义了两个标识符保存当前函数的名字,__FUNCTION__保存函数在源码中的名字,__PRETTY_FUNCTION__保存带语言特色的名字。在C函数中,这两个名字是相同的。

void example()

{

printf(“This is function:%s”, __FUNCTION__);

}

代码中的__FUNCTION__意味着字符串“example”。C99已经支持__func__宏,因此建议在Linux编程中不再使用__FUNCTION__,而转而使用__func__:

void example(void)

{

printf(“This is function:%s”, __func__);

}

8.特殊属性声明

GNU C允许声明函数、变量和类型的特殊属性,以便手动优化代码和定制代码检查的方法。要指定一个声明的 属性,只需要在声明后添加__attribute__((ATTRIBUTE))。其中ATTRIBUTE为属性说明,如果存在多个属 性,则以逗号分隔。GNU C支持noreturn、format、section、aligned、packed等十多个属性。

noreturn属性作用于函数,表示该函数从不返回。这会让编译器优化代码,并消除不必要的警告信息。例如:

# define ATTRIB_NORET __attribute__((noreturn)) 。。。。 asmlinkage NORET_TYPE void do_exit(long error_code) ATTRIB_NORET;

format属性也用于函数,表示该函数使用printf、scanf或strftime风格的参数,指定format属性可以让编译器根据格 式串检查参数类型。例如:

asmlinkage int printk(const char * fmt, 。。。) __attribute__ ((format (printf, 1, 2)));

上述代码中的第1个参数是格式串,从第2个参数开始都会根据printf()函数的格式串规则检查参数。

unused属性作用于函数和变量,表示该函数或变量可能不会用到,这个属性可以避免编译器产生警告信息。

aligned属性用于变量、结构体或联合体,指定变量、结构体或联合体的对齐方式,以字节为单位,例如:

struct example_struct {

char a;

int b;

long c;

} __attribute__((aligned(4)));

表示该结构类型的变量以4字节对齐。

packed属性作用于变量和类型,用于变量或结构体成员时表示使用最小可能的对齐,用于枚举、结构体或联合体类型时表示该类型使用最小的内存。例如:

struct example_struct {

char a;

int b;

long c __attribute__((packed));

};

编译器对结构体成员及变量对齐的目的是为了更快地访问结构体成员及变量占据的内存。例如,对 于一个32位的整型变量,若以4字节方式存放(即低两位地址为00),则CPU在一个总线周期内就可以读取32 位;否则,CPU需要两个总线周期才能读取32位。

9.内建函数

GNU C提供了大量内建函数,其中大部分是标准C库函数的GNU C编译器内建版本,例如memcpy()等,它们与对应的标准C库函数功能相同。

不属于库函数的其他内建函数的命名通常以__builtin开始,如下所示。

内建函数__builtin_return_address(LEVEL)返回当前函数或其调用者的返回地址,参数LEVEL指定调用栈的级数,如0表示当前函数的返回地址,1表示当前函数的调用者的返回地址。

内建函数__builtin_constant_p(EXP)用于判断一个值是否为编译时常数,如果参数EXP的值是常数,函数返回1,否则返回0。例如,下面的代码可检测第1个参数是否为编译时常数以确定采用参数版本还是非参数版本:

#define test_bit(nr,addr)

(__builtin_constant_p(nr)

constant_test_bit((nr),(addr)) :

variable_test_bit((nr),(addr)))

内建函数__builtin_expect(EXP,C)用于为编译器提供分支预测信息,其返回值是整数表达式EXP的值,C的 值必须是编译时常数。

Linux内核编程时常用的likely()和unlikely()底层调用的likely_notrace()、unlikely_notrace()就是基于 __builtin_expect(EXP,C)实现的。

#define likely_notrace(x) __builtin_expect(?。。▁), 1) #define unlikely_notrace(x) __builtin_expect(?。。▁), 0)

若代码中出现分支,则即可能中断流水线,我们可以通过likely()和unlikely()暗示分支容易成立还是不容易 成立,例如:

if (likely(!IN_DEV_ROUTE_LOCALNET(in_dev)))

if (ipv4_is_loopback(saddr))

goto e_inval;

在使用gcc编译C程序的时候,如果使用“-ansi–pedantic”编译选项,则会告诉编译器不使用GNU扩展语法。例如对 于如下C程序test.c:

struct var_data {

int len;

char data[0];

};

struct var_data a;

直接编译可以通过:

gcc -c test.c

如果使用“-ansi–pedantic”编译选项,编译会报警:

gcc -ansi -pedantic -c test.c

test.c:3: warning: ISO C forbids zero-size array ‘data’

编辑:jq

原文标题:Linux GNU C 与 ANSI C 有什么区别?

文章出处:【微信号:pcbgood,微信公众号:奈因PCB电路板设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

【嵌入式资料精选合集】嵌入式工程师资料免费分享

学习就是要不断的吸纳知识,在研发过程中,经?;嵊龅揭恍┪侍?,这种发现问题并解决问题的过程就是进步。为什么选择学习嵌入式?...
发表于 09-18 16:42 ? 97次 阅读
【嵌入式资料精选合集】嵌入式工程师资料免费分享

在linux下安装Apache+Php+Mysql

在linux下安装Apache+Php+Mysql(数字电源技术及其应用)-文档为在linux下安装....
发表于 09-18 16:09 ? 7次 阅读
在linux下安装Apache+Php+Mysql

STM32MP157 Linux系统移植开发篇13:Linux内核5寸触摸屏驱动移植

本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32M...
发表于 09-18 11:50 ? 0次 阅读

深入探究Linux系统噪音统计(osnoise tracer)

在Linux系统中作为一个普通线程是非??啾频?。不仅NMI 、硬中断、软中断可以打断它,甚至其它普通....
的头像 Linux阅码场 发表于 09-18 10:53 ? 110次 阅读
深入探究Linux系统噪音统计(osnoise tracer)

学习嵌入式linux为什么推荐stm32mp157开发板?

stm32mp157是ST推出的一款双A7+M4多核异构处理器,既可以学习linux,又可以学习stm32单片机开发,还可以拓展物联网、人工智能...
发表于 09-18 10:08 ? 0次 阅读

STM32MP157 Linux系统移植开发篇12:Linux内核MIPI LCD驱动移植

本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32M...
发表于 09-16 16:53 ? 0次 阅读

Linux运维硬件基础知识相关介绍

Linux运维-硬件基础篇开篇导读:本篇博文是你阅读此系列教程的第一课,通过以下文字的介绍,你可以大概了解到服务器硬件相关的基础...
发表于 09-16 06:05 ? 0次 阅读

STM32MP157 Linux系统移植开发篇11:Linux HDMI驱动移植

?本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32...
发表于 09-15 11:55 ? 202次 阅读

开发板上玩GTA,RISC-V多项移植项目成功运作中

开发板上玩GTA ,RISC-V 多项移植项目成功运作中 ? RISC-V近期再度掀起了不小的热度,....
的头像 E4Life 发表于 09-15 09:47 ? 1353次 阅读
开发板上玩GTA,RISC-V多项移植项目成功运作中

linux-arm开发环境简单配置

关于linux-arm开发环境简单配置是ARM学习的第一步,很多初学者会在这问题上纠结很久都不能配置好开发环境。推荐大家看一下韦东...
发表于 09-14 14:49 ? 0次 阅读

Linux系统中图形显示方案

Linux系统中图形显示方案 ? 1 FBDEV Framebuffer device 社区参与度不....
的头像 Linux爱好者 发表于 09-14 10:43 ? 170次 阅读
Linux系统中图形显示方案

Linux系统移植篇10:Linux内核网卡驱动移植

本文章为《Linux系统移植篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32...
发表于 09-14 09:19 ? 101次 阅读

如何使用UrBackup和Linux

作者 | Hannah Lee   译者 | 弯月  责编 | 欧阳姝黎出品 | CSDN(ID:CSDNnews)本文将向你展示...
发表于 09-14 07:24 ? 0次 阅读

香橙派Zero2开发板Linux系统下来设置 Framebuffer 的宽度和高度

1) 在 linux 系统的/boot/orangepiEnv.txt 中有 fb0_width 和 fb0_height 两个变量,可以 通过它们来设置 Framebuffer 的...
发表于 09-13 14:55 ? 101次 阅读
香橙派Zero2开发板Linux系统下来设置 Framebuffer 的宽度和高度

「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

NXP IMX8图形开发指南(GPU) 基于Graphical Demo,支持OpenGL、Open....
的头像 黄工 发表于 09-10 18:13 ? 41次 阅读
「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

在Windows系统中安装WSL子系统

在上一篇文章中,我们主要聊了一下:在 Windows 系统中,安装 WSL 子系统。 文章在此:WS....
的头像 Linux阅码场 发表于 09-09 11:33 ? 250次 阅读
在Windows系统中安装WSL子系统

嵌入式Linux应用程序开发标准教程电子版

共计12章,有需要剩下部分的私信我哦~免费分享
发表于 09-09 09:29 ? 24次 阅读

如何使用顶级的Linux手机

未来取代安卓或 iOS 的可能是 Linux 手机,但如今,有哪些选择可以尝试一下呢? 虽然安卓是基....
的头像 Linux爱好者 发表于 09-09 09:26 ? 1183次 阅读

最为精简的一个Linux Fork炸弹解析

转自:http://blog.saymagic.cn/2015/03/25/fork-bomb.ht....
的头像 Linux爱好者 发表于 09-07 16:12 ? 109次 阅读

在Linux中如何使用shell批量修改文件名

1、通过sed替换 [root@node01 wolf]# find / -type f -name....
的头像 马哥Linux运维 发表于 09-07 16:06 ? 169次 阅读

如何使用uptimed来监视Linux系统

大家好,我是良许。 作为一名合格的 Linux 运维人员,监视系统的正常运行时间可以说是一门基本功了....
的头像 Linux阅码场 发表于 09-07 15:00 ? 178次 阅读
如何使用uptimed来监视Linux系统

Linux问题分析与性能优化

文章来源于:https://mp.weixin.qq.com/s/d1NLXGp7teOgskuss....
的头像 张真 发表于 09-06 19:01 ? 69次 阅读
Linux问题分析与性能优化

Ubuntu权威指南电子版资源下载

Ubuntu权威指南电子版资源下载
发表于 09-06 15:13 ? 19次 阅读

Linux ptp4l程序实现PTP边界时钟和普通时钟

精确时间协议(PTP)是用于在网络中进行时钟同步的协议。当与硬件支持结合使用时, PTP 能够达到亚....
的头像 广州虹科电子科技有限公司 发表于 09-05 11:27 ? 443次 阅读

NVIDIA DRIVE OS 5.2.6 Linux SDK发布 为加速计算和AI而设计

NVIDIA DRIVE OS 5.2.6 Linux SDK现已在NVIDIA DRIVE开发者网....
的头像 NVIDIA英伟达企业解决方案 发表于 09-03 15:03 ? 2797次 阅读

【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

前 言本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。本文....
的头像 黄工 发表于 09-02 17:29 ? 193次 阅读
【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

Linux系统编程中的文件描述符调用

文件描述符 进程每打开一个文件的时候,会获得该文件的文件描述符,而后续的读写操作都把文件描述符作为参....
的头像 C语言编程学习基地 发表于 09-02 09:50 ? 142次 阅读
Linux系统编程中的文件描述符调用

Linux服务器被入侵导致冻结的过程

来自:看雪论坛,作者:Hefe https://bbs.pediy.com/thread-22516....
的头像 Linux爱好者 发表于 09-01 16:11 ? 1214次 阅读

从零开始搭建Kubernetes集群步骤

虽然网上有大量从零搭建 K8S 的文章,但大都针对老版本,若直接照搬去安装最新的 1.20 版本会遇....
的头像 Linux爱好者 发表于 09-01 14:33 ? 548次 阅读
从零开始搭建Kubernetes集群步骤

查看Linux服务器性能参数指标教程

一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息。通常来说运维人员、系统....
的头像 Linux爱好者 发表于 09-01 14:25 ? 199次 阅读
查看Linux服务器性能参数指标教程

Linux内核文件Cache机制

Linux内核文件Cache机制(开关电源技术与设计 第二版)-Linux内核文件Cache机制....
发表于 08-31 16:34 ? 18次 阅读
Linux内核文件Cache机制

安装xp win7 mac linux多系统

安装xp win7 mac linux多系统(电源技术审稿严不严)-安装xp、win7、mac、li....
发表于 08-31 16:25 ? 22次 阅读
安装xp win7 mac linux多系统

Linux下Apache服务器的安装和配置

Linux下Apache服务器的安装和配置(现代电源技术的发展概况)-Linux下Apache服务器....
发表于 08-31 16:22 ? 20次 阅读
Linux下Apache服务器的安装和配置

Linux的apache

Linux的apache(ups电源技术转让)-Linux的apache,有需要的可以参考!
发表于 08-31 16:17 ? 14次 阅读
Linux的apache

远程桌面协议是如何工作的 常用的协议有几种

远程桌面协议(RDP)是一个多通道(multi-channel)的协议,让使用者(所在计算机称为用户....
的头像 Les 发表于 08-31 14:37 ? 880次 阅读

并行程序设计中最重要的锁-RCU锁

hi,大家好,今天给大家分享并行程序设计中最重要的锁-RCU锁,RCU锁本质是用空间换时间,是对读写....
的头像 开关电源芯片 发表于 08-27 14:25 ? 270次 阅读

Linux进程间通信趣味介绍

??? 月黑风高夜,突然听得咣当一声,Web服务器的目录下冒出了两个文件,弄出了不小的声响。这两个家....
的头像 深圳东裕光大 发表于 08-27 10:28 ? 1149次 阅读

嵌入式Linux工程师的职业方向是什么

很多学习嵌入式的新人、工程师,在学习到半途中,总会感觉到迷茫,不知道自己从哪方面入手、进阶,也不知道....
的头像 硬件攻城狮 发表于 08-25 16:55 ? 360次 阅读

用来获取linux系统信息的shell脚本

一、脚本 今天主要分享一个shell脚本,用来获取linux系统CPU、内存、磁盘IO等信息。 #!....
的头像 RTThread物联网操作系统 发表于 08-25 16:00 ? 1738次 阅读

OpenCV中的Python实现

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Window....
的头像 人工智能 发表于 08-25 15:55 ? 193次 阅读

人工智能正在改变物流自动化的方式,将为劳动密集型产业带来革新

将人工智能引入物流自动化将大大增强人工智能的影响力。人工智能可以减少常见的半技能任务(如对产品进行分....
发表于 08-25 14:49 ? 979次 阅读

鸟哥的Linux私房菜基础学习篇电子版下载

鸟哥的Linux私房菜基础学习篇电子版下载
发表于 08-23 16:14 ? 70次 阅读

18个用来监控网络使用情况的Linux命令行工具

导读本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的....
的头像 开关电源芯片 发表于 08-23 09:56 ? 186次 阅读
18个用来监控网络使用情况的Linux命令行工具

如何在Android旧手机上搭建一台备份服务器

原作者:Hannah Lee 译者:弯月 本文将向你展示如何使用 UrBackup 和 Linux ....
的头像 开关电源芯片 发表于 08-23 09:40 ? 221次 阅读

linux查看端口被进程占用的方法 Linux与windows的区别

Linux的全称为GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·....
的头像 Les 发表于 08-22 14:23 ? 408次 阅读

Firefly云手机集群服务器解决方案

Firefly云手机服务器解决方案是基于ARM集群芯片和虚拟化技术的一站式解决方案,具有高性能,高集....
发表于 08-20 16:27 ? 2次 阅读

Cluster Server R2集群服务器

查看ClusterServerR2集群服务器规格书,可了解更多内容
发表于 08-20 16:27 ? 2次 阅读

Core-3399Pro-JD4六核高性能AI核心板

查看Core-3399Pro-JD4六核高性能AI核心板规格书,可了解更多内容
发表于 08-20 16:27 ? 10次 阅读

Linux系统移植篇1:STM32MP1微处理器之源码编译

系统移植前说明 关于命令行提示符 : 在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu....
发表于 08-19 15:17 ? 3695次 阅读
Linux系统移植篇1:STM32MP1微处理器之源码编译

Verilog数字系统基础设计中的循环冗余校验

CRC(循环冗余校验) CRC介绍 临时“插播”,后面有实例。 CRC(Cyclic Redunda....
的头像 FPGA与数据通信 发表于 08-17 17:08 ? 3038次 阅读

手机行业的跑分软件是噱头还是实力

一、背景:性能之战 “不服跑个分”已经沦为手机行业的调侃用语,但是实话实说,在操作系统领域“跑分”确....
的头像 FPGA干货 发表于 08-16 15:24 ? 280次 阅读
手机行业的跑分软件是噱头还是实力

Linux内核睡眠的三种状态讲解

1开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:2....
的头像 FPGA干货 发表于 08-16 15:13 ? 251次 阅读

Linux内核用户态是如何睡眠的

4.用户态睡眠 以sleep为例来说明任务在用户态是如何睡眠的。 首先我们通过strace工具来看下....
的头像 FPGA干货 发表于 08-16 15:06 ? 230次 阅读

聚焦IO,从存储的角度剖析vim原理

vim 编辑超大文件,打开很慢,因为会读一遍文件( readfile ),保存的时候很慢,因为会读写....
的头像 开关电源芯片 发表于 08-16 11:29 ? 3029次 阅读
聚焦IO,从存储的角度剖析vim原理

C语言中Linux字节对齐的问题

最近作者在做一个项目,遇到一个问题,运行于ARM上的threadx在与DSP通信采用消息队列的方式传....
的头像 multisim 发表于 08-16 11:25 ? 321次 阅读
C语言中Linux字节对齐的问题

什么是架构设计 如何进行架构设计

API设计 可以把一个??榭闯墒呛诤?,给定一个输入,就会返回确定的结果,或者执行确定的功能, ??橹?...
的头像 multisim 发表于 08-16 10:26 ? 1446次 阅读
什么是架构设计 如何进行架构设计

Linux远程SSH登陆软件MobaXterm_Portable_v20.1

Linux远程SSH登陆软件MobaXterm_Portable_v20.1
发表于 08-16 09:55 ? 35次 阅读

Linux内核ftrace的学习

目录 1. 前言 2. ARM64栈帧结构 3. 编译阶段 3.1 未开启ftrace时的blk_u....
的头像 FPGA干货 发表于 08-13 17:33 ? 505次 阅读
Linux内核ftrace的学习

RT-Thread亮相GOTC全球开源技术峰会

刚刚过去的GOTC全球开源技术峰会,无疑是一场以“开源”为主题的技术盛宴,来自全球顶尖科技创新企业的....
的头像 Linux阅码场 发表于 08-13 15:45 ? 5330次 阅读

探究slab在内核内存管理和用户态Memcached的双重存在

很多基础的概念,将跨越软件的层次而存在。比如slab,对于内核人员,我们都知道slab是buddy之....
的头像 FPGA干货 发表于 08-13 14:55 ? 282次 阅读
探究slab在内核内存管理和用户态Memcached的双重存在

AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)

TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)?;贚inux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 ? 344次 阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)
最好看的最新高清中文字幕,我不卡影院午夜伦不卡,亚洲国产在线精品一区在,yw193.尤物影院 确山县| 灵寿县| 南宁市| 漯河市| 罗山县| 林西县| 丰县| 罗甸县| 阜阳市| 台东市| 高州市| 五寨县| 成都市| 乌拉特中旗| 富裕县| 礼泉县| 连山| 咸阳市| 河东区| 南京市| 辉南县| 永年县| 都兰县| 胶南市| 肥乡县| 忻州市| 万宁市| 棋牌| 饶河县| 黄冈市| 甘谷县| 诏安县| 古丈县| 赤水市| 武冈市| 长岛县| 高阳县| 石林| 邹平县| 青浦区| 宜昌市| http://444 http://444 http://444 http://444 http://444 http://444