STM32--Code、RO-data、RW-data和ZI-data

本文详细解读了MDK编译程序的组成部分,包括机器代码指令(Code)、只读数据(RO-data)、可读写数据(RW-data和ZI-data)及其在栈空间和堆空间的应用。重点介绍了程序在静止与运行状态下的存储差异,以及不同数据区域的组成和作用。

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

MDK编译程序的组成:
        Code:代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。
        RO-data: Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。C语言中const关键字定义的变量就是典型的RO-data。
        RW-data: Read Write data,可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。C语言中定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。
        ZI-data: Zero Initialie data,即0初始化数据,它指初始化为“0值”的可读写数据域。它与RW-data的区别是程序刚运行时这些数据初始值全都为 0,而后续运行过程与RW-data的性质一样,它们也常驻在RAM区,因而应用程序可以更改其内容。例如C语言中使用定义的全局变量,且定义时赋予“ 0 值”给该变量进行初始化(若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为 0);
        ZI-data 的栈空间(Stack)及堆空间(Heap):在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候会向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。
程序组件所属的区域:

程序组件所属类别
机器代码指令Code
常量RO-data
初值非0的全局变量RW-data
初值为0的全局变量ZI-data
局部变量ZI-data栈空间
使用malloc动态分配的空间ZI-data堆空间


RW-data 和 ZI-data 它们仅仅是初始值不一样而已,应用程序具有静止状态和运行状态。静止态的程序被存储在非易失存储器中,如 STM32 的内部 FLASH,因而系统掉电后也能正常保存但是当程序在运行状态的时候,程序常常需要修改一些暂存数据,由于运行速度的要求,这些数据往往存放在内存中(RAM),掉电后这些数据会丢失。因此,程序在静止与运行的时候它在存储器中的表现是不一样的,
程序状态区域的组成;
程序状态与区域                 组成
程序执行时的只读区域(RO)       Code+RO-data
程序执行时的可读写区域(RW)     RW-data + ZI-data
程序存储时占用的ROM区          Code + RO-data + RW-data
————————————————
版权声明:本文为优快云博主「tyustli」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/tyustli/article/details/86061856

 

<think>好的,我现在需要帮用户总结通用的前后端分离项目启动命令。用户提到他们想查找这方面的信息,所以我得先理清楚前后端项目常见的框架和启动方式。 首先,前端项目通常使用Vue、React或Angular这些框架。根据引用[3],前端项目开发环境下一般用`npm run serve`或者`npm start`来启动,而生产环境则是`npm run build`生成静态文件,然后通过Nginx部署。比如在Django和Vue整合的项目中,构建后会生成dist目录,需要配置到后端或Web服务器中[^3]。 后端方面,Spring Boot是Java常用的框架,启动命令是`mvn spring-boot:run`或者用jar包运行[^1][^4]。Django则是`python manage.py runserver`,而Node.js的Express使用`npm start`或者`node app.js`[^3]。 用户可能需要了解不同环境的启动方式,比如开发和生产环境的区别。比如前端开发时用`npm run serve`,生产用build;后端Spring Boot打包成jar后运行。此外,部署时前后端分离项目通常前端由Nginx托管,后端API独立运行,可能需要配置跨域。 还要考虑一些常见问题,比如依赖安装`npm install`和`mvn install`,以及端口配置。例如,前端Vue默认8080,React 3000,后端Spring Boot默认8080,可能需要修改避免冲突。 用户提供的引用中提到了Spring Boot和Vue项目结构,以及部署到服务器的注意事项。这些信息帮助确认了启动命令的正确性,比如后端打包后的jar运行命令,前端构建后的部署步骤。 总结起来,应该分前端、后端、部署三个部分,列举常见框架的启动命令,并说明开发和生产环境的区别。同时加入注意事项,如依赖安装、端口配置和跨域处理,这样用户能全面了解启动流程。</think>### 通用前后端分离项目启动命令总结 #### 一、前端项目通用启动命令 1. **Vue.js 项目** - 开发环境启动: ```bash npm install # 安装依赖 npm run serve # 启动开发服务器(默认端口8080) ``` - 生产环境构建: ```bash npm run build # 生成静态文件到dist目录[^3] ``` - 本地预览生产包: ```bash npm install -g serve # 安装静态服务器 serve -s dist # 启动服务(默认端口3000) ``` 2. **React 项目** - 开发环境启动: ```bash npm install npm start # 默认端口3000 ``` - 生产环境构建: ```bash npm run build ``` 3. **Angular 项目** ```bash npm install ng serve # 默认端口4200 ``` --- #### 二、后端项目通用启动命令 1. **Spring Boot (Java)** - 开发环境启动: ```bash mvn spring-boot:run # 直接运行 ``` - 打包与生产启动: ```bash mvn clean package # 生成jar包 java -jar target/*.jar # 运行jar包 ``` 2. **Django (Python)** ```bash python manage.py runserver # 默认端口8000 ``` 3. **Node.js (Express)** ```bash npm install npm start # 或 node app.js(需配置package.json)[^3] ``` --- #### 三、前后端联调与部署 1. **本地联调** - 前端代理配置(以Vue为例): ```javascript // vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', // 后端地址 changeOrigin: true } } } } ``` 2. **服务器部署** - 前端:使用Nginx托管`dist`目录[^4] ```nginx server { listen 80; location / { root /path/to/dist; try_files $uri $uri/ /index.html; } } ``` - 后端:独立运行(如Spring Boot jar包)或通过容器部署[^4] --- #### 四、注意事项 1. **依赖安装** - 首次启动项目前必须执行`npm install`或`mvn install`安装依赖 2. **端口冲突** - 修改端口示例(Vue): ```bash npm run serve -- --port 3000 ``` 3. **跨域问题** - 后端需配置CORS,或前端通过代理解决[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值