当前位置: 首页 > news >正文

全志V3S嵌入式驱动开发(开发环境再升级)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们陆陆续续开发了差不多有10个驱动,涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的时候都很麻烦,譬如说,如果是驱动代码的问题,就需要把sd卡拆下来,重新烧入;再比如说,uboot和linux之间不能连续运行,需要手动做一些配置之后,再启动linux kernel;还比如说,使用480*272的dtb文件之后,之前的网卡功能都丢失了,很不方便。所以针对这些问题,我们想办法集中处理一下,这样有利于后期的复杂驱动调试、以及上层软件开发。

        目前已经升级的开发环境主要有这7个方面,

        a)解决uboot不能正常启动linux kernel的问题;

        b)解决开机后需要输入root用户名的问题;

        c)添加开机启动脚本的问题;

        d)添加网卡;

        e)安装ftp服务器软件;

        f)安装telnet服务器软件;

        g)自由升级zImage和dtb文件。

        注1: 实际使用的时候,不要删除ftp账户。假设root账户无法登录,这个时候之前创建的ftp账户还可以派上用场,可以先用ftp登录,然后su到root上面去。

        注2:另外一个建议,就是大家上传可执行文件的时候,一定要先压缩再解压,这样基本肯定不会出问题。

1、解决uboot不能正常启动linux kernel的问题

        要解决这个问题,关键在于增加CONFIG_BOOTCOMMAND和CONFIG_BOOTARGS这两个宏。因为我们使用的是v3s这颗芯片,所以在uboot上面,可以把上述两个宏添加到include/configs/sun8i.h这个文件下面,

#include <configs/sunxi-common.h>#ifdef CONFIG_BOOTCOMMAND
#undef CONFIG_BOOTCOMMAND
#endif#define CONFIG_BOOTCOMMAND	  "setenv bootm_boot_mode sec; "\"load mmc 0:1 0x41000000 zImage;"  \"load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb;" \"bootz 0x41000000 - 0x41800000;"#ifdef CONFIG_BOOTARGS
#undef CONFIG_BOOTARGS
#endif#define CONFIG_BOOTARGS      "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0"

        注意两个宏的设置都放在include头文件之后。当然因为这个文件发生了修改,那么整个uboot就需要重新编译一下,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        等编译结束,生成了我们需要的bin文件之后,就可以pc上插入读卡器,准备bin文件烧入了,

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/u-boot-3s-current$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
[sudo] password for feixiaoxing: 
389+1 records in
389+1 records out
398367 bytes (398 kB, 389 KiB) copied, 1.71158 s, 233 kB/s

        烧入的工具是利用ubuntu虚拟机里面的dd命令来完成的。为了保证烧入ok,可以继续输入一个sync命令。结束后,退出sd卡,重新把micro sd卡插入到开发板上,不出意外的话,就可以看到uboot、kernel连续启动的过程了,

        如果你已经可以看到这样的内容,代表当前uboot可以持续启动linux kernel了。

2、解决开机后需要输入root用户名的问题

        如果当前还处于开发阶段,每次都需要输入root用户名,其实是很令人反感的一个事情。虽然是免密登录,但是还是想着可以更方便一点。这个时候,完全可以通过文件配置的方法来解决这一问题。

# Put a getty on the serial port
#console::respawn:/sbin/getty -L  console 0 vt100# GENERIC_SERIAL
ttyS0::once:/bin/login root

        在原来/etc/inittab里面注释掉getty的内容,添加login这一行,那么我们每次开机的时候就不需要手动输入root这个用户了。并且,开机之后,自动切换到/root这个目录下面。

3、添加开机启动脚本的问题

        有一些程序或者配置,我们其实是希望系统启动后可以默认执行的,比如这个时候就希望linux可以自动帮我们执行一些脚本,例如auto.sh。要实现这个目标,这个时候,可以这么做,分成三步。

        第一步,在/etc/init.d/rcS最后一行添加这么一句,

/etc/rc.local

        第二步,创建/etc/rc.local文件,填充下面这些内容,同时chmod +x /etc/rc.local,

#!/bin/sh
/root/auto.sh &

        第三步,创建/root/auto.sh文件,添加一点测试内容,比如

echo "hello, world"

        同样auto.sh需要chmod +x auto.sh设置一下,让它变成可执行文件。为了测试我们的配置有没有效果,可以按下板子上的复位键,如果看到这些输出,大体可以认为我们的设计是ok的。

        仔细找一下,还是发现了hello, world的身影。这说明我们的配置是正确的。

4、添加网卡

        观察发现,sun8i-v3s-licheepi-zero-with-480x272-lcd.dts和sun8i-v3s-licheepi-zero-with-lcd.dtsi这两个文件中,都没有关于以太网的配置。而之前sun8i-v3s-licheepi-zero-dock.dts中则包含了相关的内容,这个时候我们要做的,就是把dsun8i-v3s-licheepi-zero-dock.dts中关于网卡的配置挪到sun8i-v3s-licheepi-zero-with-lcd.dtsi当中去就可以了,

	aliases {ethernet0 = &emac;};

        首先是ethernet0指向了emac,

&emac {status = "okay";
};

        其实是emac中的status设置为okay。别看这两步很简单,但是如果不做的话,网卡就是启动不起来。当然有了这两点还是不够的,我们需要在/etc/network/interfaces中增加一点配置,

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.230
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8

        从脚本上看,系统启动后除了配置loopback之外,还需要添加eth0,并且需要进一步设置ip、netmask和gateway。这一顿操作之后,如果pc电脑还在同一网段,基本就可以和电脑之间实现ping的正常通讯了。

# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:00:A4:52:F3:CC  inet addr:192.168.0.230  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:384 errors:0 dropped:0 overruns:0 frame:0TX packets:162 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:33241 (32.4 KiB)  TX bytes:7140 (6.9 KiB)Interrupt:36 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)# ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100): 56 data bytes
64 bytes from 192.168.0.100: seq=0 ttl=128 time=92.529 ms
64 bytes from 192.168.0.100: seq=1 ttl=128 time=12.744 ms
64 bytes from 192.168.0.100: seq=2 ttl=128 time=38.267 ms
64 bytes from 192.168.0.100: seq=3 ttl=128 time=60.146 ms
64 bytes from 192.168.0.100: seq=4 ttl=128 time=84.125 ms
64 bytes from 192.168.0.100: seq=5 ttl=128 time=80.020 ms
^C
--- 192.168.0.100 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 12.744/61.305/92.529 ms

5、安装ftp软件

        嵌入式ftp,一般都会使用vsftpd这个软件。大家可以通过buildroot来进行编译,

         选中了vsftpd之后,就可以开始make编译。实际处理中,如果发现buildroot下载vsftpd下载比较困难,可以帮助它下载一下,然后拷贝到./dl目录下,再编译也是可以的。

        编译结束后,所有的根文件都在./output/target目录下,这里有两个文件需要拷贝。一个是usr/sbin下面的vsftpd,另外一个是etc/下面的vsftpd.conf。我们也需要把它拷贝到sd卡对应的根文件目录下。

        这个vsftpd.conf需要按照下面这些内容重新配置下,如果嫌麻烦,可以直接拷贝下面这些内容,粘贴上去,

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
listen=YES
allow_writeable_chroot=YES

        除此之外,还需要几个操作步骤,

touch /etc/vsftpd.chroot_list
mkdir /usr/share/emptyuseradd ftp   #增加新用户ftp,密码是ftpmkdir /home/ftp
chown ftp:ftp /home/ftp
chmod 755 /home/ftp

        有了这些做铺垫,直接shell输入/usr/sbin/vsftpd &之后,服务器就起来了。为了验证是不是真的有效,可以用Filezilla客户端做一个测试,即输入192.168.0.230,用户名和密码都是ftp,端口21,连接看看是否成功,如果成功,进一步验证下文件上传、下载是否成功。

        当然,现在有个小问题就是,每一次传输的时候,好像都会有一个vsftpd进程起来,这导致ps aux的时候看到好多vsftpd进程。确实有点奇怪,只是暂时还没有影响使用。实在受不了的话,只能killall vsftpd删除一下。

        当然,比较优雅一点的办法,就是在vsftpd.conf里面添加一条max_per_ip=1,这也能达到我们的目的。

6、设置telnetd

        之前我们和板子之间通信的时候都是走的串口ttyS0,这没问题。但是如果能够使能telnet访问到开发板,这样就显得更方便了。好在telnetd的引用也不复杂,只需要在busybox开放telnetd即可。首先cd到buildroot目录下,输入make busybox-menuconfig,进而在Networking Utilities中选择telnetd即可,

        选择好之后,直接make。这样buildroot会生成新的busybox。我们都知道,根文件的很多命令都来自于这个busybox。所以,下一步就是利用压缩的方法,把新的busybox通过ftp上传到开发板上面。启动方式也很直接,就是./busybox telnetd -l /bin/sh &。此时需要验证一下telnet的23号端口有没有打开,输入netstat -an即可看到,

# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      
netstat: /proc/net/tcp6: No such file or directory
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  4      [ ]         DGRAM                      1444 /dev/log
unix  2      [ ]         DGRAM                      1949 
unix  2      [ ]         DGRAM                      1448 

        有了telnet之后,测试就可以脱离串口,pc电脑也可以离开开发板,感觉人一下子解放出来,建议大家多试试telnet调试。

7、快速升级zImage和dtb文件

        之前重新编译zImage和dtb文件的时候,都是需要独立烧入sd卡,使用十分不方便。现在有了网络之后,升级过程只需要两部就可以完成,

        第一,将升级前的文件用ftp拷贝到开发板,注意压缩;

        第二,mount /dev/mmcblk0p1 /mnt,将原来的文件删除,替换成新传上来的解压文件;

        第三,重启电脑,确认功能是否ok即可。

相关文章:

全志V3S嵌入式驱动开发(开发环境再升级)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动&#xff0c;涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的…...

ChatGPT:人工智能助手的新时代

ChatGPT&#xff1a;人工智能助手的新时代 文章目录 ChatGPT&#xff1a;人工智能助手的新时代引言ChatGPT的原理GPT-3.5架构概述预训练和微调过程生成式对话生成技术 ChatGPT的应用场景智能助理客服机器人虚拟角色教育辅助创意生成个性化推荐 ChatGPT的优势ChatGPT的使用技巧与…...

【面试】二、Java补充知识

JVM中的存储 JVM的五块存储区&#xff1a; 方法区&#xff08;线程共享&#xff09; 方法区用来存储类的各种信息&#xff08;类名、方法信息等&#xff09;、静态变量、常量和编译后的代码也存储在方法区中 方法区中也存在运行时常量池 ​ 常量池中会存放程序运行时生成的各种…...

LISTENER、TNSNAMES和SQLNET配置文件

LISTENER、TNSNAMES和SQLNET配置文件 用户连接验证listener.ora文件配置监听日志local_listener参数 tnsnames.ora文件配置 sqlnet.ora文件配置 用户连接验证 Oracle数据库中用户有三种常见的登录验证方式&#xff1a; 通过操作系统用户验证&#xff1a;必须是在数据库服务器…...

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目&#xff1a;仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 …...

悟道3.0全面开源!LeCun VS Max 智源大会最新演讲

夕小瑶科技说 原创 作者 | 小戏 2023 年智源大会如期召开&#xff01; 这场汇集了 Geoffery Hinton、Yann LeCun、姚期智、Joseph Sifakis、Sam Altman、Russell 等一众几乎是 AI 领域学界业界“半壁江山”的大佬们的学术盛会&#xff0c;聚焦 AI 领域的前沿问题&#xff0c…...

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…...

wkhtmltopdf踩坑记录

1. 不支持writing-mode。 需求是文字纵向排列&#xff0c;内容从左到右&#xff0c;本来用的是writing-mode: tb-rl;&#xff0c;插件转pdf后发现失效。 解决方法&#xff1a; 让每一列文字单独用一个div容器包裹&#xff0c;对它的宽度进行限制&#xff0c;控制每一行只能出现…...

贪心算法part2 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 122.买卖股票的最佳时机II思路思路代码官方题解困难 55. 跳跃游戏思路思路代码官方题解代码困难 45.跳跃游戏II思路思路代码困难 今日收获 122.买卖股票的最佳时机II 122.买卖股票的最佳时机II 思路 局部最优&#xff1a;将当天价格和前一天比较&#xff0c;价格涨…...

[C++]异常笔记

我不怕练过一万种腿法的对手,就怕将一种腿法 练一万次的对手。 什么是C的异常 在C中&#xff0c;异常处理通常使用try-catch块来实现。try块用于包含可能会抛出异常的代码&#xff0c;而catch块用于捕获并处理异常。当异常被抛出时&#xff0c;程序会跳过try块中未执行…...

浅谈一级机电管道设计中的压力与介质温度

管道设计是工程设计中的一个非常重要的部分&#xff0c;管道的设计需要考虑到许多因素&#xff0c;其中就包括管道设计压力分类和介质温度分类。这两个因素是在设计管道时必须非常严格考虑的&#xff0c; 首先是管道设计压力分类。在管道设计中&#xff0c;根据工作要求和要传输…...

Docker网络模型(八)使用 macvlan 网络

使用 macvlan 网络 一些应用程序&#xff0c;特别是传统的应用程序或监控网络流量的应用程序&#xff0c;期望直接连接到物理网络。在这种情况下&#xff0c;你可以使用 macvlan 网络驱动为每个容器的虚拟网络接口分配一个MAC地址&#xff0c;使其看起来像一个直接连接到物理网…...

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的&#xff0c;要改变文本在文本域中的位置&#xff0c;可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容&#xff0c;例如&#xff0c;如何在文本域中放置文本。 如果希望视图文本显示在上方&a…...

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下&#xff1a; 可用性&#xff1a;可用性是分…...

音视频领域的未来发展方向展望

文章目录 音视频领域的未来发展方向全景音视频技术虚拟现实和增强现实的区别 人工智能技术可视化智能分析智能语音交互图像识别和视频分析技术 语音处理智能推荐技术远程实时通信 流媒体技术未来方向 音视频领域的未来发展方向 全景音视频技术&#xff1a;全景音视频技术是近年…...

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP&#xff08;Network Time Protocol&#xff09;网络时间协议&#xff0c;是用来使计算机时间同步的一种协议&#xff0c;它可以使计算机对其服务器或时钟源做同步…...

基于BP神经网络对MNIST数据集检测识别(numpy版本)

基于BP神经网络对MNIST数据集检测识别 1&#xff0e;作者介绍2&#xff0e;BP神经网络介绍2.1 BP神经网络 3&#xff0e;BP神经网络对MNIST数据集检测实验3.1 读取数据集3.2 前向传播3.3 损失函数3.4 构建神经网络3.5 训练3.6 模型推理 4&#xff0e;完整代码 1&#xff0e;作者…...

HTML5-创建HTML文档

HTML5中的一个主要变化是&#xff1a;将元素的语义与元素对其内容呈现结果的影响分开。从原理上讲这合乎情理。HTML元素负责文档内容的结构和含义&#xff0c;内容的呈现则由应用于元素上的CSS样式控制。下面介绍最基础的HTML元素&#xff1a;文档元素和元数据元素。 一、构建…...

Vue中Axios的封装和API接口的管理

一、axios的封装 在vue项目中&#xff0c;和后台交互获取数据这块&#xff0c;我们通常使用的是axios库&#xff0c;它是基于promise的http库&#xff0c;可运行在浏览器端和node.js中。他有很多优秀的特性&#xff0c;例如拦截请求和响应、取消请求、转换json、客户端防御XSR…...

MLIR面试题

1、请简要解释MLIR的概念和用途&#xff0c;并说明MLIR在编译器领域中的重要性。 MLIR(Multi-Level Intermediate Representation)是一种多级中间表示语言&#xff0c;提供灵活、可扩展和可优化的编译器基础设施。MLIR的主要目标是为不同的编程语言、领域专用语言(DSL)和编译器…...

***杨辉三角_yyds_LeetCode_python***

1.题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows …...

Mac使用DBeaver连接达梦数据库

Mac使用DBeaver连接达梦数据库 下载达梦驱动包 达梦数据库 在下载页面随便选择一个系统并下载下来。 下载下来的是zip的压缩包解压出来就是一个ISO文件&#xff0c;然后我们打开ISO文件进入目录&#xff1a;/dameng/source/drivers/jdbc 进入目录后找到这几个驱动包&#x…...

spring.expression 随笔0 概述

0. 我只是个普通码农&#xff0c;不值得挽留 Spring SpEL表达式的使用 常见的应用场景:分布式锁的切面借助SpEL来构建key 比较另类的的应用场景:动态校验 个人感觉可以用作控制程序的走向&#xff0c;除此之外&#xff0c;spring的一些模块的自动配置类&#xff0c;也会在Cond…...

从Cookie到Session: Servlet API中的会话管理详解

文章目录 一. Cookie与Session1. Cookie与Session2. Servlet会话管理操作 二. 登录逻辑的实现 一. Cookie与Session 1. Cookie与Session 首先, 在学习过 HTTP 协议的基础上, 我们需要知道 Cookie 是 HTTP 请求报头中的一个关键字段, 本质上是浏览器在本地存储数据的一种机制,…...

docker数据管理与网络通信

一、管理docker容器中数据 管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。 1、 数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻…...

怎么查询电脑的登录记录及密码更改情况?

源头是办公室公用的电脑莫名其妙打不开了&#xff0c;问别人也都不知道密码是多少 因为本来就没设密码啊&#xff01;&#xff08;躺倒&#xff09; 甚至已经想好了如果是50万想攻破电脑&#xff0c;被po抓住要怎么花这笔钱了 是我想太多 当然最后也没解决&#xff0c;莫名…...

《三》TypeScript 中函数的类型

TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义&#xff1a;function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…...

深入学习 Mysql 引擎 InnoDB、MyISAM

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 &#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#…...

【华为OD统一考试B卷 | 100分】阿里巴巴找黄金宝箱(V)(C++ Java JavaScript Python)

题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。 输入描述 第一行输入一个数字字串,数字之间…...

六步快速搭建个人网站

目录 第一步、选择搭建平台WordPress 第二步、选域名 1&#xff09;域名在哪买&#xff1f; 2&#xff09;域名怎么选&#xff1f; 3&#xff09;以阿里云为例&#xff0c;讲解怎么买域名 第三步、选择服务器 第四步、申请主机、安装WordPress 第五步、选择WordPress模…...

广西城乡建设委员会的网站/怎么联系百度客服

原文&#xff1a;https://jingyan.baidu.com/article/5bbb5a1b634cca53eba179ce.html 首先说一下密码必须是6~18位之间的数字&#xff0c;正则表达式为"^[0-9]{6,18}$"&#xff0c;其中[0-9]表示必须是数字&#xff0c;{6,18}表示必须在6到18位之间&#xff0c;代码如…...

网站建设中 很快回来/双11各大电商平台销售数据

工作中常会用到数据分析&#xff0c;可能是月数据分析&#xff0c;也可能是年&#xff0c;因为从事的岗位是运营&#xff0c;所以运营少不了都会汇总数据&#xff0c;然后通过数据分析&#xff0c;得出结论&#xff0c;再根据结论思考运营的新方向。所以几乎每日&#xff0c;每…...

眼科医院网站设计怎么做/天津优化网络公司的建议

首先我们打开一个测试用的文档。 然后&#xff0c;如果我们需要隐藏某一列&#xff0c;则选中这一列。 在【开始】选项卡的“单元格”组中单击【格式】按钮 在打开的下拉菜单中选择【隐藏和取消隐藏】&#xff0c;根据下级菜单中的相关命令来进行行列的隐藏操作。 选择【隐藏行…...

网站建设需要多少工种/优秀企业网站欣赏

排序在我们的生活和生产中是很重要的, 据说在计算时代早期, 大家普遍认为30%的计算周期都用在了排序上, 现在的这个比例下降了, 原因可能是排序算法更加高效, 但绝不可能是因为排序的重要性降低了 这篇文章不会像书上说的那样实现Comparable接口, 接下来的所有代码都将是对整型…...

网站开发语言学习/搜索引擎优化的七个步骤

在小程序开发中&#xff0c;var that this的声明很常见。举个例子&#xff0c;代码如下&#xff01; 示例代码1 //index.js Page({ data: { toastHidden: true, }, loadData: function () { var that this//这里声明了that&#xff1b;将this存在that里面 wx.request…...

WordPress多域名登录/搜索引擎优化排名技巧

Monica◆ ◆ ◆ 神经质外加控制欲的莫妮卡 莫妮卡是《六人行》的中心人物&#xff0c;其他五人可以说就是由她延伸出来的。 [个性]像是妈妈般的照顾大家&#xff0c;爱管闲事&#xff0c;让她成为大家的支柱。在市区最炫餐厅担任厨师&#xff0c;不论工作和生活上&#xff0c;凡…...