• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

buffer 存储在哪里?

robe_zhang 2018-10-25 浏览量:1254

这是 freertos 的两个任务,任务中定义的变量 buffer 存储在哪里?

2.png

1,如果是 code 区 data 区:名字重复,程序是怎么处理的?

实际编译运行一切正常,两个任务中的同名变量,当作两个变量对待,这个是输出结果:

1.png

2,如果是在栈,这个变量占用 140 多个字节,实际就分配了 128 字节,怎么解释

3.png

3,堆空间,显然不是,没用。

4,其他,想不到还有什么地方了

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 应该是放在栈里面的,还有,freertos建立任务指定的这个栈空间,单位不是字节,而是四字节,参考https://www.jianshu.com/p/8a8f3732393d
    • 发布于 2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 你这个局部变量,静态分配内存法,需要用指针动态分配内存才是用堆内存
    • 发布于2018-10-25
    • 举报
    • 评论 1
    • 0
    • 0
robe_zhang 回复了 yhj416606438 :buffer 在哪? 回复

robe_zhang 回复了 @曲终人散@ :如果是存在 flash 中,两个buffer 同名,程序是怎么区分两个变量的。copy 到 ram 中,我是用buffer,程序怎么知道是 led1.... 还是 led2.... 回复

  • 这是两个函数,所以这是两个局部变量,局部变量作用域不一样,存储在栈内,编译器区分方式,你就当是两个不同函数同样定义一个i吧
    • 发布于2018-10-25
    • 举报
    • 评论 2
    • 0
    • 0
robe_zhang 回复了 奇迹12 :如果在栈区域,任务栈只有 128 字节,buffer 字符串实际长度 140 多字节。存不下呀 回复
奇迹12 回复了 奇迹12 :才看见后面两个问题,你这样属于栈溢出,不好描述状态,可能正好指向没用的数据了吧 回复

  • 这个是局部变量,在的RAM中的,离开这个函数就没有了。
    • 发布于2018-10-26
    • 举报
    • 评论 1
    • 0
    • 0
robe_zhang 回复了 呵国家啊 :那就是 data 区了,data 区有两个 buffer 变量,发送 buffer 时候,freertos 怎么知道 led1 任务发送 led1.xxxxx led2任务发送 led2.xxx 回复

  • 这个就相当于静态的局部变量,存放在你为这个任务分配的内存空间里

    cup不认识变量名,只认识地址,就算你两个任务里有两个相同变量名的变量,也是分配在不同的内存地址上

    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 这些是局部变量啊,链接时会转换成不同的地址偏移的。
    • 发布于2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是一个局部变量,这个号地址一般都是在RAM中的,使用完就会释放地址
    • 发布于2018-11-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 是局部变量,实际的空间是自由分配的
    • 发布于2018-12-09
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

buffer 存储在哪里?