关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8221|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 h6 [: h* h: ~# x8 F

* x$ c$ r' r( G( n4 M' z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( u  \3 P9 f9 t$ G3 C; h
, g+ |! P! \- j! X2 v- \/ g
其他程序段。。。。。
/ b4 G# x) v5 h- h  r7 r6 d ) M" T+ G" H1 C4 e# g
   free(x_d);
- o% ~3 \% m$ P" T
6 K6 d' ~  }9 D使用DSP侧单独调试功能,验证动态申请没有问题,8 B  i( r3 g+ ]; O: _

& v  U/ P* q3 j3 Q, X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 k; a* m2 @! X. w  t4 g7 u, z
% _1 f7 S, J0 O1 r) @' P$ P
% N0 W6 p8 l: R$ Y6 N9 w; P7 r, f5 M
) u3 N  m; Y- E

9 x  B8 z8 T/ q5 B1 {1 b; D7 e6 _: S8 G7 }0 [. A
# v! o, [, N+ A  P+ F

4 ^' M& X8 p6 F! Y, \+ e; Z; Z0 u
8 _- n& r+ X5 q4 ^# p/ u/ O% r5 n; L6 h0 H, O

) [  O' _! H! F) K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# V9 c7 R, s, T: ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, ~, n' m! e% b2 {+ ]4 t% S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ {6 J" C2 v  F8 Y& e# Y5 T

3 x1 X3 O# O" G2 ^9 f是不是需要在DSP.CFG中进行配置7 s% A* l2 S8 ]5 ]
我现在的配置为' C6 h; F6 r# r0 N; ]

: L& u, ^7 {" A9 X; W& F/*; o* H6 [# Y8 q
*  ======== Operating System Configuration ========
% i- C, h2 s& j */
" g1 h/ B1 `+ j6 k% P6 f* M7 P% V
* O# h6 C1 f$ r; i6 N/* no rts heap */
  l5 A3 I% t0 r4 Z8 \1 cProgram.heap = 0;2 ^' D- J; f$ E  i! p
Program.argSize = 100;  /* minimum size */) v; l& j/ w9 {! N- v4 A  S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 v' b+ L) ?% Q4 B4 K
+ w- i1 U- I7 K! m, i, \2 p
/* create a default heap */
0 Y) X+ c$ I8 b5 s! Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ b& S5 R" g8 i& X8 v. yvar heapMemParams = new HeapMem.Params();
* u& P+ S3 p7 Y9 R* ~6 MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 W5 k/ j6 F4 Q
  |6 l; ~3 S' k. N% m7 t# t
var Memory = xdc.useModule('xdc.runtime.Memory');
: \* U7 d7 k$ e, D4 `2 H5 c& NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% |& ^) S/ E) d4 g' l$ P: ?9 T4 i! d5 f: g5 d
/* configure System module */
& L7 A: I& f: A$ Y; q* O0 d0 Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' L/ f* z( h* z5 g- |) oSysMin.bufSize = 0x1000;
. b% W& o7 n* V9 H5 e) s: RSysMin.flushAtExit = false;/ T2 }6 I9 z- N" v& S. e9 P# O

; D! u0 t5 V7 k3 g: Gvar System = xdc.useModule('xdc.runtime.System');
8 `6 y* r( K" Z' w* p% y/ G$ H! h2 j  [6 cSystem.SupportProxy = SysMin;! I# p9 `8 B% K2 A7 a

1 |! ~$ D2 j/ ~% A' Z: r% @: N# O- C/ C/* configure SysBios to use the lower half of Timer 1 */' l: q( [/ o) ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 I1 J# Q/ c; i* U% `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# R" X$ _9 M+ ]; I& ~
Timer.timerSettings[1].master = true;! C4 {# D5 c; A
Timer.defaultHalf = Timer.Half_LOWER;
3 X7 J% Y- M5 ^' F3 _; g% `; l! kClock.timerId = 1;4 f3 a: l2 _" b
' z/ j3 i, l; y+ \

/ T; n" O! ]& y- v! S/*
: G  l; l$ s4 I *  ======== Miscellaneous Configuration ========
. {: L1 \, i/ B' g" A/ ] */0 [$ j4 ^9 O8 d4 a1 F

) D% G. O, o( h7 t5 h/* set default diags mask */; h- y  v9 X0 E2 O3 l( p
var Diags = xdc.useModule('xdc.runtime.Diags');
* a  Y! r3 M1 O* ~var Defaults = xdc.useModule('xdc.runtime.Defaults');
: v* \" m8 }, Z$ M4 n# @0 n9 D4 ?8 K8 C- T+ |" ?" h' R0 Y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. j  t- f& X2 m; K+ }* R8 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 K, ]3 {8 {. iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% b; a3 z9 c0 y5 m3 B1 Y$ IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# r  E0 e4 G3 f5 l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 g1 y0 V# j( o, J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* f! O$ a% {4 EDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# r7 M8 {- ^, Y$ W, e! DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ f# F# I& a6 E% L* H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 v( P/ b6 [$ H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 @" ]+ x' M+ x# m; V; G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% V' U( X  R* c9 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 X9 ^8 V. W# Z8 |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 g4 z5 L# }' [: j2 r! J+ |6 o$ oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ }' [) M9 R) ]. S: A3 S+ v- j

( k3 R3 ?- h) G# R, V/* override diags mask for selected modules */3 _2 D$ L& [* }5 ~6 d9 |- c
xdc.useModule('xdc.runtime.Main');# x6 w$ D) |3 F# l+ H$ Z
Diags.setMaskMeta(
: H; v1 b9 Y9 P  ~+ ]3 @- s( o( ]    "xdc.runtime.Main",
$ X! b) C8 p2 v! m0 l9 K  U* S    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 L; R% @* p- w$ Y# R6 _
    Diags.RUNTIME_ON" a5 Y- m' ~1 k+ R5 N' \% I) O
);
4 s) v. L6 q% O6 |. f! e9 t7 O6 P- a: T5 w9 A: ~
var Registry = xdc.useModule('xdc.runtime.Registry');' h/ h5 t: s: E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# o: T. b7 g9 `" C# l8 x0 Z, xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ H, ^3 g/ q; M( H, zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 k2 h; G5 v1 G. p% R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( o# V0 O# n: f2 P' N) S3 p" B

2 r8 ]/ B$ n; n/* create a logger instance */
, d/ a. g8 F6 vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 Z2 u1 {$ x+ Y; W+ F& A- x. nvar loggerBufP = new LoggerBuf.Params();/ `7 {8 b. K1 X/ w4 c" P/ u+ ]' F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, ^7 t7 k% j# E: a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) X% d8 d0 x! v" U3 M2 b
& W; B1 K7 P" l. q6 k% ~$ `3 a7 q: a4 |var appLogger = LoggerBuf.create(loggerBufP);8 T( p( d# X5 g; o
appLogger.instance.name = "AppLog_Core1";
& Y' H+ p# z' v; @" fDefaults.common$.logger = appLogger;
: U( n6 w& O' K* ?7 P+ y# `Memory.defaultHeapSize = 0x8192;    " y$ P; l6 R4 V- a* }* f3 h8 B
Idle.idleFxns[0] = "&LEDStatus";8 l1 w( I$ E! X; \
Cache.initSize.l2Size = Cache.L2Size_32K;
' Y: v2 h+ |- w- J# a* |4 V
$ T7 G5 a7 G. k4 z( K2 k, }6 s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */% B8 t4 y( l. B4 t2 }! A/ j$ D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; x( K- I% {$ m  N$ b! ^
var heapMemParams = new HeapMem.Params();
% y/ x# c7 m  l: DheapMemParams.size = 0x4000;0 R* L" |: i+ Z* x
+ U" ^9 L) {! [* \; p6 A/ j5 m
var Memory = xdc.useModule('xdc.runtime.Memory');) r) z2 s) t+ }/ S( ~  @2 y! X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" O" G4 |# P+ G- v1 Z. e& _4 s

& t8 x2 `: x  J8 m, v& o8 u; s我大约calloc  每次共计大小为5K*16bits,1 K" L$ f/ {* p2 {+ A& `/ l& z
而默认配置才0x4000、需要改大。5 U3 z9 l+ ^; f9 X

/ b' O9 i8 P% q: c4 _2 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 ?5 ~* m  i( g" }0 r3 ^Program.heap = 0;
5 l1 [2 v2 J6 F* A7 B  v+ eProgram.argSize = 100;  /* minimum size */
4 X$ A9 t# J5 u+ jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-4-7 13:17 , Processed in 0.045321 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表