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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' z! R, U9 s- h/ a& f" f" P
- ?0 ?1 E1 b3 ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, ?) ~- P: R* |! b( `
) I5 \' a' y0 O0 |( K. X  s, l; j4 R" C
其他程序段。。。。。9 F0 e" r/ W" P

. Z. d5 ~' R  V( f6 l$ v   free(x_d);
: h6 \- Y; w5 R+ S7 E
0 {% C) b5 U  F0 }) K使用DSP侧单独调试功能,验证动态申请没有问题,- Y4 R3 O+ c6 ~. |) y

: q. T* Z% C) `# P, _4 g) e4 q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ Y/ P! N2 a- L" {- X* w3 I

2 B/ H2 k' T2 K" B9 F' o; k- h# a2 j+ I  `9 b. ^; i
+ l8 E0 U4 ^- }- m2 M+ i4 }

1 S1 W$ K% [* G- T) R0 _3 A& x7 o  ]5 H7 h

( I' E1 G! p* q( B4 t$ i2 }% |2 k; o% j+ r4 y
' C; w" H: x% K

6 `: A6 |: K8 W( l6 T" q% Y. V) ~  J) {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 Z! m9 {& n' G' f; Z& C% E( v5 O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  k, c2 B0 N0 M. ?) T$ f2 Z% t7 ]; W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 ^( |/ P  ^# J

2 Y7 ~4 c& o( i1 \; y2 {是不是需要在DSP.CFG中进行配置
# F2 Z! l' O7 w9 d我现在的配置为
! x+ D7 m6 p7 G5 r- m& [% x2 l+ Y) x$ G; P7 n* S
/*
: Y- }% M& \  t  X& u6 b( [ *  ======== Operating System Configuration ========. w6 e7 x& C' W) ^
*/
, ?+ a: R8 T; g' V# w
% j2 `: p9 e* ]8 Y2 C/* no rts heap */( ]$ i* r9 y7 X* T4 \7 F" Q5 m4 e
Program.heap = 0;8 F5 R/ {/ d  \" J. `( g2 [) R: @: s" j' {
Program.argSize = 100;  /* minimum size */0 a- g! q7 k+ y' _, H8 j
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- R, f+ m) i0 d6 A: R  o8 d  K# l3 _
/* create a default heap */
) E3 ~" c/ u6 n3 Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, ?  V& j$ H2 Mvar heapMemParams = new HeapMem.Params();
7 a8 _0 y: K. q6 F- I# g  R4 CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- F# L; D: ~( ]/ a
9 n% b' `' G8 ?. x* M
var Memory = xdc.useModule('xdc.runtime.Memory');: B7 R& Q: Z+ @/ c! e2 i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 g0 F* b: T3 H7 E8 t8 f

. o& {) ]% B2 B% d( L$ ]/* configure System module */
, ]( K) U1 _; Y: y6 v6 ?1 [var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 F3 q0 [' T4 b$ o. m$ K7 [SysMin.bufSize = 0x1000;
4 z3 z2 A+ U# wSysMin.flushAtExit = false;, k8 U, a' H1 ^# U) q0 r% D
6 o! e+ {, H& k9 k3 m& v
var System = xdc.useModule('xdc.runtime.System');% p  n$ ?  c, e8 \5 ^- c
System.SupportProxy = SysMin;& Q, I* i! l4 N& ?$ ?7 `, r

) I+ G. b: |# ?- s/* configure SysBios to use the lower half of Timer 1 */
/ [! s( u* _4 Y! I5 F: _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; e* x8 b6 h; h; p' z/ _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ z  E/ m2 I; _. V! fTimer.timerSettings[1].master = true;
  J/ d  Z) |- R+ d9 L0 nTimer.defaultHalf = Timer.Half_LOWER;3 E- e( ?4 j( @9 u1 T  a
Clock.timerId = 1;
/ F' q- K% W* U3 @7 o( K- y5 V5 A/ L* m- |! _' K

2 E1 L) K2 a) m7 P/*
* x( O7 [3 L- ^! c0 T9 U *  ======== Miscellaneous Configuration ========
; g- Q" a+ J& i  \. s */
7 e( ^2 d( B  c" a, G0 X& l! O% R  A9 A
/* set default diags mask */( M$ Y4 J% t5 {  c
var Diags = xdc.useModule('xdc.runtime.Diags');
1 ]. R% x( @( U6 V  Z' J+ dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
% r0 i0 L$ W( u9 T) j
7 _  R8 q$ Q: L6 g$ }5 A- ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  q. _4 o* r2 O" R& a! C' O2 ~, e2 p" g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" p8 u* \- h' z+ L2 O# o. O
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: K! v" }( T/ Z3 nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  J, O% \+ t: U, g' ^
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! ?  p. F  I0 w! y- iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" z- R# Z' G9 l) N3 n2 ]4 X
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* t* E! o. M! n) e, x4 {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) u& A, ~8 @5 [7 N' LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. ~/ F. E1 G6 V9 i6 ADefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% [0 }4 k! b/ P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 w7 p8 _" b# j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& v9 f5 |# d6 v  Y$ U' `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) R+ I2 c( D7 \1 y4 ~0 z- g. i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 S' ]6 s! S* a7 c" y" d) R

1 R% U" r/ N) A/* override diags mask for selected modules */0 m) h, j8 b1 V- ?
xdc.useModule('xdc.runtime.Main');% ]- z5 z% I* Q7 e) L
Diags.setMaskMeta(# D3 E! s% X. u" q  m; j; h
    "xdc.runtime.Main",
) ^2 n3 M9 y3 j! L8 Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 C+ O0 E. J" g$ @2 K" h& F7 i+ `
    Diags.RUNTIME_ON
& ~% F+ v  r4 k) b0 r+ R0 `  u);/ |- \5 I) Z$ m' w, F# E

8 z, l" V( i' f1 @var Registry = xdc.useModule('xdc.runtime.Registry');9 l8 K' p8 b! E( O- l# \2 \7 W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ H7 v: X/ P6 ~& p7 ]9 r3 V7 ERegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 E6 Q% h) ?  [8 V% z% x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- J- i. f: O( S6 Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 j% i- H+ o+ u. _: b

, a/ q0 b) E) x0 ?$ g7 z6 v, |" \0 j/* create a logger instance */
. y9 q' m' O8 K* A4 {* Zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% H# _+ a" H3 D1 m9 [) Dvar loggerBufP = new LoggerBuf.Params();2 [" e6 Y7 K7 |/ n& P4 ]* K5 i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" o' \8 M5 E- `  [loggerBufP.bufType = LoggerBuf.BufType_FIXED;" \4 p9 g# `+ A: v5 |' A3 F
' ~( G$ @" s/ U+ l. \
var appLogger = LoggerBuf.create(loggerBufP);4 Z$ n* i% t6 v* g1 c& m
appLogger.instance.name = "AppLog_Core1";
) b. z& ]0 S( S( j& N  WDefaults.common$.logger = appLogger;* E8 C% |5 P5 U1 g1 c# M% P& l
Memory.defaultHeapSize = 0x8192;   
6 M) O6 s, l+ S7 e9 LIdle.idleFxns[0] = "&LEDStatus";
4 V. i& F2 z( K1 i4 ^3 lCache.initSize.l2Size = Cache.L2Size_32K;
+ W9 A$ I8 b/ K$ f4 J
* }' o, Y1 t- A8 L# r0 o
回复 支持 反对

使用道具 举报

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 */
0 S) S+ R2 _) ~6 V0 C- ]0 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 q1 O) w4 Q3 ^; L* [! X4 I4 ~
var heapMemParams = new HeapMem.Params();3 r( ^. E9 @9 a
heapMemParams.size = 0x4000;
/ [9 G# f) x3 \/ [" N. C
2 y" b- w- o8 J. R) Pvar Memory = xdc.useModule('xdc.runtime.Memory');
+ ^$ ?4 |: P3 E, |; w9 T( K! v$ I# RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- v  G) O1 ~5 q' `5 n
/ P8 u5 k0 M( a" n8 z2 Q
我大约calloc  每次共计大小为5K*16bits,
- M( P0 F, ]7 |  `2 o# _而默认配置才0x4000、需要改大。
. P9 g2 Q1 @  Q/ }& E% V) U
4 t) B: ?  \" ~% M4 o0 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  O, g$ N# w5 z7 p
Program.heap = 0;
" D# P& N- l" ~6 T$ V& t& V/ n* X: BProgram.argSize = 100;  /* minimum size */+ h+ `7 p, R0 X# c& _/ |# l
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-8 18:25 , Processed in 0.061654 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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