Keil相关内存设置

内存设置 off-chip和on-chip本质上没有区别,只是地址会不同。 假如ic都是on-chip sram,要分成三块的话,把一块写到off-chip就可以。 NoInit不勾选的话,每次进main函数前会对该memory进行清0的操作。 前面default是默认的变量保存地址。 修改变量地址 可以直接在keil左侧对文件右击,选择第一个option for file,对该文件中的变量地址进行修改。 Code/Const会保存到default的ROM中。 Zero initialized Data是bss段数据(未初始化的和初始化为0的全局变量,函数中的static变量)。 Other data是data段数据(初始化为非0的全局变量,函数中的static变量)。 对启动文件中的zero initialized data修改位置,将会更改栈和堆的地址。 还可以直接在code中修改某个变量的地址: sdcp_keypair g_tFWKey __attribute__((section(".ARM.__at_0x20000000")));

2024-06-21 · 1 min

Clash如何开启终端代理

MacOS&Linux 参考: https://weilining.github.io/294.html 临时方法: export http_proxy=http://127.0.0.1:7890 export https_proxy=$http_proxy 可以把命令写进.bash_profile或.zprofile永久生效: 7890为端口号。 function proxy_on() { export http_proxy=http://127.0.0.1:7890 export https_proxy=$http_proxy echo -e "终端代理已开启。" } function proxy_off(){ unset http_proxy https_proxy echo -e "终端代理已关闭。" } source .bash_profile后输入proxy_on开启,proxy_off关闭。 Windows下在git bash中操作一样。 git clone ssh走代理 MacOS/Linux/Windows: ~/.ssh/config # 全局 ProxyCommand connect -S 127.0.0.1:7890 %h %p # 只为特定域名设定 Host github.com ProxyCommand connect -S 127.0.0.1:7890 %h %p git 有两种协议,一种是https,还有一种是ssh。 如果是用https,设置终端代理即可,参考上面MacOS&Linux的配置方法。如果是ssh,需要单独配置代理。 SSH 通过443端口连接github 有时候ssh的默认端口22被封了, 但443端口仍然可以访问。 只需要修改~/.ssh/config: Host github.com HostName ssh.github.com User git Port 443 VMware虚拟机开启终端代理 参考:https://www....

2024-01-24 · 1 min

Vscode备忘录

keybindings.json: 键盘快捷方式 json 文件。 setting.json: vscode 设置文件。 块选择:shift+箭头 / shift+Alt+鼠标 增加光标:Ctrl+Alt+上/下箭头 / Alt+click 复制一行:Shift+Alt+上/下箭头 移动一行:Alt+箭头 删除一行:Ctrl+Shift+K F2 可以代码重构,对 project 下所有的函数名替换名称 格式化文档:Shift+Alt+F 格式化整个文档 / Ctrl+K → Ctrl+F 格式化某一行 Ctrl+Shift+[ / Ctrl+Shift+] 折叠函数 alt + <n> 切换标签页 自定义的一些快捷键 在 vscode 键盘快捷方式中自定义的一些快捷键: alt + ↑/↓:调整终端大小。 Clangd 插件 配置 .clang-format 配置 compile_commands.json clangd 默认会在 project 目录下寻找compile_commands.json,如果compile_commands.json在 project 目录之外,那么需要通过在settings.json中指定clangd.arguments->--compile-commands-dir=xxx中compile_commands.json的位置。 settings.json: { "[c]": { "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd" }, "clangd.arguments": [ "--log=error", "--header-insertion=never", // 是否需要自动插入头文件 "--compile-commands-dir=../../../../out/rts3916_evb_nand" ], "editor.inlayHints.enabled": "offUnlessPressed", "C_Cpp....

2024-01-23 · 2 min

如何避免.bss变量转化成.data段变量

发现在一个.c文件中有一个初始化为非0的全局变量或静态变量,会使这整个文件中定义的全局变量或静态变量都由.bss段转化为.data段。 .data段的变量会在mcu boot阶段的clib会对这些变量做初始化,.bss段可以透过keilc的config如下图控制是否要跳过clib的初始化为0(目前我们的配置是把IRAM配置为不要初始化) 这样的话,我们的芯片在suspend或sleep之后,由于MCU做了power gating,resume起来后MCU重新上电,会重新从MCU boot那边开始跑,.data段的变量就无法保持suspend或sleep之前的值了,又被初始化成定义时候的值了,而.bss段就不会被初始化,可以保持之前的值。 在我们目前usb产品的应用中,一般变量都是要保持suspend/sleep之前的值,所以不能产生有.data段的变量 为了不产生.data段变量,我们要注意: - 全局变量在定义的时候不能做初始化。 - 不要使用静态的局部变量。 //错误示例: U8 g_byGlobalVar = 5; //正确示例: U8 g_byGlobalVar; void InitGlobalVars(void) { if(reset_status==RESET_FROM_POWER_ON) g_byGlobalVar=5; //InitGlobalVars()函数中做初始化 }

2023-09-06 · 1 min