为什么在树莓派开发当中都用Python和CC++,而不是用Java,是因为树莓派带不动Java吗

为什么在树莓派开发当中都用Python和CC++,而不是用Java,是因为树莓派带不动Java吗,第1张

不是。

不是性能原因。 C/C++因为执行效率高,而用来开发驱动程序和底层应用,树莓派毕竟是个离硬件很近的东西。 Python因为易学易用,开发便捷,用来给小白玩儿或者快速做原型的。 Java显然不具有这些特性,就比较尴尬的被抛弃了。

其实不只是树莓派,很多Linux发行版里面的软件都是用Python写的。用Python并不是因为特Python运行占用资源比java低,而是因为python存在大量的由C/C++写成的库。Python本身只是起个胶水的作用,把多个C/C++写的库粘在一起组成一个应用。

java也能通过jni(Java Native Interface)调用C/C++写的库,但java这种类型的库的数量和质量不如python。而且java是编译型语言, Python是解释型语言,Python代码不用经过编译就能直接运行,这一定程序上减少了开发时间。所有一般Linux都选用C/C++或者Python做为开发语言。

Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语言的替代品。

Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

    昨天在写关于linux设置脚本开机启动的文章时,有个疑问就是开机时怎么确认运行级别,然后遍历执行/etc/rcNd/目录下的所有服务程序。带着疑问, 在前人的基础上 学习总结一下linux系统初始化的工作的内容,现在树莓派4B上展示出来。

1、加载内核

    当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 *** 作系统接管硬件以后,首先读入 /boot 目录下的内核文件。树莓派4B的内核是Raspbian GNU/Linux 10 (buster),基于Debian。

2、初始化进程init

    内核文件加载以后,运行第一个程序init,它的作用是初始化系统环境。init位于目录/sbin,进程号PID为1,即1号进程,其他所有进程都由init衍生,是init的子进程。

    同时还有个0号进程,idle进程,在系统初始化时由内核kernel自身从无到有创建,通过调用kernel_thread创建一个内核线程去执行init函数,0号进程创建1号进程。

3、运行级别

    具体介绍请参考笔者的文章-Linux运行级别简介  ,但是开机时是怎么确定运行级别的呢?

    init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。但是各个发行版不太一样,init的配置文件也不一样,有可能使用/etc/eventd里面的配置文件,最新版的改用为/etc/init目录。

4、开机启动程序

    具体详情请参考文章-linux中/etc/initd设置开机启动 ,确定运行级别后,执行rcNd目录下的文件,这些链接文件是连接到initd目录下的程序。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。

    比如运行级别为5(图形化多用户)时启动的程序:

5、用户登录

    开机启动程序加载完毕以后用户登录。用户的登录方式有三种:

    命令行登录:init进程调用getty程序。

    ssh登录:init进程调用sshd程序。

    图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm。

6 、login shell

    默认shell时bash,命令行界面,让用户可以直接与 *** 作系统对话。读取环境变量,具体请参考笔者文章-Linux环境变量的设置。

由于北邮校内网需要Drcom拨号,每次用curl命令很麻烦,所以开始了这次写开机启动脚本的过程。

init 进程读取 /etc/inittab文件中的信息,并进入预设的运行级别。

Debian中的运行级别

查看系统当前运行级别使用 runlevel 命令,通常情况下 /etc/rcSd/目录下的启动脚本首先被执行,然后是/etc/rcNd/目录,N为 /etc/inittab 中的initdefault。

/etc/rc2d 中的部分文件如下:

有K开头的文件,有S开头的文件,K的意思是Kill,S为Start。K和S后面紧跟着的数字就是关闭和启动的顺序,数字越大关闭或启动顺序越靠后。

将自定义脚本放在 /etc/initd 目录下面,就可以使用 service yourshellname start|stop 当然需要脚本中写好start,stop功能。但是不能开机自启动。

使用update-rcd函数将脚本设置为开机自启动。

1)设置脚本启动和关闭依赖$remote_fs,$syslog,并且启动运行级别为2-5,关闭运行级别为0,1,6。

update-rcd foobar defaults

上面一条命令就会在/etc/rc2d rc3d rc4d rc5d中创建软链接 S03drcom -> /initd/drcom ,在rc0d rc1d rc6d中创建软链接 K01drcom -> /initd/drcom 。

2)设置脚本启动关闭都为顺序20,并且启动运行级别为2-5,关闭运行级别为0,1,6。

update-rcd foobar start 20 2 3 4 5 stop 20 0 1 6

同理。

3)移除连接。

update-rcd yourshellname remove

参考文献:

[1] 开机自动执行脚本 与 update-rcd

[2] 树莓派开机自启动脚本制作

[3] Debian init 开机启动管理

[4] 树莓派开机启动程序及启动脚本的制作

    树莓派利用两个gpio来 *** 作超声波测距模块,一个gpio *** 作发送超声波,另一个超声波接受返回的超声波,时间差与声音传播速度的积即为距离数值。模块可以测量 3cm – 4m 的距离,模块包括 超声波发射器、超声波接收器和控制电路三部分。 4 个引脚,由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成。Trig 引脚用来接收来自树莓派的控制信号,Echo 引脚用来发送测距结果给树莓派。

    V端口是5V供电,G是负极,T为板卡端口38(gpio28),E为板卡端口40(gpio29)。

    原理为时间差乘以速率来计算距离。

gcc  distance_sensorc -o  distance_sensor  -lwiringPi  #编译C语言

/distance_sensor  #运行程序

运行程序  python distance_sensorpy

最后试了试将程序改为labview通过LINX嵌入式部署到树莓派,最后测试有问题。感觉是时间控制方面有问题,夜深了,留待下次解决吧。

首先是数组就有多个元素,所以你得使用for循环或者while循环一个个打印

字符数组里面最好输入字符,而不是用十六进制,因为字符的话在定义中最后的一个字符ASCII码是 0X7F

以下我帮你改了一下,用每个准确字符去代替。

#include<stdioh>

int main(void)

{

    char buf[4] = {'a','b','c','d'};

    int i;

    for(i = 0; i< 4 ; i++)

        printf("%c ",buf[i]);

    return 0;

}

以上就是关于为什么在树莓派开发当中都用Python和C/C++,而不是用Java,是因为树莓派带不动Java吗全部的内容,包括:为什么在树莓派开发当中都用Python和C/C++,而不是用Java,是因为树莓派带不动Java吗、树莓派Linux启动过程简介、树莓派设置开机启动脚本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9836491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存