uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败

news2024/9/20 12:34:15

问题描述

pinctrl设置引脚复用失败,没有调用到controller中的set_groups_function函数。

问题定位

  1. pinctrl如何注册dm节点
  2. 如何进行设备树中各个设备节点下的复用配置
  3. 为什么没调用到控制器实现的set_groups_function函数
&gpio0 {
	status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&gpioa15_pinctrl>;
};

&pinctrl {
    gpioa15 {
        gpioa15_pinctrl: gpioa15_grp {
            ts,pins = <PB7>;
            mux,val = <5>;
            function = "gpioa15";
            groups = "gpioa15_grp";
        };
    };
};

pinctrl如何注册dm节点

调用过程:

[uboot/drivers/core/device.c]
int device_probe(struct udevice *dev)
	 /* Process pinctrl for everything except the root device, and
	 * continue regardless of the result of pinctrl. Don't process pinctrl
	 * settings for pinctrl devices since the device may not yet be
	 * probed. 
	 * */
	pinctrl_select_state(dev, "default");
		pinctrl_select_state_simple(dev);
		/*
		 * Try full-implemented pinctrl first.
		 * If it fails or is not implemented, try simple one.
		 */
			if (pinctrl_select_state_full(dev, statename))
				return pinctrl_select_state_simple(dev);
	UCLASS_DRIVER(pinctrl) = {
	.id = UCLASS_PINCTRL,
	.post_bind = pinctrl_post_bind,
	.flags = DM_UC_FLAG_SEQ_ALIAS,
	.name = "pinctrl",

	ret = uclass_pre_probe_device(dev);
	ret = uclass_post_probe_device(dev);
		uc_drv->post_probe
			pinctrl_post_bind
				return pinconfig_post_bind(dev);
	pinctrl_select_state(dev, "default");
		pinctrl_select_state_full(dev, statename)
			ret = pinctrl_config_one(config);
				ops = pinctrl_get_ops(pctldev);
				/* this ops was set by controller */
				return ops->set_state(pctldev, config);
	
};

上面的调用过程是通过加log找出来的,log如下:

__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
initr_nand bypass                                                                                                                   
MMC:   __file:drivers/core/device.c __func:device_probe __line:431                                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf741ec0, size 0xa0, name mmc@f0512000, ofnode 10c4, mmc@f0512000                                                     
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf742260, size 0xa0, name mmc@f0513000, ofnode 1158, mmc@f0513000                                                     
__file:drivers/core/device.c __func:device_probe __line:431        

看着就是在pinctrl_select_state_full 函数里出了问题:
每次进入pinctrl_select_state_full 函数只能打印到68行,下面的打印出不来,没有调到pinctrl_config_one,所以设备树里注册的gpioa15_pinctrl没有被配置。

/**
 * pinctrl_select_state_full() - full implementation of pinctrl_select_state
 *
 * @dev: peripheral device
 * @statename: state name, like "default"
 * @return: 0 on success, or negative error code on failure
 */
static int pinctrl_select_state_full(struct udevice *dev, const char *statename)
{
	char propname[32]; /* long enough */
	const fdt32_t *list;
	uint32_t phandle;
	struct udevice *config;
	int state, size, i, ret;

printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
	state = dev_read_stringlist_search(dev, "pinctrl-names", statename);
	if (state < 0) {
		char *end;
		/*
		 * If statename is not found in "pinctrl-names",
		 * assume statename is just the integer state ID.
		 */
		state = simple_strtoul(statename, &end, 10);
		if (*end)
			return -EINVAL;
	}
printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
	snprintf(propname, sizeof(propname), "pinctrl-%d", state);
	list = dev_read_prop(dev, propname, &size);
	if (!list)
		return -EINVAL;

	size /= sizeof(*list);
    printf("__file:%s __func:%s __line:%d size:%d\n", __FILE__, __func__, __LINE__, size);
	for (i = 0; i < size; i++) {
		phandle = fdt32_to_cpu(*list++);
		ret = uclass_get_device_by_phandle_id(UCLASS_PINCONFIG, phandle,
						      &config);
		if (ret) {
			dev_warn(dev, "%s: uclass_get_device_by_phandle_id: err=%d\n",
				__func__, ret);
			continue;
		}
printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
		ret = pinctrl_config_one(config);
		if (ret) {
			dev_warn(dev, "%s: pinctrl_config_one: err=%d\n",
				__func__, ret);
			continue;
		}
	}

	return 0;
}

初步怀疑是69行这里state = dev_read_stringlist_search(dev, "pinctrl-names", statename); 返回的state是个非法值。打印出来看看:
果然都是非法值,-61!!!

pinctrl_probe                                                                                                                       
reg_base:f0389000                                                                                                                   
npins  : 78                                                                                                                         
nfuncs : 1                                                                                                                          
ngroups: 1                                                                                                                          
                                                                                                                                    
func:gpioa15, ngroups = 1                                                                                                           
grp_index = 0                                                                                                                       
group[0] name gpioa15_grp                                                                                                           
mux_val: 0x5                                                                                                                        
npins: 1                                                                                                                            
15                                                                                                                                  
ts_pinctrl_parse_dt done                                                                                                            
ts pinctrl initialized                                                                                                              
__file:drivers/core/device.c __func:device_probe __line:523                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
initr_nand bypass                                                                                                                   
MMC:   __file:drivers/core/device.c __func:device_probe __line:431                                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf741ec0, size 0xa0, name mmc@f0512000, ofnode 10c4, mmc@f0512000                                                     
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                          

uboot的异常宏号码列表
uboot/include/linux/errno.h

#define	EBFONT		59	/* Bad font file format */
#define	ENOSTR		60	/* Device not a stream */
#define	ENODATA		61	/* No data available */

dev_read_stringlist_search的定义:

static inline int dev_read_stringlist_search(const struct udevice *dev,
					     const char *propname,
					     const char *string)
{
	return ofnode_stringlist_search(dev_ofnode(dev), propname, string);
}

int ofnode_stringlist_search(ofnode node, const char *property,
			     const char *string)
{
	if (ofnode_is_np(node)) {
	//maybe bug here?
		return of_property_match_string(ofnode_to_np(node),
						property, string);
	} else {
		int ret;

		ret = fdt_stringlist_search(gd->fdt_blob,
					    ofnode_to_offset(node), property,
					    string);
		if (ret == -FDT_ERR_NOTFOUND)
			//maybe bug here?
			return -ENODATA;
		else if (ret < 0)
			return -EINVAL;

		return ret;
	}
}

上面注释中有两个位置可能返回了ENODATA,此处已经开始怀疑是不是设备树描述地有问题了。回头看了一下dts中,pinctrl-names属性是存在的。。。
但是dts虽然有,编译出dtb到后不一定还是存在的,这里通过请教前辈,有哪些fdt的调试手段,前辈推荐了fdt命令,在uboot中可以用于显示设备树信息:
如何使用:

  1. 通过printenv,找到fdtcontroladdr属性的值,此为fdt所在地址
  2. 运行fdt fdtcontroladdr
  3. 运行fdt list
    找到gpio和pinctrl节点所在:
    在这里插入图片描述
    可以看到gpio及其pinctrl配置,实际已经配置进去了。
    从这里开始,我就觉得不对劲了,只能开始请神了,所以我找了原先的pinctrl mantainer。原先的mantainer说:
    uboot中GPIO节点的pinctrl配置,是必须在gpio命令运行完毕之后,才会进行pinctrl的配置的!

恍然大悟,之前没有注意过这个特性,我运行了gpio set 15 1后:

=> gpio set 15 1                                                                                                                    
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpio@f0390000                                                                                                             
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
fdt_stringlist_search len:8                                                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:0 name:default                            
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:83                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:90 size:1                                           
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpioa15                                                                                                                   
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpioa15_grp                                                                                                               
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:100                                                 
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:32                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:34                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:36                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:38                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:44                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:36                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:38                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:44                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:50                                                         
__func:pinctrl_generic_set_state line:340                                                                                           
__func:pinctrl_generic_set_state_subnode line:301                                                                                   
>>>get group[0] gpioa15_grp                                                                                                         
__func:pinctrl_generic_set_state_subnode line:326                                                                                   
__func:pinctrl_generic_set_state_one line:250                                                                                       
__func:pinctrl_generic_set_state_one line:261                                                                                       
__func:pinmux_enable_setting line:119                                                                                               
set_mux, function:0, group:0                                                                                                        
group name:gpioa15_grp, func name:gpioa15 mux_val:5                                                                                 
pin15, wr 0x00000000f038912c, val 0x50000000                                                                                        
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
failed to get gpio clock                                                                                                            
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:pa                                                                                                                        
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
gpio: pin 15 (gpio 15) value is 1                                                                                                   
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431  

可以看到name:default已经找到了,再使用devmem查看pinctrl对应的B组寄存器值:

=> md 0xf038912c                                                                                                                    
f038912c: 50000000 00000000 00000000 00000000    ...P............                                                                   
f038913c: 00000000 00000000 00000000 00000000    ................                                                                   
f038914c: 00000000 00000000 00000000 00000000    ................                                                                   
f038915c: 00000000 00000000 00000000 00000000    ................                                                                   
f038916c: 00000000 00000000 00000000 00000000    ................                                                                   
f038917c: 00000000 00000000 00000000 00000000    ................                                                                   
f038918c: 00000000 00000000 00000000 00000000    ................                                                                   
f038919c: 00000000 00000000 00000000 00000000    ................                                                                   
f03891ac: 00000000 00000000 00000000 00000000    ................                                                                   
f03891bc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891cc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891dc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891ec: 00000000 00000000 00000000 00000000    ................                                                                   
f03891fc: 00000000 000000ff 00000000 00000000    ................                                                                   
f038920c: 00000000 000000ff 00000000 00000000    ................                                                                   
f038921c: 00000000 00000000 00000000 00000000    ................                                                                   
=>   

func5配置成功。

TODO:gpio中如何调用到pinctrl配置接口

推荐链接:
https://blog.csdn.net/ZHONGCAI0901/article/details/117986327

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1546604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构进阶篇 之 【二叉树】详细概念讲解(带你认识何为二叉树及其性质)

有朋自远方来&#xff0c;必先苦其心志&#xff0c;劳其筋骨&#xff0c;饿其体肤&#xff0c;空乏其身&#xff0c;鞭数十&#xff0c;驱之别院 一、二叉树 1、二叉树的概念 1.1 二叉树中组分构成名词概念 1.2 二叉树的结构概念 1.3 特殊的二叉树 2、二叉树的存储结构 …

c语言--实用调试技巧

1什么是bug 2调试是什么&#xff0c;有多重要&#xff1f; 3debug与release 4windows环境调试简绍 5一些调试的实例 6如何写出好的代码&#xff08;便于调试&#xff09; 7编程常见错误 1什么是bug 导致计算机出现问题就叫bug 2调试是什么&#xff0c;有多重要&#x…

4.线性数据结构——1.vector弥补数组的缺陷及其底层逻辑

数组的缺陷 数组在定义时大小固定&#xff0c;不能改变如果要定义在main内部&#xff0c;数组大小不能超过一百万&#xff08;6个0&#xff09;&#xff0c;超过需要定义为全局变量 定义在main内部&#xff0c;数组创建在内存的栈中&#xff0c;作为局部变量&#xff0c;但栈的…

基于stm32与TJC3224T124_011串口屏的PID调参器(附完整工程)

电赛在即&#xff0c;每次比赛调PID都是一件比较繁琐的事。每次都要在程序中改完再烧录到板子上&#xff0c;特别耗时。正好最近发现实验室的一块串口屏比较好玩。 于是就做了这个调PID的东西。它可以通过串口直接修改PID的值&#xff0c;从而达到快速调PID的目的。下面我将完整…

c++初阶------c++代码模块

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

MATLAB 公共区域的点云合并(46)

MATLAB 公共区域的点云合并(46) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 点云配准后,或者公共区域存在多片点云对场景进行冗余过量表达时,我们需要将点云进行合并,Matlab点云工具中提供了这样的合并函数,通过指定网格步长,对初始点云进行过滤。 函数主要实…

[STL]priority_queue类及反向迭代器的模拟实现

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a; priority_queue类及反向迭代器 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 向着c&…

特征融合篇 | YOLOv8改进之将主干网络SPPF更换为SimSPPF / SPP-CSPC / SPPF-CSPC

前言:Hello大家好,我是小哥谈。SimSPPF是YOLOv6中提出的一种改进的空间金字塔池化方法,它是SPPF的升级版。SimSPPF通过在不同尺度上使用不同大小的池化核来提取特征,从而提高了检测器的性能。与SPPF相比,SimSPPF可以在不增加计算成本的情况下提高检测器的性能。本节课就教…

【软件设计师】原码反码补码移码

数值1数值-1原码0000000110000001反码0000000111111110补码0000000111111111移码1000000101111111 正数 00000001 负数 10000001 正数&#xff1a;原码、反码、补码一样 负数&#xff1a;反码是原码符号位不变&#xff0c;其他取反&#xff1b;补码是反码1 移码是补码首位取…

八、C#计数排序算法

简介 计数排序是一种非比较性的排序算法&#xff0c;适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数&#xff0c;然后根据元素的大小依次输出排序结果。 实现原理 首先找出待排序数组中的最大值max和最小值min。 创建一个长度为max-min1的数组count…

Ambari——编译——解决替换yarn 版本后 系mvn 打包找不到yarn 文件问题

您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 报错原因&#xff1a; [ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.4:yarn (yarn install) on project amb…

入驻抖音小店后这些设置必须打开! 非常重要!否则小店无法运行!

哈喽~我是电商月月 大家入驻完抖音小店后是不是就不管了&#xff0c;直接去选品&#xff1f; 我现在告诉你&#xff0c;直接选品后你会发现你的抖音小店根本运行不了&#xff01; 为什么&#xff1f;那是因为这些设置你没打开&#xff1a; 一抖音号绑定店铺官方账号 抖音小…

Covalent Network(CQT)的以太坊时光机:在 Rollup 时代确保长期数据可用性

以太坊正在经历一场向 “Rollup 时代” 的转型之旅&#xff0c;这一转型由以太坊改进提案 EIP-4844 推动。这标志着区块链技术的一个关键转折&#xff0c;采用了一种被称为“数据块&#xff08;blobs&#xff09;”的新型数据结构。为了与以太坊的扩容努力保持一致&#xff0c;…

面试笔记——Java集合篇

Java集合框架体系 重点&#xff1a;单列集合——ArrayList、LinkedList&#xff1b;双列集合——HashMap、ConcurrentHashMap。 List相关 数组&#xff08;Array&#xff09; 是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 数组获取其他元素&#xff1a; 为什…

【微服务】接口幂等性常用解决方案

一、前言 在微服务开发中&#xff0c;接口幂等性问题是一个常见却容易被忽视的问题&#xff0c;同时对于微服务架构设计来讲&#xff0c;好的幂等性设计方案可以让程序更好的应对一些高并发场景下的数据一致性问题。 二、幂等性介绍 2.1 什么是幂等性 通常我们说的幂等性&…

leetcode 714

leetcode 714 题目 例子 思路1 使用dp[n][2] 存储最佳利润值&#xff0c;动态规划的思路&#xff0c;重要的是转移方程。 代码1 class Solution { public: int maxProfit(vector& prices, int fee) { int n prices.size(); //dp[i][0] 前i天手里没有股票的最大利润 //…

Share-ChatGPT官网UI/文件上传/联网搜索/GPTS 一并同步

地址&#xff1a;Share-ChatGPT 文章目录 界面UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&#xff0c;写论文视频演示仓库地址 界面 支持多账号同时管理&#xff0c;合理利用资源&#xff1a; UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&a…

老家稳定月薪3000工作和互联网企业3万怎么选?

这是发生在身上的真事。其实刚回老家心里落差非常的大&#xff0c;老家也不需要信息安全非常专业的人才&#xff0c;最终因为各种综合原因选择了回老家&#xff0c;有父母的因素&#xff0c;有4年2次被优化的因素&#xff0c;有互联网行业35岁的因素等等。 我回老家发展很多人…

C语言(结构体,联合体,枚举的讲解)

这期我们来讲解结构体&#xff0c;联合体&#xff0c;以及枚举的讲解&#xff0c;首先我们从概念开始一步一步的了解。 1&#xff0c;结构体 1.1概念 C 语言中的结构体是一种用户自定义的数据类型&#xff0c;它允许你将不同类型的变量组合在一起&#xff0c;从而形成一个新…

集合(下)Map集合的使用

文章目录 前言一、Map接口二、Map接口的实现类 1.HashMap类2.TreeMap类总结 前言 Map集合没有继承Collection接口&#xff0c;不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合&#xff0c;也有相应的许多方法。类…