大鹏一日同风起,扶摇直上九万里。

本文档提供了Keil开发环境使用技巧及C语言编程实用知识,包括字符串处理函数的高效使用方法、数据转换技巧、十六进制数的输出方式等,适用于嵌入式系统开发人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写给自己的备忘笔记

学习随记

为了让学过的知识不被丢弃,记个博客常复习

keil使用技巧

按住ALT左键拖动,对齐显示
在这里插入图片描述

CCS使用

同名CCS工程打不开?discovered projects。

同名CCS工程打不开?两种方式帮你打开同名CCS_project——更换CCS的workspace,工程文件重命名

CCS导入工程

在这里插入图片描述
接下来导入要用的工程文件,下图中由于笔者此工程文件已在工作区中,因此显示无法导入。另外,建议勾选“Copy Projects into WorkSpace",这样软件将会把工程文件复制到工作区中,保留原来的文件,否则会删除原来的工程文件。
在这里插入图片描述

沾入新代码后报错,找不到头文件

在这里插入图片描述
加入相对路径即可解决
在这里插入图片描述

⭐ccs怎么查看工程路径

右键工程,选择最后一项properties,选择资源,后面有路径在这里插入图片描述

ccs输出HEX文件

右键工程。在这里插入图片描述

修改command “–memwidth=8 --romwidth=8 --diag_wrap=off”:
在这里插入图片描述
在这里插入图片描述
生成hex
在这里插入图片描述

ccs批量注释

CTRL+/
批量去除注释也是CTRL+/

ccs代码折叠

在这里插入图片描述
CCS代码编辑的几个常用设置

ccs怎么开代码提示

CCS代码补全功能

在线烧录时,只擦除指定位置

在这里插入图片描述

VSCode

如何竖选?

最新版本:
alt+鼠标点选
alt+shift+鼠标拖动

VSCode 快速查看函数定义及返回上一位置

一、跳转到定义位置
查看某个函数的代码,需要跳转到具体的位置,具体的实现方式有下面三种:

1、光标定位到函数,按 F12;

2、光标定位到函数,鼠标右键,转到定义;

3、按住 Ctrl 键,同时点击函数。

二、返回跳转前的位置
当读懂函数后,需要回到跳转前的位置,具体的实现方式有下面两种:

1、按 ctrl + shift + 8;

2、按 Alt + ← (左箭头)。

c语言知识:

strlen字符串长度

计算给定字符串的(unsigned int型)长度,不包括’\0’在内
e.g:
uint8_n temp[]={“hello”};
strlen(temp);

sprintf数据转换

在这里插入图片描述

★ strchr 查找字符

https://www.bilibili.com/video/BV1iT4y1c72H?from=search&seid=16290288931706959885&spm_id_from=333.337.0.0
在这里插入图片描述

★
在这里插入图片描述
从第一次出现被查找字符开始,到\0 结束

注意:
在这里插入图片描述
一个汉字占两个字节,如果想用 strchr 汉字需要用 “”

★ ststr 查找字符串

https://www.bilibili.com/video/BV1iT4y1c72H?from=search&seid=16290288931706959885&spm_id_from=333.337.0.0
在这里插入图片描述
在这里插入图片描述

ASCII码表

在这里插入图片描述

单&&和&的区别

&: 两个数字 位操作 AND。或者取某个变量的地址,或声明引用。 对 bit:(0 & x ) = 0; ( 1 & x ) = x;&&:两个 bool 值的“并且”。( false && x ) = false; (true && x)= x;|:两个数字 位操作 OR。对 bit: ( 0 | x ) = x; ( 1 | x ) = 1;||:两个bool 值的“或”。( true || x ) = true; ( false || x ) = x;----a = !!a;(a && b) = !(!a || !b);!(a && b) = (!a || !b);(a || b) = !(!a && !b);!(a || b) = (!a && !b);

△单片机程序是如何运行起来的以及单片机的ROM和RAM

嵌入式–深入理解单片机(一)单片机程序是如何运行起来的以及单片机的ROM和RAM
单片机里的程序是如何运行的,这篇文章尽量给你讲懂!

Printf输出双引号和十六进制数

要输出2个字节的16进制数,可以在printf中使用%02x或者%02X格式,同时将值转为unsigned char型。
一、printf为格式化输出函数,可以将变量以各种格式化方式输出。
二、格式化输出16进制的格式字符串为%x或%X。
当输出的16进制数带有字母a~f时,两种格式字符串输出结果会有区别:
1、%x格式,那么输出的是小写的a~f;
2、%X格式,那么输出的是大写的A~F.
三、要固定输出两个字节,可以使用%02x或者%02X,其中02的意思是,输出2个字节,不足补0. 不过如果实际值超过2字节,这个就会输出实际值了。
所以要绝对输出2字节,需要将数值转为unsigned char型,保证输出不会超过。
即将n以2字节16进制输出,写作:


printf(“%02x”,(unsigned char)n);


使用USART_SendData();实现十六进制的发送
在这里插入图片描述

如何改变文本的样式

  • 输出双引号

可以用转义序列,反斜杠**""后面的一个字符原样输出。**
例如:
#include <stdio.h>
void main()
{
printf(““小强””);//控制台输出:“小强”
}

C 库函数 - strtol()

strtol () 函数可以将字符串转换为长整数,根据不同的 base 进制
strtol()函数是C标准库中的一个函数,用于将字符串转换为长整型数(long int)。它的原型为:

**long int strtol(const char *str, char endptr, int base);
该函数接收三个参数:

str:要转换的字符串。

endptr:指向第一个不能转换的字符的指针。

base:表示字符串所采用的进制,可以是2到36之间的整数,或者是特殊值0。

使用示例

以下是一个简单的示例,演示如何使用strtol()函数将字符串转换为长整型数

#include <stdio.h>
#include <stdlib.h>

int main() {
char str[] = "12345";
char *endptr;
long int num;

num = strtol(str, &endptr, 10);
if (*endptr != '\0') {
printf("转换失败:输入字符串不是一个有效的整数。\n");
} else {
printf("转换结果:%ld\n", num);
}
return 0;
}

在这个示例中,字符串**"12345"被成功转换为长整型数12345**,因为我们指定了base为10,所以按照十进制进行转换
1
2

进制转换

strtol()函数还可以用于不同进制之间的转换。例如,将十六进制字符串转换为十进制数:

#include <stdio.h>
#include <stdlib.h>

int main() {
char hex_str[] = "0x1A";
char *endptr;
long int num;

num = strtol(hex_str, &endptr, 16);
if (*endptr != '\0') {
printf("转换失败:输入字符串不是一个有效的整数。\n");
} else {
printf("转换结果:%ld\n", num);
}
return 0;
}

在这个示例中,字符串"0x1A"被成功转换为十进制数26
1
3

注意事项

base参数:当base为0时,strtol()会根据字符串的前缀自动判断进制。例如,前缀为"0x"或"0X"表示十六进制,前缀为"0"表示八进制,否则为十进制。

返回值:如果输入字符串不符合数字格式,strtol()将返回0。如果转换结果超出了long整数的表示范围,将产生溢出,并设置errno为ERANGE
通过以上示例和注意事项,可以更好地理解和使用strtol()函数进行字符串到长整型数的转换。

C语言中char、short、int、long各占多少字节

1byte = 8bit 一个字节占8个二进制位

windows操作系统,32位机中,

char: 1个字节

short: 2个字节

int: 4个字节

long: 4个字节
C语言中char、short、int、long各占多少字节

MPU6050学习:

(以小马哥F103四轴例程为例)

  • 软件命令重启系统(隐藏技能):

在这里插入图片描述

- MPU6050初始化函数(重要)
在这里插入图片描述
在这里插入图片描述
默认状态时,mpu6050初始化需要平放,并且静止转态使8s更新一次位置数据
将这一句加入后,mpu6050初始化可以不平放,以斜的位置作为初始位置

SD卡

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Strlen计算字符长度:

在这里插入图片描述

高效率代码学习:(sim800发送和指令解析)

在这里插入图片描述
在这里插入图片描述

0X1A是什么

在这里插入图片描述

通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.

在这里插入图片描述
在这里插入图片描述

缓冲区清除(memset)

memset将某一块内存中的内容全部设置为指定的值(给缓冲区清除)
在这里插入图片描述

DMA串口接收(要加延时)

在这里插入图片描述

★ 从缓冲区内查找是否包含命令(strstr)

strstr是C语言中的函数,作用是返回字符串中首次出现子串的地址。
在这里插入图片描述

printf映射到多个串口(hal库)

在这里插入图片描述

使用串口接收并区别指令的新方法(固定的几条指令>>ASCII值)在这里插入图片描述

在这里插入图片描述
串口接收到的指令不同,缓冲区的ASCII的值也不同,通过不同的ASCII值区分不同的指令

OLED显示格式(注解)

在这里插入图片描述
Y:对应一行(一一对应
LEN:会影响数据的起始位置
SIZE:字体大小,会影响数据的起始位置
注意:num的类型为u32 》》%d 其他的数据类型不能完整显示

void LCD_FloatShow (u16 x,u16 y,float num,uint8_t size) //浮点数显示
{
char temp[10];
sprintf((char )temp,“%0.2f”,num);
OLED_ShowString(x,y,temp,(size/2
strlen(temp)));
}

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值