关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, S8 x: S. w' g  c4 E  ^, y+ m6 |
5 Y! f3 `$ P9 s$ V+ I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  W1 S! G0 F, \" m& N+ J
6 j2 D$ j% [7 v; j+ n
其他程序段。。。。。" f5 z) e" d% U  p6 E; i: F
  f# v' @( ^0 }2 `4 t
   free(x_d);
3 Z/ d" ?4 j$ N* L2 i; J1 L5 Z- J: R, L7 |0 i, K7 }3 O/ N
使用DSP侧单独调试功能,验证动态申请没有问题,; s0 _3 Z/ }: p

$ @1 f6 T9 V$ \3 e" D. T! t' V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! u, Z9 j3 W$ C$ A

# h2 l# O0 r$ @: `
# K6 P5 t+ m0 T" J  a5 `
; z1 v2 {. S- C8 ~- \3 Y* N% h

& t. A6 l3 z2 P0 [% W, W8 @
, y6 b6 i4 b, u' J
1 r: Y$ e9 m  ]3 w
! M2 |5 Y+ u2 W- O
2 @1 m# |2 F/ P" m8 ~* R! }! L( W1 t+ R. `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" X; o8 Q, \' w" c4 ?  d- C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ O1 P% n- {/ O2 R1 s(不过疑惑的是,为何单独DSP仿真就没有问题呢?). U; E5 x2 i: k& g
2 c7 S$ w1 y" r0 j2 K8 `
是不是需要在DSP.CFG中进行配置0 N# n3 \) B. u( m/ `  {
我现在的配置为
' l+ u' g* P( D, k
. Q  s* ~2 o% q0 N; [# b/*4 v) t% C( ]' ]5 u4 X6 O) k
*  ======== Operating System Configuration ========& t4 x2 O! m# c: ~7 _
*/  I/ U/ z2 \( P- V5 b4 e" f

. \0 M- f# z# R9 Z( a/* no rts heap */6 g+ p  Y4 x; M3 [* M  I
Program.heap = 0;; }/ h  Z$ V, ]
Program.argSize = 100;  /* minimum size */
" ]& z/ z7 n+ L7 pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# h# P& Z. {7 S% {. A7 w) E' @& m1 L6 y/ [0 e% B, A" a$ b
/* create a default heap */1 B4 J9 G, }, x7 M/ ?6 q5 h1 b# }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 o! B- x, L" t
var heapMemParams = new HeapMem.Params();0 C* [, N6 @' k8 e+ Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! V+ ^& N$ c( r" m. J! r1 ^6 Q) }; X% a5 ?9 ~) j
var Memory = xdc.useModule('xdc.runtime.Memory');5 L! {7 N( N8 h. c4 e  n( j- j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( o( C" E6 D) G0 P2 o+ p; m

& l& o  r: V2 Z4 }& t' A/* configure System module */& ?4 p6 V) C6 x/ C2 _! M
var SysMin = xdc.useModule('xdc.runtime.SysMin');& N( x) R7 Z+ G$ ^
SysMin.bufSize = 0x1000;/ |! b: a8 X. ~2 h) k
SysMin.flushAtExit = false;8 X: C2 v+ [. u# q5 r# x: f0 }

( p6 Z# ?9 \- t! Gvar System = xdc.useModule('xdc.runtime.System');
. ?" `6 n% }) j" P0 _System.SupportProxy = SysMin;
2 p1 Z" _6 V1 Z# n+ L/ s# Y" l/ k# x& e9 n, z+ X
/* configure SysBios to use the lower half of Timer 1 */
/ g& K0 c7 S7 H! K5 u, jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: g8 f( o, L0 N) svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 U. w- i( ^: ?% f7 Z1 `; hTimer.timerSettings[1].master = true;9 U! E  Y9 @5 v; ]) u& r
Timer.defaultHalf = Timer.Half_LOWER;# h& U: e, u$ ]+ |
Clock.timerId = 1;
( y, r) B8 [) M0 q+ J9 d# d  u( H! A
5 w/ V  [# h- V! \6 V: l
/*6 e# e: M5 t! I8 q8 Z/ i2 C
*  ======== Miscellaneous Configuration ========
- E! N. m: h" G+ ~% Q! B6 G1 ] */
3 f% o7 S6 R0 M! q- c4 I) z, _1 M6 e4 D+ M
/* set default diags mask */. j0 G. ?2 w  {; l
var Diags = xdc.useModule('xdc.runtime.Diags');) I3 k! j! I. r# w$ e
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* T- l6 [9 e+ b1 W, u9 R
  `9 y/ i) Q0 }0 [% A9 QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, X, ]' k% G; w& t9 k. h3 |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: B7 b) r3 u- B$ v$ N' YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  P4 d& t$ v/ J& S$ a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 Q7 }8 `* ]+ e+ [+ [6 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% ]+ M1 K' ^8 `; v4 I% Q" D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. N6 I  @( ^) b1 Z: z! F9 H2 n5 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 J8 O4 \! E3 w7 U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 Z/ w' D3 j4 [3 W" H4 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 I4 E% M. ^2 ~4 d. z) o. aDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: p# v8 f2 Z$ n9 R1 X) VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# q& B) `, b  a. Y; n# P5 M) s7 H: `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% }" `# b+ ~; C  j% O8 U) ~# D  Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( M/ L  K3 K# z5 o, t8 O% N8 M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 Z3 T8 P( Z. X
  V, K1 [! E& E
/* override diags mask for selected modules */
6 d2 R/ z1 f3 d1 lxdc.useModule('xdc.runtime.Main');7 u1 w! Z0 o- V0 `3 A6 V
Diags.setMaskMeta(
: ], E; B" |/ R- V2 S8 L6 @    "xdc.runtime.Main",
  {! a( o; l4 f1 r  \. h2 E5 U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, {. t6 X# c$ P    Diags.RUNTIME_ON8 S& T3 F  k5 }9 C/ }
);8 B8 U7 i- |$ u" {* L6 t7 G4 }6 N1 E
: G- V8 c9 v  F$ C8 F, Z8 {
var Registry = xdc.useModule('xdc.runtime.Registry');
0 Y! \% t; C. Q0 k! ]: RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 {' N3 T& z5 h6 X' ~& ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ q) @4 S* r) m* }4 C! `) o/ ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ }2 z0 K( r6 V. j9 ~) G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# n0 w- [. n& N1 n$ x1 N
" H  J# {4 J  `2 E4 z, G7 r/* create a logger instance */
& q9 t" ?0 L5 v, C: \4 T4 F) f% k# u' Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 ^1 k6 A& ]8 q% vvar loggerBufP = new LoggerBuf.Params();9 W  E$ m$ F; j# ~( ^: c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 ?% B6 L# x8 l7 X7 L& ^- GloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! F* c6 P0 N- @
" c' Y* z. B! _var appLogger = LoggerBuf.create(loggerBufP);
- |% c! T* l2 J; ?" R4 v. m% [appLogger.instance.name = "AppLog_Core1";
. F" O6 D/ M# F% |Defaults.common$.logger = appLogger;6 z* Y1 [: ^% U. p. E- Y5 S5 ?
Memory.defaultHeapSize = 0x8192;   
! y6 |  u  a* z% sIdle.idleFxns[0] = "&LEDStatus";0 A0 ], b8 C. {$ ?* @8 ^7 @3 a
Cache.initSize.l2Size = Cache.L2Size_32K;
- }: e2 D( \# I- ^+ L0 P* r& y% n) e* |
回复 支持 反对

使用道具 举报

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 */# p) f6 @7 ]6 \+ @2 L9 }' E7 O& f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ A' P( }( d- i  }% H' K
var heapMemParams = new HeapMem.Params();
9 y) W! T* }" c) J6 t1 j. ^heapMemParams.size = 0x4000;; o# g. U! R- L& g( C
' @( k+ k9 N6 N  B3 w1 Z" w
var Memory = xdc.useModule('xdc.runtime.Memory');. r( X( M$ v- v% U& G& H! u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ^: \: z- ?# E, d# l: `1 \

7 q$ `: J- N. k, Z: {4 T我大约calloc  每次共计大小为5K*16bits,% o1 W3 a( y6 \2 [1 O4 K, g) J0 z
而默认配置才0x4000、需要改大。
4 s1 H6 W" ?  c. j4 _' I. R' A; z) z+ }* Z; B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% M. t" x' K* M; h# v+ mProgram.heap = 0;
8 e0 s1 x4 r- T+ S7 l* [Program.argSize = 100;  /* minimum size */% I* ~9 D& A# F3 ?! ]3 p% g
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 06:00 , Processed in 0.042600 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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