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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

3 F7 I( N1 a! z: b! P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ T6 _: ^9 }( K. O+ @

+ i& v3 r" k3 v5 J- h$ u1 e/ W+ s, Z5 V( M其他程序段。。。。。
- R6 J0 ?! H' u% B
; I! A2 }. ^" `- g" j   free(x_d);1 X$ {- r- k+ U
( w) `! _2 _* _* u9 L5 H# N3 Y, Y
使用DSP侧单独调试功能,验证动态申请没有问题,  A) ^3 G5 l# q; I0 F& f4 d. t

; ]* m- o. f$ w+ ~0 }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 L# L7 C: D3 [9 C( e
! O; J- X8 @7 F1 f' q! d
% [4 P+ b% d& k3 N9 ~" D" x- J
* r3 j7 N( X" ]) i: X" b3 X5 R+ G7 X

/ Q- O2 \& P) D8 X, c
& E. w/ ?# e$ S/ m: J6 {8 F& l* F) ]0 w' @+ `+ ^, n! O
6 Y% H7 a: i4 R5 c

0 ?8 u0 X% [4 |' i- n* z. T% O8 I! O' w* \  k2 J& |5 p$ E" L
- Y9 [! p& @$ t3 _1 m6 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 _6 [- v9 h7 l) r. ]/ ~8 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 B- g# Z5 h/ m/ Y2 J& |2 N! @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; N$ f. t* o; X5 l# }! |& j
4 f1 g* z7 L5 n/ f7 k3 f9 h
是不是需要在DSP.CFG中进行配置
1 G( A! @2 f! V  v我现在的配置为4 R, k& r6 f8 _, p, k# t
: ~! [. T- ~) L# K7 S
/*8 V/ y2 b% E2 L# w0 i$ [8 q
*  ======== Operating System Configuration ========1 [  C' F- p1 Y7 |
*/
+ P' z; C/ r8 }1 t: m* a- ~* g# I; V4 R8 F/ H
/* no rts heap */1 l1 K/ C3 a* g9 i" N% ~; k. m
Program.heap = 0;, p) f# l' w) }7 |+ z& u
Program.argSize = 100;  /* minimum size *// J) K7 a% i' \! y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: C, ^. @8 {& m6 {( {

& L% j& @/ O/ W/* create a default heap */. @$ g" B7 L4 f, v. M1 m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* ?! B" V" r& E; hvar heapMemParams = new HeapMem.Params();, `5 H8 Y% K$ g# X7 J0 [
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# f  d( \. S7 q) S& H  V$ N1 }6 p
8 m2 m% I8 s: ~( I. h- E! c
var Memory = xdc.useModule('xdc.runtime.Memory');3 d! M" X; l& x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% K6 B, ]" ^2 c0 s
$ E. W1 q: r: X+ K8 O/* configure System module */1 C/ ^$ ?$ b( g5 X  ~0 _: x+ z. V6 D
var SysMin = xdc.useModule('xdc.runtime.SysMin');. A, r1 S) C; n7 ~9 j' A
SysMin.bufSize = 0x1000;
9 }- d" n  \& D4 ~' wSysMin.flushAtExit = false;9 Z: x. p$ E2 i. g

0 R6 y, i& |4 Y8 P" @1 C  Qvar System = xdc.useModule('xdc.runtime.System');$ |: O" t) E$ y, R
System.SupportProxy = SysMin;
$ U0 h. x3 h0 j2 f7 J  S1 r2 G( w# O& P. M/ H3 k- Z- G
/* configure SysBios to use the lower half of Timer 1 */) Y9 ]+ ^+ [4 T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 n* U7 U& J3 f  V5 i7 yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% S5 I2 M1 |0 J) y) `Timer.timerSettings[1].master = true;
) M5 E2 u0 B7 l4 ^Timer.defaultHalf = Timer.Half_LOWER;/ M5 B, h' W7 E
Clock.timerId = 1;8 {4 i, }9 O& m$ p( N8 l
- B% m8 o' M3 P! t
. u) x: N$ L- @' }7 T
/*
3 s# y  r# {4 a& T- E9 @% w2 j6 h *  ======== Miscellaneous Configuration ========
5 B6 \6 W0 z+ x( u- ~ */
9 G1 o. Q: {/ s1 t5 n0 ?+ m0 X& F1 y  i- x% Z0 T$ c
/* set default diags mask */
3 ?4 M/ }$ |/ P# ^* [$ Ovar Diags = xdc.useModule('xdc.runtime.Diags');
+ O2 A# a9 _4 e4 {1 Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
: `# p; ?& x) x( B! w' _5 V7 D7 ^$ k) a2 Y- E6 \" `8 x: ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; ~8 n% {- S1 CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% s9 A& `4 j: }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 N+ r7 G. w9 b7 |+ u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 e* C/ \3 H+ O$ H: I5 E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 F/ `# k; o% U# ]6 R* c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# ]- d- T& c9 g1 TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* L6 `- t5 I9 n, i7 o* Q3 JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% I5 b( x& E6 D! D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, s( _2 _6 @) R+ k) C1 s# G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 M0 n7 n. x2 s0 w7 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( L- ^) }6 b( B6 `# qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 n; \7 b4 A  Y; vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ I0 j% Q: k9 o  [1 J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 Y5 E2 K) p" y  Y! E
6 V6 |- x9 l2 }  J0 |- |/* override diags mask for selected modules */( l0 Z' j1 w; ~7 W4 N
xdc.useModule('xdc.runtime.Main');
1 ^9 x/ y  F7 T0 Z/ \& qDiags.setMaskMeta(5 u* Z8 O7 ^+ N+ h- G7 w5 z
    "xdc.runtime.Main",
3 w2 E/ C  {% ?2 L4 B. E& W    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 G. J2 [- B/ t! g    Diags.RUNTIME_ON
4 ?$ j0 C, X* t' o. C( k$ m' U);
9 o! m6 w/ t5 g: O, [; ]: s8 S3 S8 |/ ^5 w) ?4 }$ R, k% ]) @
var Registry = xdc.useModule('xdc.runtime.Registry');/ A* K$ X) }. H7 x& S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 f" n% C+ l8 x! ?% N$ M3 D4 n9 HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' r3 h8 @/ O8 ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 i: W3 K' Z$ K3 HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, k" `' `/ F& }5 E1 V0 ~
2 P2 j3 b' ?( P  B' O/* create a logger instance */+ j, Y1 Z8 o% U" _' M* V7 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ b0 v$ L( \. A
var loggerBufP = new LoggerBuf.Params();
% P7 s2 k, y7 h# d2 H# m& n" p& OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 z/ U3 a0 ?, Q; T. s! q$ GloggerBufP.bufType = LoggerBuf.BufType_FIXED;0 W+ W4 L. o0 f; b3 T

0 o3 q1 ~: G+ l/ {var appLogger = LoggerBuf.create(loggerBufP);3 r) D' {9 ]* B! r; |5 k) y0 \
appLogger.instance.name = "AppLog_Core1";
% k- T& D0 G: X; o# CDefaults.common$.logger = appLogger;2 r! R. w3 d2 \7 h! B' K
Memory.defaultHeapSize = 0x8192;    4 V+ d1 Y% S5 W6 F# W, E
Idle.idleFxns[0] = "&LEDStatus";
" p4 J  ?/ I8 j# _0 aCache.initSize.l2Size = Cache.L2Size_32K;
# ~( E! g6 u! A1 M* ]: ^7 e
( M% B3 K& `3 B. z5 @! ^
回复 支持 反对

使用道具 举报

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 */) b! i. m* p2 o: g+ s' b" N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 m! h% T; `% Y! {
var heapMemParams = new HeapMem.Params();
& {- v% |% l9 k( D  c1 S) BheapMemParams.size = 0x4000;" f0 A$ T) V& o' c8 a

7 H7 H9 _! i8 {5 uvar Memory = xdc.useModule('xdc.runtime.Memory');4 N' w1 P# U0 d0 h$ X% K7 G3 W/ z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 s- {1 S& S* y9 F
6 Y4 G4 y9 o' r0 F6 u; Y  N; W
我大约calloc  每次共计大小为5K*16bits,% u# B) [! t5 m
而默认配置才0x4000、需要改大。8 N. ^$ J3 h/ ^7 \

( U$ F2 \# q4 \7 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! m# Y+ O. U$ E9 wProgram.heap = 0;
% L- ]' _& ?2 J5 n" pProgram.argSize = 100;  /* minimum size */
- e9 `! T! ~$ {# U5 M4 SProgram.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:06 , Processed in 0.041151 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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