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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 L5 D* S0 `# ?& y: i+ c9 D4 |$ X" c' H* H* a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 w2 r* Q& \7 \1 c/ q! u

$ ^9 t/ o# H2 v6 q& L其他程序段。。。。。
" W8 |* [' U5 `, X7 V
0 e8 v+ A/ l# V6 A& g$ k7 h   free(x_d);
1 M/ m- f# L5 @$ n! i5 X1 v' J- v7 e8 S2 W6 e
使用DSP侧单独调试功能,验证动态申请没有问题,
9 F5 }) S7 t9 v4 E" S: A8 A  A+ C+ Y0 [% q9 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. b( Y) C# W: f/ V9 B0 Y  U! ?

, r9 [  S7 M$ Q- F. q. w# [, j8 X) M! \/ f7 D7 n2 @: r
, |* N/ ]+ V8 I: k- @  t

$ z( }" N( Y. w( x: j. X- P: f5 T
  S( Y% z! U* k+ J' ^

7 V& k8 K- a3 Q2 T+ \, |0 E
& c; G+ c0 T& ?4 i
* J# S% g; P- X: G7 L. u# P9 M! g/ R. A* s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 I$ {7 Q* Q* |1 Z' x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& B5 a' M4 c6 H- Y( N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 }$ q# l  Q( `7 b8 Z  g9 q5 z
2 F$ ]% ~4 ?+ J1 N; t8 G* J
是不是需要在DSP.CFG中进行配置' d( V& _- l: v" A- T2 K9 A" B4 X
我现在的配置为; l" B/ Z2 w$ b( l2 f6 F

+ o; @3 Q' f: q& K  w2 W# p/*
3 a& z1 Y0 j7 y: F' v *  ======== Operating System Configuration ========1 W; I% ]8 J" r: L$ z
*/* q, V( v( l8 W& q2 W; _6 ~1 n6 \
3 w9 X+ V8 R4 }( Z% P/ h7 ~
/* no rts heap */6 x: h3 a$ N' V8 g9 v4 a
Program.heap = 0;
; W6 \4 |- [7 M% }: Q' _* UProgram.argSize = 100;  /* minimum size */
0 L+ u. _# W  `* |% MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& u9 {  E2 f5 w* `5 _6 ~% ]5 U3 O0 t$ ~. E8 b
/* create a default heap */8 S1 Q- F; q, c5 o7 g" O3 K  ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 W, H5 q) O9 ]  mvar heapMemParams = new HeapMem.Params();
1 T/ C. s. q$ t  l, x0 xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 G6 P; a% K& [1 k4 K0 k9 e  j8 D

1 V$ e2 d8 }- }& |
var Memory = xdc.useModule('xdc.runtime.Memory');3 ~8 c0 l% h9 p0 d) R$ J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! N) i4 E! E1 e

" s1 ~) O% o: u7 Q2 b% x5 \/* configure System module */8 @& [" ^2 u! d/ \9 N5 Z5 F: s& r6 d
var SysMin = xdc.useModule('xdc.runtime.SysMin');, [7 w. u; X% f5 f; ?3 B# V( g
SysMin.bufSize = 0x1000;# _; n! x) p6 U8 g. W4 e- ^
SysMin.flushAtExit = false;) }$ x' X6 Y  A& M9 b6 W! |
7 e) R2 T7 _$ w
var System = xdc.useModule('xdc.runtime.System');
8 r0 g- K8 Q( ~) _% D. m- ESystem.SupportProxy = SysMin;$ z  S% s1 S! H) N& G, g
: j; G* X' I. l' I  C4 I( E# E+ [
/* configure SysBios to use the lower half of Timer 1 */
, [& x& e! `! d, |% d4 v- _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 k& S$ r. i" i! }var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. o3 G9 U$ k% ?; P# d' P' ^7 PTimer.timerSettings[1].master = true;
$ R! X  b" V: q$ M* cTimer.defaultHalf = Timer.Half_LOWER;2 L( d/ a" Y& y4 n4 B$ }( \  B
Clock.timerId = 1;; m- K, {% Y/ V' Z

2 I7 }" c/ V: B, z& {7 n/ B7 B  E
% S+ J2 [: z! W- a8 v- y9 C/*
7 z+ \# y* k% y6 L( u4 }+ _/ ?1 G *  ======== Miscellaneous Configuration ========" z  k) l2 J7 ~: R4 ~
*/
) e  z: e/ N3 q4 _' t. d  `  D" }' j$ {+ ^: b
/* set default diags mask */% x2 [) G' k' s" B. {+ K( ~# \
var Diags = xdc.useModule('xdc.runtime.Diags');
1 R9 I4 z5 p) r/ q$ y) k+ q3 r6 uvar Defaults = xdc.useModule('xdc.runtime.Defaults');& ^" L3 O# |' M

# f4 {, O0 ]) F. y* IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* G& B0 w" c% I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- M$ G% K+ D4 o2 s- w/ w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ f) [/ F% C" [' B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. t$ M% {/ ^( a( B) @5 h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! `  n" T( o  W* A4 v" b' ]
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 G( j0 Z, U5 {3 ^% y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 ^* Q1 _5 n3 H' T! Q2 E4 A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 L, f; g  a  O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) U# X/ [/ }; p7 H4 x' B9 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ }: U+ l/ G# `0 m0 RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 R  r* D$ w: t4 _& W
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 V7 w: W1 W5 d/ q* D$ ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& X$ u" P: }1 PDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% f( u# E% Y( \( U2 F* C
$ a. b* ~) X& U/* override diags mask for selected modules */
. g: R7 U; t" L, i3 w6 yxdc.useModule('xdc.runtime.Main');
* U, s4 ~7 D5 Y5 fDiags.setMaskMeta(
# h9 p1 N9 L' R. y    "xdc.runtime.Main",+ Q/ V& B$ L' M& Z' F: s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& N0 {$ z: M5 f% `- E# A    Diags.RUNTIME_ON1 x0 ?7 A5 ]- j- y
);
2 K: j, i* n# W3 t" l: R
# x& A* h. A: |! ]7 j8 e1 Kvar Registry = xdc.useModule('xdc.runtime.Registry');1 Q- h; i9 t& Q1 [" _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ d3 B2 I/ I0 q/ fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 a2 v' D/ q4 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, U- L! R4 D0 p, L& p# D, ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: Y: d/ M# }* O, [  e& R
: [' k5 T0 ~& k# L5 `2 j
/* create a logger instance */! W% ?' p2 z, R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) j) q8 c' n: v+ r7 m- {8 n5 Dvar loggerBufP = new LoggerBuf.Params();6 B0 z* _9 v& w( |% e: V8 V
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' R! ]9 v- t4 {! ~' X- {* F; U$ R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 ?6 P7 N& C8 ~$ r- Y" m. O
8 n  l  V: l* e% u  m' pvar appLogger = LoggerBuf.create(loggerBufP);' e( t- u  d) H9 b
appLogger.instance.name = "AppLog_Core1";
6 J" c: L: p0 r6 B/ vDefaults.common$.logger = appLogger;
+ ^! R; k. k) X" e% `Memory.defaultHeapSize = 0x8192;    : z! G# ^$ k) M: m  v
Idle.idleFxns[0] = "&LEDStatus";
! e* P; l1 ]2 WCache.initSize.l2Size = Cache.L2Size_32K;$ g3 G( V* h( }# Q, s0 X0 I2 G
' j' S7 b5 e0 @! @4 b$ }
回复 支持 反对

使用道具 举报

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 */1 B7 y* g9 Q; L1 Q% n' U; B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 L$ X& B; z+ @" e/ F9 x" M" q0 bvar heapMemParams = new HeapMem.Params();1 P; s  f4 a4 Y! L; m/ ]- S9 S
heapMemParams.size = 0x4000;! ]& i+ h8 U9 O; o4 t/ {  g
' J; h! m* U& ]! h
var Memory = xdc.useModule('xdc.runtime.Memory');. C' {1 ^* t2 S) _: j$ `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" ]9 Y3 o% r( ~9 B( f
3 e$ q6 Q' g. V% G* s. x6 ~
我大约calloc  每次共计大小为5K*16bits,
, h7 z+ A! w# ]1 E. d0 k而默认配置才0x4000、需要改大。0 Z- g3 r  b0 g0 E. E) F. w

' V9 P" p9 U0 O3 \; A" n9 j" {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! Z% w( X. l  d" d
Program.heap = 0;6 B  m4 F  G8 u
Program.argSize = 100;  /* minimum size */
; x4 c% k3 {  L8 t( hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 00:56 , Processed in 0.046322 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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