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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: Z# g- s1 s$ K3 f% Z. U7 {
6 D/ \7 n% v+ s; Y5 m    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 U; `7 g( A" R* T- F
- [5 C7 F/ U+ K, F! w
其他程序段。。。。。
; a8 V$ d) S9 { ! D7 G! Z" c. J( G
   free(x_d);9 ^! W) o6 T$ ~/ j

+ w7 e! H+ F6 @# T7 ~. w6 I使用DSP侧单独调试功能,验证动态申请没有问题,& n2 Y$ Z' E! a0 V

3 V3 _4 I4 _4 d' L+ V4 V* J, U' m6 i但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& a& X  r* @9 t. p8 l. i

3 F  q# T8 j0 q$ r: ~4 R7 I2 X9 s( z- c* Y! B3 y
8 h6 R+ ~0 V' o, N8 p
3 u* I3 T! k/ S# W6 ~
. Q) F8 G9 u  }- C
  ]2 H1 Q) Z7 P
6 l8 Y9 y/ l( g
0 J* }" @4 a) \3 A9 n
/ o3 K6 U- r5 [( C# c

9 W' R# [) o8 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 e6 }( d$ l6 v. ?0 Y4 H) v* a6 d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 V- N6 N) g% ]+ i6 `- o- F9 K: f: E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) m. r3 p/ r0 m6 T% w% [  L

. A; t4 H% I6 l. _/ m* C是不是需要在DSP.CFG中进行配置; C% |2 z1 Y, ]" ]/ r
我现在的配置为' X! m" o* l% c7 O1 Q

# [: N' ?" h7 y4 k/*
7 {/ ~% N; t7 p *  ======== Operating System Configuration ========
$ ^! M6 D  t% H$ M0 O; L9 P/ W */7 B/ D! _. d) `! c( P' y* N2 S: X
2 x  O) [  T5 _  H! U; D8 J+ }
/* no rts heap */
5 o' p% p3 k9 m+ @- D5 UProgram.heap = 0;
' ^& d; _5 }- I. S# Z. TProgram.argSize = 100;  /* minimum size */( O9 u" ~! o  d" K0 \; Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' h; P1 }$ A3 B7 H1 i, T. \, X
! f, }( k$ ~' `- A: N
/* create a default heap */) m2 f  C% a: x9 a; e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; {2 f( [" m; B3 Y6 U2 y1 Ovar heapMemParams = new HeapMem.Params();
1 x; Q5 J. n( F" @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" D7 U  S9 R8 C% {9 G) r8 Q3 S. [9 t* o
var Memory = xdc.useModule('xdc.runtime.Memory');
4 v! l( Q! g* c$ ]0 z0 j% \: c- ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" C  c" ~& R4 M0 B' W  S- X/ g/ K7 p& Q: t7 v7 d4 O
/* configure System module */
; c" k9 [3 V/ M( N1 gvar SysMin = xdc.useModule('xdc.runtime.SysMin');* i0 Q( _+ {1 w) A7 j
SysMin.bufSize = 0x1000;3 m, U, a! E/ f1 l5 N, w3 P; M
SysMin.flushAtExit = false;2 b4 U; [6 Q. {% g3 q9 C3 E

$ j1 v- {! l$ s7 lvar System = xdc.useModule('xdc.runtime.System');
7 x* ]' L# o7 r. E) uSystem.SupportProxy = SysMin;
  \5 j) J: ?4 z. G9 v& s8 L( y% w( p: S  X
/* configure SysBios to use the lower half of Timer 1 */) j( `( J$ j+ ?% ]6 R1 T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 f' p) I, e* H/ `# z4 l4 y4 F7 B, S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* \. |& K4 T( Z, v5 YTimer.timerSettings[1].master = true;
( J1 q2 d$ n3 {6 iTimer.defaultHalf = Timer.Half_LOWER;
" R4 g, S+ ?# E2 y. |3 |2 [Clock.timerId = 1;- j. w* _5 [- I* ?% e" n6 h- F
' V( {# y  M, W

, }- Q: L/ y3 Z) x9 u# W/*
& g5 I& S* y) O; J6 J *  ======== Miscellaneous Configuration ========
! k" e7 i. r, X2 }. R! F$ { */% a, M- v' t4 p5 v& n

+ b  d" Z4 l0 p- J2 W/* set default diags mask */) y& x& A% r# U9 e3 ?; J
var Diags = xdc.useModule('xdc.runtime.Diags');
4 q1 e$ N+ u' S* V5 mvar Defaults = xdc.useModule('xdc.runtime.Defaults');+ R. X5 y6 z6 I( x, j$ o, x6 P

+ T; A" M  X2 n0 q! o. WDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ N% u, _' `6 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 g; \: |. ]! K0 D' x4 F$ j- }  M2 K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 g) ]4 b' o6 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 A4 x5 S' P# e; D0 S+ b% Z  c& M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# i- @4 r$ ^% s1 Z. ~% ~. Q. {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ `% d3 ^; X2 C6 _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! G: y' \- O0 Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  i1 K) T8 W2 LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 r  d# S9 \: t; ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 H( ]& g& \' j6 Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, J* q; M( V0 e" J3 W& HDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) @7 B1 p6 F& j4 U& Z) F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" @2 R6 b# h' ^# ?Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 v2 N1 @( a( m% @$ B- e
, G( M' v: _6 K$ Q9 W* K/ c
/* override diags mask for selected modules */4 z# L7 F2 Z2 }4 t6 ~
xdc.useModule('xdc.runtime.Main');7 r" B5 D9 ~; O: Z  J2 G) ~8 r
Diags.setMaskMeta(4 v$ q& y/ \3 j( [; u+ [
    "xdc.runtime.Main",
& w9 u" K  C2 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  Q1 w$ R) X" d" _- A. k    Diags.RUNTIME_ON" n; W: {3 h: t/ E- E  a
);% w2 M0 ]" n; F0 U$ }

( B+ ?" @7 E& B. I% S' l% Ovar Registry = xdc.useModule('xdc.runtime.Registry');
& ^! w, z; f2 B' ^2 ?, tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: |  e% N% @) b3 p1 i
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 c  k. E) C  `! M9 lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. L6 t! ]( d, w) q% q3 c* t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; z* o0 L8 ~7 t# ~) G5 ?! q" J" C" \" d$ T) p: b3 s
/* create a logger instance */
% ^( W# t  ?4 T- c/ p  K- Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 N# o. z$ S% Q
var loggerBufP = new LoggerBuf.Params();- d! ]3 u) U) O# g/ P  C
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ K$ j+ P3 h7 t8 x4 {! z9 a, sloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ c; [4 D4 S4 b4 A7 M

$ I0 s% g! e8 P/ x% t7 X' K9 v3 ~var appLogger = LoggerBuf.create(loggerBufP);
. z" j; ?8 [5 p! I. Q$ L" p, bappLogger.instance.name = "AppLog_Core1";/ |6 }2 \. B9 N+ M1 I) k! j
Defaults.common$.logger = appLogger;
$ N2 ?# c9 g$ T5 `' wMemory.defaultHeapSize = 0x8192;    + k! T$ k7 I; b1 i, M0 X
Idle.idleFxns[0] = "&LEDStatus";
: d( |0 D2 c0 ^9 FCache.initSize.l2Size = Cache.L2Size_32K;
3 p! G, ?7 {+ N7 |- E7 ]- \( n6 E( h$ u
' b: ^# V' `( b8 |) f/ b+ k8 h
回复 支持 反对

使用道具 举报

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 */; T" u; _) F% s: Z6 b3 ?0 y0 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* M& H2 ], F" x$ D4 p+ Kvar heapMemParams = new HeapMem.Params();
+ _2 e1 h1 ]7 }6 S" {- K$ O1 ]heapMemParams.size = 0x4000;
/ o) M* y- D7 {% [1 U1 b
  m1 N% V4 {( j6 M% E. _* Avar Memory = xdc.useModule('xdc.runtime.Memory');
) Q; o+ Y" ]( Y) N- E, h2 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, p+ q; W$ n; V7 t, V
3 H* z( u3 i1 U' Z我大约calloc  每次共计大小为5K*16bits,# J( m0 T8 \2 ^; b# o8 @/ g
而默认配置才0x4000、需要改大。
) p( x$ G0 ?1 Y/ d9 n( Y! |$ l  Y# ~; L4 j) d, y- E- r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 b4 e& E, B' B9 d
Program.heap = 0;
1 x  {. q0 L* y3 H- G, mProgram.argSize = 100;  /* minimum size */0 Z4 h2 L3 z1 ^3 V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-4 06:19 , Processed in 0.042733 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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