我不吃辣。
码龄3年
关注
提问 私信
  • 博客:16,745
    问答:408
    17,153
    总访问量
  • 12
    原创
  • 88,041
    排名
  • 779
    粉丝
  • 学习成就

个人简介:快乐的嵌入式

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2022-05-24
博客简介:

weixin_71330973的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    202
    当月
    0
个人成就
  • 获得257次点赞
  • 内容获得24次评论
  • 获得285次收藏
创作历程
  • 12篇
    2024年
成就勋章
TA的专栏
  • linux基础
    4篇
  • 数据结构
    7篇
  • Linux文件IO
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

有佬能教我这怎么回事吗

答:

有没有可能是中文路径原因?

回答问题 2024.07.30

标准库和hal库的区别

答:

STM32中的标准库(Standard Peripheral Library,有时也称为SPL)和HAL库(Hardware Abstraction Layer)都是用于访问和控制STM32微控制器外设的固件库,但它们在设计理念、使用方式以及适用场景上存在一些明显的区别。

设计理念:
标准库:它的设计目标是提供对STM32微控制器的底层寄存器和外设的直接访问。标准库的设计更侧重于提供高度灵活性和低层次的硬件控制,以满足对性能和资源的严格要求。开发人员使用标准库时,可以直接操作寄存器来配置和控制微控制器的功能,但这也需要手动编写大量的底层代码。
HAL库:HAL库是STMicroelectronics为了提供更高级别的抽象和简化开发而引入的。它的设计目标是简化固件开发,让开发者更加关注应用层逻辑,而无需深入了解底层硬件。HAL库通过提供一组统一的API函数,将底层硬件操作抽象为高级函数调用,从而减少了编写底层代码的工作量。

使用方式和特点:
标准库:标准库提供了对STM32微控制器外设的底层驱动,其设计更接近寄存器操作,为开发者提供了更多的控制权。但是,这也意味着使用标准库需要更深入地理解底层硬件。标准库针对特定的STM32系列提供相应的库,每个外设驱动都由一组函数组成,这组函数覆盖了该外设的所有功能。
HAL库:HAL库提供了一套统一的API,用于访问STM32系列微控制器的外设。这种结构统一的API和驱动结构使得开发者可以快速上手,并简化了许多硬件操作。此外,HAL库支持STM32全系列微控制器,具有跨平台支持的特性。同时,HAL库与STM32CubeMX工具集成,可以自动生成HAL库的初始代码,方便开发者配置硬件。
适用场景:
标准库:由于其更接近底层硬件操作,标准库适用于对性能要求较高、对代码大小和效率有严格要求的项目。
HAL库:由于其易用性和可移植性,HAL库更适合那些希望简化固件开发、减少底层代码编写工作量的开发者。
综上所述,标准库和HAL库在STM32微控制器的固件开发中各有其优势和适用场景。开发者可以根据项目的具体需求和个人的技术背景选择合适的库进行开发。

回答问题 2024.04.21

C语言字符串函数(带图文,建议收藏)

最近在做公司的项目发现字符串函数在开发中使用频率非常高所以今天写下这篇文章加深自己的记忆,并且带同学们熟悉一下常用的字符串函数有哪些。
原创
发布博客 2024.04.21 ·
1013 阅读 ·
18 点赞 ·
2 评论 ·
25 收藏

谁来帮帮我,c语言问题

答:

为什么是8
表达式 (a>b)?a++:b++ 是一个三元运算符表达式,它的工作方式是:如果 a>b 为真(即 a 大于 b),则整个表达式的值就是 a++(先返回 a 的当前值,然后将 a 加 1);如果 a>b 为假,则整个表达式的值就是 b++(先返回 b 的当前值,然后将 b 加 1)。

在你的例子中,a 的值为 8,b 的值为 4,所以 a>b 为真。因此,三元运算符返回 a++ 的值,即 a 的当前值 8。注意,a++ 是后缀自增运算符,它先返回 a 的当前值,然后再增加 a 的值。所以,虽然 a 随后会增加到 9,但在表达式求值的时候,返回的是 a 原来的值 8。

因此,表达式 (a>b)?a++:b++ 的值为 8,选项 C 是正确的。

如果想要输出为9,就得是++a。
三元运算符冒号后面紧挨着那个表达式才属于运算符里吧,再来一个逗号就不能算了吧。
三元运算符由三个部分组成:一个条件表达式,一个问号 ?,一个冒号 :,以及两个结果表达式。这两个结果表达式分别对应条件为真和假时的返回值。三元运算符的结构如下:

condition ? expression_if_true : expression_if_false
在这个结构中,condition 是一个布尔表达式,它决定整个三元运算符的结果是哪一个。如果 condition 为真(非零),则整个三元运算符的结果是 expression_if_true 的值;如果 condition 为假(零),则结果是 expression_if_false 的值。

重要的是要理解,expression_if_true 和 expression_if_false 是两个完全独立的表达式,它们之间通过冒号 : 分隔,而不是逗号 ,。如果你在三元运算符的结果表达式后面加上逗号,并且再跟上一个其他的表达式,那么这将会改变整个表达式的结构,并且可能不再是一个有效的三元运算符表达式了。

例如,下面的表达式是无效的,因为它试图在三元运算符的结果表达式后面添加一个逗号运算符:

(a>b) ? a++ : b++, another_expression; // 这是无效的
在这个例子中,b++ 后面跟了一个逗号和一个 another_expression,这破坏了三元运算符的结构。如果你想在三元运算符的结果之后执行另一个表达式,你需要将它们分开写,或者使用其他控制结构来组合它们。

总之,三元运算符的冒号后面紧跟的是当条件为真时要执行的表达式,这个表达式后面不应该有逗号运算符,除非你想在三元运算符之外进行其他的操作。在你的例子中,(a>b)?a++:b++ 是一个有效的三元运算符表达式,它的值是 8,因为 a 大于 b,所以返回了 a 的当前值(在自增之前)。

如果能解决您的疑惑,还望采纳谢谢。

回答问题 2024.04.15

求解答下程序存储问题

答:

在第一个arange函数中,你的逻辑是试图从大到小检查每个程序的大小,并计算可以存储的程序数量。但是,你的循环条件和更新剩余空间L的方式有问题。
你的循环从n-1开始递减到0,这是正确的,因为你想要从最大的程序开始尝试放入磁带。但是,你使用的条件if(L >= array1[i])和随后的L -= array1[i];导致了逻辑错误。
假设你有一个长度为L的磁带,并且第一个程序(最大的程序)的大小是array1[n-1]。如果array1[n-1]大于L,按照你的逻辑,count不会增加,这是正确的。但是,随后你会执行L -= array1[n-1];,这实际上减少了L的值,即使你没有存储任何程序。这会导致后续即使有更小的程序可以放入磁带,你也无法正确地检测到它们,因为L的值已经被错误地减少了。

在第二个arange函数中,你使用了指针ptr来遍历数组,并且逻辑更加清晰。
你首先将ptr指向数组的最后一个元素(即最大的程序)。
在while循环中,你检查当前程序的大小是否小于等于剩余的磁带长度L。
如果可以存储当前程序,你增加count的值,并从L中减去当前程序的大小。
然后,你将ptr递减以指向下一个程序。
这种方法确保了只有在程序可以放入磁带时,才会减少L的值。因此,它正确地计算了可以存储在磁带上的最大程序数。

关于内存和数组
在C语言中,数组是连续的内存块,其中每个元素都占据相同大小的内存。当你声明一个数组(例如int array[n];),编译器会在内存中为数组分配连续的空间,并返回指向数组第一个元素的指针。你可以使用数组名(它实际上是一个指向数组第一个元素的指针)或指针来访问数组的元素。
在你的代码中,array是一个指向整数类型的指针,它指向内存中数组的第一个元素。通过递增或递减指针(例如ptr++或ptr--),你可以遍历数组的元素。同时,通过解引用指针(例如ptr),你可以获取或设置指针当前指向的元素的值。
因此,在你的第二个代码中,ptr是一个指向数组最后一个元素的指针。通过递减ptr并在每次迭代中检查
ptr的值,你可以遍历数组的元素,并根据需要更新L和count的值。

如果能解决您的困扰,还望采纳 谢谢。

回答问题 2024.04.15

我想重新安装Linux中的Tools,但为啥是灰色的

答:

呃,灰色的话点击不了,可以试试在开启虚拟机的过程中再点击tools,还不行的话就试试重新安装linux吧。

回答问题 2024.04.13

C语言使用do-while循环输出一个整数计算并输出该数的平方

答:

#include <stdio.h>  
  
int main() {  
    int num, square;  
    printf("请输入一个整数:");  
    scanf("%d", &num);  
  
    do {  
        square = num * num;  
        printf("整数 %d 的平方是 %d\n", num, square);  
  
        // 这里假设我们要不断询问用户输入新的整数,直到输入0为止  
        printf("请输入另一个整数(输入0结束):");  
        scanf("%d", &num);  
    } while (num != 0);  
  
    return 0;  
}

这段代码首先提示用户输入一个整数,然后使用scanf函数读取用户输入的整数到变量num中。之后进入do-while循环,在循环内部计算该整数的平方并打印出来。然后代码再次提示用户输入另一个整数,并读取到num中。循环会一直进行,直到用户输入0为止。

注意,do-while循环的特点是至少会执行一次循环体,因为do后面的代码块会首先被执行,然后再检查while后的条件。如果条件为真(非零),循环继续;如果为假(零),则退出循环。

如果你只想让用户输入一次整数并计算其平方,那么你可以去掉循环中的第二次scanf调用,并且把do-while循环改为if语句。但根据你的问题,我假设你想要一个可以重复输入的循环。

如果该代码符合您的需求,还望采纳,谢谢你。

回答问题 2024.04.12

C语言水仙花数哪里不对

答:

#include<stdio.h>  
#include<math.h>  
  
int main() {  
    int i, j, n, m, d;  
    for(i = 100; i < 1000; i++)
    {  
        j = i / 100;  
        n = i / 10 % 10;  
        m = i % 10;  
        d = j * j * j + n * n * n + m * m * m;  
        if(i == d) 
        {  
            printf("%d\n", i);  
        }  
    }  
    return 0;  
}

for 循环的语法不正确,应该在循环体的大括号 { } 中包含所有的操作。
if 语句和 printf 应该在循环体内部,而不是循环体外部。

博主您printf应该放for循环里面呀,还望采纳!谢谢

回答问题 2024.04.12

误删了微信聊天记录,想要恢复,有办法吗?

答:

下载一个恢复聊天记录软件,或者去某宝找恢复聊天记录的商品。
两种方法都需要花点钱。我推荐去某宝找。

img


祝你成功,还望采纳。

回答问题 2024.04.11

安装VScode时出现这个弹窗运行不了怎么办

答:

您这个报错挺眼熟的,我貌似也遇到过。感觉是中文路径的原因,你把哪个文哥改了试试。以后安装这种编程软件的路径或者创建的项目都尽量保持整个路径都是英文,这样可以减少很多麻烦。
检查路径:
1、确保 hello.exe 文件确实存在于你的计算机上,并且你知道它的确切路径。
检查 VS Code 的调试配置文件(通常是 .vscode/launch.json),确保 program 字段中的路径正确无误。
修正路径:
2、如果 hello.exe 位于 C:\Users\文哥.vscode\hello.exe,那么你应该在 launch.json 文件中将 program 字段设置为 "C:\Users\文哥\.vscode\hello.exe"。注意,你需要使用双反斜杠 \ 来转义路径中的反斜杠。

回答问题 2024.04.11

我的VScode为什么用不了

答:

这个错误信息 "The executable you want to run does not (yet) exist. You need to build it first" 的中文翻译是:“您想要运行的可执行文件(还)不存在。您需要先构建它。”
这个错误通常发生在您尝试在 Visual Studio Code (VS Code) 中运行一个程序,但是还没有编译(或构建)这个程序来生成一个可执行文件时。在编程中,构建(build)通常指的是将源代码(如 C、C++、Go 等语言的源文件)转换成可以在特定平台(如您的操作系统)上运行的机器代码(或可执行文件)。
为了解决这个问题,您需要先确保您的项目配置正确,并且您已经安装了必要的编译器和构建工具。然后,您可以使用 VS Code 中的构建命令(通常是通过终端运行,如使用 make、cmake 命令,或者在某些插件中可能提供直接的构建按钮)来编译您的代码,生成可执行文件。
从你截图就看得出来这些。

回答问题 2024.04.10

8号选手参加校园歌手大赛,编程读入20个整数(70-100之间)并存入数组中做为20个评委的打分,请按要求编程实现输出样例要求的功能(最后得分为去掉最高分和最低分后的平均分)。

答:

一个更加完善和健壮的C程序,它包含了输入验证和错误处理:

#include <stdio.h>

int main() 
{
    int scores[20];
    int i, sum = 0, max = 0, min = 100;

    // 读入20个整数并进行输入验证
    printf("请输入20个整数(70-100之间):\n");
    for (i = 0; i < 20; i++) 
    {
        if (scanf("%d", &scores[i]) != 1 || scores[i] < 70 || scores[i] > 100) 
        {
            printf("输入错误,请重新输入一个70-100之间的整数:\n");
            i--;
            continue;
        }
        if (scores[i] > max) 
        {
            max = scores[i];
        }
        if (scores[i] < min) 
        {
            min = scores[i];
        }
        sum += scores[i];
    }

    // 计算最后得分
    float final_score = (sum - max - min) / 18.0;

    // 输出结果
    printf("1.去掉一个最高分:%d分\n", max);
    printf("2.去掉一个最低分:%d分\n", min);
    printf("3.8号选手最后得分:%.3f分\n", final_score);

    return 0;
}

这个程序在读入每个评委的打分时,会进行输入验证,确保输入的数值在70到100之间。如果输入不符合要求,程序会提示用户重新输入。这样可以提高程序的健壮性和用户体验。
您好博主,不知道我这个程序是否满足你的要求,还望采纳谢谢!

回答问题 2024.04.10

写出以下python代码

答:

import re

# 1. 判断用户输入的内容是否以"al"开头或以"Nb"结尾
def check_start_end(content):
    if content.startswith("al") or content.endswith("Nb"):
        return "是的"
    else:
        return "不是的"

# 2. 测试用户输入中是否有敏感词并进行替换
def replace_sensitive_words(content, sensitive_words):
    for word in sensitive_words:
        content = re.sub(r'\b' + re.escape(word) + r'\b', '***', content, flags=re.IGNORECASE)
    return content

# 3. 实现整数加法计算器
def calculate_sum(content):
    numbers = re.findall(r'\d+', content)
    total = sum(int(num) for num in numbers)
    return total

# 4. 计算用户输入的内容中有几个数字并打印输出
def count_digits(content):
    count = sum(c.isdigit() for c in content)
    return count

# 主程序
sensitive_words = ["敏感词1", "敏感词2", "敏感词3"]

content = input("请输入内容:")

# 1. 判断是否以"al"开头或以"Nb"结尾
result1 = check_start_end(content)
print(result1)

# 2. 替换敏感词
content = replace_sensitive_words(content, sensitive_words)
print(content)

# 3. 计算整数加法
try:
    total = calculate_sum(content)
    print("总和为:", total)
except ValueError:
    print("输入包含非数字,请重新输入")

# 4. 计算输入内容中的数字个数
count = count_digits(content)
print("输入内容中有", count, "个数字")

回答问题 2024.04.10

用c语言编写一个程序。

答:
#include <stdio.h>

int main() {
    char operator, comparison;
    int operand1, operand2, result;

    // 提示用户输入算术运算及比较表达式
    printf("Enter an arithmetic operation and a comparison expression: ");
    scanf("%d %c %d %c", &operand1, &operator, &operand2, &comparison);

    // 根据输入的运算符进行相应的运算
    switch (operator) {
        case '+':
            result = operand1 + operand2;
            break;
        case '-':
            result = operand1 - operand2;
            break;
        case '*':
            result = operand1 * operand2;
            break;
        case '/':
            result = operand1 / operand2;
            break;
        case '%':
            result = operand1 % operand2;
            break;
        default:
            // 如果运算符不在规定范围内,输出错误信息
            printf("Operator error: Invalid operator\n");
            return 0;
    }

    // 根据输入的比较符进行相应的比较
    switch (comparison) {
        case '=':
            if (operand1 == operand2)
                printf("Expression is correct: %d %c %d\n", operand1, comparison, operand2);
            else
                printf("Expression is incorrect: %d %c %d\n", operand1, comparison, operand2);
            break;
        case '>':
            if (operand1 > operand2)
                printf("Expression is correct: %d %c %d\n", operand1, comparison, operand2);
            else
                printf("Expression is incorrect: %d %c %d\n", operand1, comparison, operand2);
            break;
        case '<':
            if (operand1 < operand2)
                printf("Expression is correct: %d %c %d\n", operand1, comparison, operand2);
            else
                printf("Expression is incorrect: %d %c %d\n", operand1, comparison, operand2);
            break;
        default:
            // 如果比较符不在规定范围内,输出错误信息
            printf("Comparison error: Invalid comparison operator\n");
            break;
    }

    return 0;
}

博主你好,不知道这个程序是否是您想要的,如果是的话还望点采纳 谢谢

回答问题 2024.04.08

Linux和Windows的不同

发布资源 2024.04.07 ·
pdf

Linux入门及常用命令(嵌入式开发必学)

发布资源 2024.04.07 ·
pdf

mplayer多媒体播放器

发布资源 2024.04.07 ·
zip

arm运行python报错

答:

报错是由于缺少名为'png'的模块导致的。在pyqrcode库中并没有名为'png'的模块,正确的方法是使用'png'方法来生成二维码图片。请确保你已经正确安装了pyqrcode库。

另外,你的代码中似乎存在一些排版问题,可能会导致语法错误。请尝试按照以下方式调整代码:

import pyqrcode
import tkinter as tk

data = 'value1'
qr = pyqrcode.create(data)
qr.png('qrcode.png', scale=8, module_color='#000000', background='#fff', quiet_zone=3)

root = tk.Tk()

lb1 = tk.Label(root, text='V1.0.0.1', font=('Arial', 60), bg='green')
lb1.place(x=35, y=80, anchor=tk.NW)

root.mainloop()


如果能解决还望采纳

回答问题 2024.04.07

接口数据json数据重构

答:

在Java中,你可以使用以下代码将接口数据结构转换成你想要的形式:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Object> data = new HashMap<>();
        data.put("财务部门", new HashMap<String, Object>() {{
            put("zcjdCount", 71);
            put("ysqCount", "36");
            put("fdgkCount", "1946");
            put("lyCount", "140");
            put("tianCount", "120");
        }});

        Map<String, Object> new_data = new HashMap<>();
        new_data.put("dep", "财务部门");

        Map<String, Object> innerData = (Map<String, Object>) data.get("财务部门");
        for (Map.Entry<String, Object> entry : innerData.entrySet()) {
            if (entry.getKey().equals("zcjdCount")) {
                new_data.put(entry.getKey(), entry.getValue());
            } else {
                new_data.put(entry.getKey(), Integer.parseInt((String) entry.getValue()));
            }
        }

        System.out.println(new_data);
    }
}

这段Java代码会将原始数据结构转换成你想要的形式。

在JavaScript中,你可以使用以下代码将接口数据结构转换成你想要的形式:

let data = {
    '财务部门': { 'zcjdCount': 71, 'ysqCount': "36", 'fdgkCount': "1946", 'lyCount': "140", 'tianCount': "120" }
};

let new_data = { 'dep': '财务部门' };

Object.entries(data['财务部门']).forEach(([key, value]) => {
    if (key === 'zcjdCount') {
        new_data[key] = value;
    } else {
        new_data[key] = parseInt(value);
    }
});

console.log(new_data);

这段JavaScript代码会将原始数据结构转换成你想要的形式。

回答问题 2024.04.07

c语言宏定义表达式的运算

答:

当预处理器处理宏定义时,它会简单地将宏定义中的参数替换为实际的参数值,并将结果插入到代码中。在这种情况下,
宏定义为 #define f(x) ((x)*(x)),而在 printf("%d", f(a++)); 中,a++ 是作为宏 f(x) 的参数传递进去的。

在预处理阶段,宏展开后的代码是 printf("%d", ((a++)*(a++)));。在这里,a++ 会被展开为 a,而不是 a 自增后的值。这是因为宏展开是在预处理阶段完成的,而不是在运行时。

因此,表达式 ((a++)*(a++)) 中的两个 a 实际上代表的是同一个值,即 a 的当前值。因此,这个表达式相当于 (1 * 1),结果为 1。
如果这样解释能让你懂的吗还望采纳

回答问题 2024.04.05
加载更多