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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 m' k5 `1 h! Z' o3 ?4 V2 D1 v& z, }3 }' `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 c1 A: h" [) X1 ^* N9 z6 g8 L3 q6 A
其他程序段。。。。。- d/ W' ^" D: [! |$ r
0 v5 N' x9 M; v2 ~4 T9 {
   free(x_d);
& B- M2 b& h" f  u5 m
, P) [; C1 ^# j4 a  a使用DSP侧单独调试功能,验证动态申请没有问题,6 q& Q8 u  d; R( Z) f; `
& J2 L7 |3 X; E( ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ s) n. f/ I+ \" u

' W2 [( K- a; E# ?6 Y2 N' U  \  [. c

5 M/ A8 \' G/ j) T  T7 o- B( F+ y: u# a5 o( m9 q  q8 M, ^# W" x

, B6 q& \: k0 D- \+ Z& E
" r3 \: n8 l* p  o2 j  @
3 v0 F. O+ z8 r+ p/ @; |# [
  j4 X+ {% G  X7 _' }  u( }. I- z3 x  q1 Z1 m8 B9 `0 M! Q# b, f
; h4 b( e4 u, e. ]% g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  u& e: K2 a3 e, {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ n. g0 O& b  c5 p7 C  v6 j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), Y2 T% S  O5 {: P- [1 o
! z7 ]  r- U6 \9 C* ?. v5 q, h* L
是不是需要在DSP.CFG中进行配置7 u; G1 B. ]$ _; [) x
我现在的配置为
+ \# e! S# u8 J) |  N
$ I  R% _; `0 _) u$ R7 _8 N/*' z' `5 e% w- f0 e) Q1 ?, x
*  ======== Operating System Configuration ========1 N. q, D1 Z: t8 e( D1 X
*/
8 R6 v; j! T& _
1 [/ T( b" y  A; [+ }7 D/* no rts heap */
6 c* m) V$ u3 C6 I' s) fProgram.heap = 0;, H, x$ {: s$ G4 [' V4 ?* O
Program.argSize = 100;  /* minimum size */
1 B( P. B7 Z$ tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% E( O* u: @7 S3 ~% o, l& i2 F8 W; l* f2 t3 _( m
/* create a default heap */
& o: |* [# h5 D: h/ {) p2 U$ zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 c- M. X/ V+ k$ Z) F; }6 f: K
var heapMemParams = new HeapMem.Params();
0 o8 d- R! }) |" ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 H+ K$ K6 F  B$ e( S; ]5 p% Y
) J8 n, O2 T) o6 u2 I$ e
var Memory = xdc.useModule('xdc.runtime.Memory');; M& ]9 T7 ~' S: s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 l5 W% K9 `7 b7 N2 l) @* T
$ \8 [2 Z% y# y9 s  j& O- T/* configure System module */0 N" B! |# k+ a& v' W
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 w! U1 g, Q/ T' A' A* |SysMin.bufSize = 0x1000;
0 ~6 U& q  e  k: q4 [) eSysMin.flushAtExit = false;3 ?. v5 N) n4 `2 r5 n) s9 Q) ?# \4 K' ^  V
6 m. f( z& I5 _1 i
var System = xdc.useModule('xdc.runtime.System');
. F4 y, C$ m" B" DSystem.SupportProxy = SysMin;
) ?4 b" n2 ~% }% j, S; J* T. V' W3 `7 p9 \; Q
/* configure SysBios to use the lower half of Timer 1 */- V2 q! V0 Y- ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; ]3 c5 U. B/ A  dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' G& H5 I: ]4 U+ w, h3 @/ x/ r3 l5 MTimer.timerSettings[1].master = true;
5 _$ y# V% I3 GTimer.defaultHalf = Timer.Half_LOWER;
5 o5 Q- `8 ?; n3 ~3 xClock.timerId = 1;9 I/ q( H8 [) [. a6 X

& h& R7 u* a3 ~4 c+ \8 f7 w; M% v8 x# B) I8 j
/*
+ c0 n) E' r: {& @9 G% `9 x *  ======== Miscellaneous Configuration ========
% ?+ x3 E1 r  T' A4 N. F */+ e& g3 |4 U8 u5 S4 ]
4 \5 B8 X+ S+ ^. [9 V8 `, a
/* set default diags mask */
" u! Y0 Z+ |" Q# Z9 E2 K( Rvar Diags = xdc.useModule('xdc.runtime.Diags');
+ }7 V( `- Y) ?2 f+ Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');! r  `4 Z1 N' c+ m' f7 R$ p

# \" H/ F7 K* U" s/ J9 MDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" U+ h: u2 k+ z( {/ y- nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; M$ o0 X: H+ j* tDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ S& k+ S, }* o! G- G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 k: G8 X9 s" S. h) HDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; t9 \5 e* R9 E( w0 p
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 e2 i8 |. o8 @: g! I4 NDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 ^6 C& Q* x) k/ d* n; fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ e1 H5 `8 O) Q% H' U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% q% X& H' c, L* b/ yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( P( |* U2 w0 N7 ~4 M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ y! D' `7 v: d: e* Z6 FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 u: z5 b/ c% g1 Q4 B, \, x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 N* I" r' G8 b$ ^  cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 W% J( c2 A5 @- ^# S" g& ]; R8 c
9 b3 W: |' F2 f' z$ p% R: ~/* override diags mask for selected modules */
$ A% s! s5 q6 F6 Cxdc.useModule('xdc.runtime.Main');% C8 k1 h( @) ?2 H, z& S
Diags.setMaskMeta(
3 B( i. ~2 L# i' K    "xdc.runtime.Main",7 d9 B; b; Z8 ^( i* M+ W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 K; |( h, l+ R, h    Diags.RUNTIME_ON+ t. r+ D3 s% p$ K+ x
);4 P% J8 D$ `4 q; Z. E3 x  `
! ^  `" J9 J' ?- N5 Y/ c( J3 s
var Registry = xdc.useModule('xdc.runtime.Registry');5 [0 q5 v, F% E/ x1 v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! }  q! V3 D+ w- ]1 u& j  J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. l/ a" K3 _2 `) ~" r# [. r# T7 N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" B4 Q* S1 x9 E1 u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" A( X* t! F6 R+ k# O& L4 n9 D" F1 c8 k  l$ r1 E
/* create a logger instance */& ?8 t/ o7 h/ K: R+ M# n6 c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ e, G0 h& [8 k/ e
var loggerBufP = new LoggerBuf.Params();3 x3 a  }3 `, X3 d( w. {: @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! Q7 G# _; L+ S! o! _- uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
* m8 A- ^1 b/ f( P* _/ U8 m' h- X1 ^1 w* R( ~
var appLogger = LoggerBuf.create(loggerBufP);1 s1 L# w* `3 u$ E
appLogger.instance.name = "AppLog_Core1";8 M- Z+ F1 c: M0 r( V% s; B
Defaults.common$.logger = appLogger;% J! R$ |1 E% a& P0 I
Memory.defaultHeapSize = 0x8192;    ) S& l9 o8 N$ }- c3 u1 u! A0 G- ?: V# B
Idle.idleFxns[0] = "&LEDStatus";
7 L( u- O7 @& }8 C5 hCache.initSize.l2Size = Cache.L2Size_32K;0 n/ X" x# d( A+ a- y
$ |- m6 Y! w3 `+ E& a/ X' g/ m
回复 支持 反对

使用道具 举报

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 */. R$ R! u! Y; T8 P3 ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 p8 e% K4 F+ @" U( S9 W' Yvar heapMemParams = new HeapMem.Params();- ?; k7 ~$ y6 D4 Y
heapMemParams.size = 0x4000;
. ]* H. {$ u* b- E" O2 a# ^
+ z( [1 [6 j, _* tvar Memory = xdc.useModule('xdc.runtime.Memory');
7 b% |: v0 R  ]* ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# l8 n" M; N: r! r0 b. f0 c# a
' }2 G  m; T4 e2 [" G- N
我大约calloc  每次共计大小为5K*16bits,
) @* n5 z) w9 a$ V# S5 R而默认配置才0x4000、需要改大。4 u/ X4 y( w9 x' W# p
6 ]7 L% A7 w2 B% r* d2 S: p9 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ p8 n/ q9 j( N
Program.heap = 0;
+ u. p6 ]4 X5 u3 z, K5 k. CProgram.argSize = 100;  /* minimum size */" O/ g7 N& C- @% ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 12:13 , Processed in 0.045447 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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