cyy的垃圾堆


  • 首页
  • 归档
  • 标签
  • 关于CYY
  • 友链

© 2025 CYY

Theme Typography by Makito

Proudly published with Hexo

一点与stm32的笔记(1)-Keil&&C

发布于 2023-02-25 嵌入式 

Keil

C99 Mode

这个模式可以不用将变量定义到头部,移植的代码如果报一堆错误往往是这个导致的
位置: Target for Option ->C/C++ -> C99 Mode

Debug

这需要单片机插上jlink使用,点击进入,右键变量,加入Watcher,即可看见其在程序中发生的变化

JLINK

实际也是个103,后续在电脑上烧录个固件也能成个jlink

头文件不存在

路径要包括.h文件的位置
位置: Target for Option ->C/C++ -> Include Path

找不到stlink

可能线没插牢,或者可能用的是jlink,要进行更换
位置:Target for Option ->Debug Use中换成Jlink,然后点击Setting,Port进行更换

使能开关

需要时开启,不需要时关闭,能够解决许多奇奇怪怪的问题

函数定义跳转

跳转不了定义?对于一份新下载的代码,先编译,再右键Go to definition of xxxxxx,

或者可能没生成编译文件,Target for Option ->output,点击Create Executable

寻找报错

在下面输出信息右键。Find in List,方向为向上。

出现以下报错,如果是从网上下的代码,rebuild一下即可消除。

image-20241229211651220

Code是代码占用的空间;

RO-data是 Read Only 只读常量的大小,如const型;

RW-data是(Read Write) 初始化了的可读写变量的大小;

ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化;

简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data

程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data

image-20250216100117155

C

函数指针

一个简单例子,函数名就已经是地址了,有无取地址符号相同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int (*func_ptr)(int, int);
int main() {
int result = 0;
func_ptr = add;
result = func_ptr(3, 4);
printf("Result: %d\n", result);// 输出结果:Result: 7
func_ptr = &sub;
result = func_ptr(3, 4);
printf("Result: %d\n", result);// 输出结果:Result: -1
return 0;
}
指针函数

返回指针的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int* max(int a, int b) {
static int result;
if(a>=b)
{
result=a;
}
else
{
result=b;
}
return &result;
}
int main() {
int* dd = max(4, 5); // 获取最大元素的指针
printf("The maximum element is: %d\n", *dd); // 输出最大元素的值
return 0;
}

static

分享到 

 上一篇: vhdl 下一篇: 一点与stm32的笔记(2)-外设 

© 2025 CYY

Theme Typography by Makito

Proudly published with Hexo