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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( l7 ]: k( U: v* R! M" Y
+ X( W- y( u- R/ z8 b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ U$ ?1 H; c$ m" d' [9 l

5 C( ]' x8 u8 O% W! G4 c其他程序段。。。。。
1 g, }7 _7 u, F* K. D
4 U( P. S2 Y' E$ U+ X3 U   free(x_d);
( P& L4 q; k  x! n* f  a6 R! ~1 G( ?- B
/ k! Z5 t0 o" x. j3 h& ~3 b: w使用DSP侧单独调试功能,验证动态申请没有问题," R  m" a, F1 x3 b  U3 Y' D$ _

5 ?! d. [" j5 ~* L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' f! n! Q. N4 Q% r. t0 N

3 N9 M8 u  q" j: ~3 S+ g# H7 W) O& C9 z4 f# w& C8 U1 K* Q* A2 M
3 Q, v& T- |3 w
1 S% c' `" O2 k- o3 k/ u# O# \

& Q3 ]" Z, a7 V; k, }9 L4 [2 Q% z4 u0 ~% O9 g4 y

7 E" H7 s3 F0 b- `" {- o
6 s3 [' J& B/ k( |! P- M& B" C8 l' g' M6 \; g+ f' {/ c7 w
8 A/ V2 R; d) w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, V2 Y, x+ o$ u/ e* z* H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 M) |; w% E! h2 X7 a6 j(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& @. f4 v) R% ~) L! Q& E

9 z$ }4 `" C! ^5 q$ w是不是需要在DSP.CFG中进行配置
1 |1 \/ o, G5 K9 M我现在的配置为
/ A: @$ A3 `2 x+ H$ R$ ], U
5 }$ x3 i- q1 f" K6 s/*
6 s1 m! ^7 P, `( Q  c* U *  ======== Operating System Configuration ========
$ O8 E3 z# K) {' t& e' c  m */2 m9 j/ `8 u! D! G
7 z( \) _. n8 Z! h/ a
/* no rts heap */0 Y/ Y& ^- g9 B
Program.heap = 0;
/ x' B$ Q0 y, i+ Y6 b( U7 `. @Program.argSize = 100;  /* minimum size */
% W6 M1 L6 i' z4 E, AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 ?5 Z: r5 `1 G) J
. b, F! b% k% a8 O( ^
/* create a default heap */9 I  A5 W7 b/ R: x* @8 D; `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. j( K* ~! H3 W! C
var heapMemParams = new HeapMem.Params();; f6 a7 @" \# \+ E4 g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 R1 \. Y" a# k% h6 _
: l) c7 _  o* r" U/ r  w
var Memory = xdc.useModule('xdc.runtime.Memory');5 x( C  Z+ p$ ~7 L: p; a8 R- K# V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ a# ~$ W, k. g* ?9 }" p
) t4 a/ ?: w: O
/* configure System module */' z& T, t. l+ m5 c5 c; `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. R  q# A& f5 ~& o2 E" S+ z+ r/ l  RSysMin.bufSize = 0x1000;
7 J0 f. n0 }6 G$ k1 eSysMin.flushAtExit = false;  ^" r% C% e) p3 b
, v" o% {7 o' \6 V" Y+ L' |
var System = xdc.useModule('xdc.runtime.System');3 [: U: m2 |7 h" Y9 N& e4 F5 H
System.SupportProxy = SysMin;
9 O8 X* e# G# n" m7 m  O0 N; p  i7 u- `9 @" p* N
/* configure SysBios to use the lower half of Timer 1 */
+ f; |/ }, V$ ]0 X$ l; svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( [* \' r0 C1 V* A+ o1 j9 t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' I+ d. f( u6 m# T
Timer.timerSettings[1].master = true;& v  `" c5 C0 _1 }) t- g: R9 p- ?
Timer.defaultHalf = Timer.Half_LOWER;9 [- Y0 Z! W- B/ N1 Y6 T2 b
Clock.timerId = 1;7 t6 d+ g8 _7 O' }' n9 M% G
: f( M4 i. H% S# _2 W0 `" ~
2 a3 F: F5 Y  w/ Z# G+ {
/*
8 D; R- Q$ M8 N) f *  ======== Miscellaneous Configuration ========7 h6 ^# o$ e* [. T' S5 v6 s
*/
( ?. Y. g2 x, R* y9 v
/ z! M5 E. w: Z+ A* M' q8 e- X+ i# X) G8 q/* set default diags mask */
7 z. Y; X6 _3 {( a  Q7 Pvar Diags = xdc.useModule('xdc.runtime.Diags');
6 @( t4 @- f( f& z" N; m+ qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 D9 M1 R: L" r/ @+ y+ v% M0 _( p5 {# l# z* {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, n/ ~) p3 O3 I! t. X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' w  c9 |5 `5 x* O' C0 B& i" a# j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, n2 N9 s% S* TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 k4 \- {* H( i, z7 B1 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% h, E4 h: X% Q5 ~3 VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: K# m/ V1 G- x  I1 M* Z5 a5 @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 a5 m5 Y: n# o" \1 d: {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, e( i' `0 w. i7 g0 O6 H5 s9 m, D. e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 K( |, {& e$ t; m$ K# a7 J5 q# ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ r. q, w$ b2 C9 _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 h( e* z, e" u1 z# i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# ~4 Q; L& ~; `2 f, b: K& T8 JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) v/ p2 a% u4 n# m! ]' L$ E' V" s+ PDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! p- {# Q8 T; o8 h
) L9 U9 V" o4 [: X5 i6 J7 m/ d
/* override diags mask for selected modules */! e1 N, l! n; z6 M, i* q
xdc.useModule('xdc.runtime.Main');# F- `  o" Z1 _1 K6 e& N; @" H
Diags.setMaskMeta(
# ?5 T8 q# f; W6 F$ D: v+ x& K    "xdc.runtime.Main",
4 W& y: P5 \1 y9 ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* o+ ]- M( L  ?; s* U    Diags.RUNTIME_ON
; s$ \# _2 A; c& U);
- H5 r2 |; e# J5 B& l6 n. a6 Q/ b  ~5 b. E' _3 b
var Registry = xdc.useModule('xdc.runtime.Registry');
4 l1 e/ m8 M' c) JRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: {2 b0 ?$ a  I7 E& U7 @$ [  X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; j6 U5 M9 e) l+ a) qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 s8 v* g( ]  R) y2 ]) C& _3 f& D( B
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ D& M/ p; U; N7 U: J  G4 k; f" t
8 p- T/ ]" D  w, Q
/* create a logger instance */
3 u/ n5 A/ l; `. N- d! `var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 X2 q: M6 z0 Q( Z+ U$ u# p
var loggerBufP = new LoggerBuf.Params();
9 U" U; G% A: T- F% p" o3 UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" L! w# V8 ]+ lloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 ^% d5 @6 m1 x- X& `& X9 S9 E. u
: x$ `  {& l- z9 mvar appLogger = LoggerBuf.create(loggerBufP);1 s' @6 ]: z" Q  S* M
appLogger.instance.name = "AppLog_Core1";( Q( \3 ?+ {: d) l4 N4 R
Defaults.common$.logger = appLogger;6 g, n. p2 V7 \
Memory.defaultHeapSize = 0x8192;    ( X+ h7 Q% @/ m0 j) x4 t8 U, o
Idle.idleFxns[0] = "&LEDStatus";7 o0 G* E4 Z( G# w' C
Cache.initSize.l2Size = Cache.L2Size_32K;
) _8 F% o# }% b
! o" O& h) Q3 ~& {4 T
回复 支持 反对

使用道具 举报

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 */
9 M) @) o2 k1 o( V5 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% Z$ s/ F* o; ~. E; a8 ^var heapMemParams = new HeapMem.Params();
% J2 k0 @3 p" v% u3 h+ h5 Z8 s2 ]/ qheapMemParams.size = 0x4000;$ r6 M* b0 c$ k) J5 q2 j

# ?4 ~& E2 W, `7 Xvar Memory = xdc.useModule('xdc.runtime.Memory');; T/ W4 M) s# ^; {- F5 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- J/ s0 ^6 w% d: C5 K* m
% p4 f* I1 R6 [3 C& ?我大约calloc  每次共计大小为5K*16bits,) c% d3 n% w/ e1 @7 ?8 A/ i% d
而默认配置才0x4000、需要改大。% k- z5 L& N+ ]3 a( H% z$ c

$ E9 `  c4 X% h  l- u6 s& e0 L8 u2 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" A9 _3 w/ z/ x7 x4 e; X9 zProgram.heap = 0;
' L! }" r1 ~, j$ k2 {Program.argSize = 100;  /* minimum size */
, M. ]8 o4 a9 ?Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 17:02 , Processed in 0.041261 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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