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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 O  H( ]( T0 F, u% r* @9 c, k
0 Q% h1 Q/ r& m9 y6 R4 t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' W; J; F: n, S/ z/ R1 }& C# m9 V6 \# |8 ]* t( B; W! Q
其他程序段。。。。。
+ b7 p- [) w8 @) u: i% d
6 |0 U+ a. i/ M3 |/ a2 @/ N1 @1 n5 z   free(x_d);. o" G+ ^* S- A" h' c, g
7 A: m& y- Q2 b' t/ Y0 U
使用DSP侧单独调试功能,验证动态申请没有问题,
4 {' K6 k1 Y; P% r/ h
8 `/ A% ~/ U& Y4 x  t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ V7 m# E  |& u
# ~! ?% v5 E* z3 U& e# y
3 T6 f- o& D# y$ {) A0 K1 ^. G
% {, X# f4 a, g- v

3 \0 t& G* Q9 L+ H  m1 I, O! D% [9 a' d7 v0 f/ q8 \( _% ?2 c  A
% ^2 ~1 B0 }* u1 G1 M  D
+ j" O& B; y9 T. s) H4 s

0 {! H: X3 ~& [' b# i* O1 G8 x! Q# d: g9 O9 o) E
) b' c* A8 o. V. F9 O$ b5 C, t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 M3 n" o7 l) ?- r) C* S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 v, P3 U6 h8 U! j1 Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 Z2 W* O. ]; Q- C

' ?5 P3 x. S. U) x. _/ W是不是需要在DSP.CFG中进行配置
8 z5 r" h) X; d, v4 ?7 @我现在的配置为' R$ c" q6 d0 M4 U+ ?
& W, ]/ q& G  V4 D# ]6 C0 _  H
/*) a+ Z$ {  n6 b9 J
*  ======== Operating System Configuration ========7 u& G3 D/ z0 F$ J) }; C8 K- g
*/" \$ a* w( |! B) [

. E! _5 l; u- `. `7 w$ C# `2 G/* no rts heap */, X+ L% M! X" R% a* p% x
Program.heap = 0;6 F# P3 S; [) G9 X- D
Program.argSize = 100;  /* minimum size *// y" x# q0 m* B& [& b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 l4 h1 V% s2 O  ?

8 W5 r. ^) v9 M/* create a default heap */
! J8 @, x/ w" u- N& e7 e) Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) T% k1 U7 o" r+ V' P9 o0 ~
var heapMemParams = new HeapMem.Params();7 V: F/ y( d5 j* L
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 ?9 o3 `* F( l3 \# T
! U% @% o, D4 M* A9 _- d
var Memory = xdc.useModule('xdc.runtime.Memory');
4 _: ?7 B/ l* H6 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) N- @; |. p/ g- r& n% |
4 c' j4 K! e  Y) m9 p, z/* configure System module */7 C( X' t' h$ s( Q9 I
var SysMin = xdc.useModule('xdc.runtime.SysMin');& Y6 T1 l" U7 k
SysMin.bufSize = 0x1000;" f% r/ M7 ~! ^2 S$ Q* Z6 z5 \5 D
SysMin.flushAtExit = false;
$ s6 }" I9 `  J& A* l; ?: y- G/ y6 C# M) w0 c3 P5 s7 U4 U( e
var System = xdc.useModule('xdc.runtime.System');
# k, ~6 i4 s+ F* I) a8 zSystem.SupportProxy = SysMin;
$ B  s) {1 V4 |/ b* r) Y* m9 ~  d. D$ t+ l" U  j" p# a0 y" e# N
/* configure SysBios to use the lower half of Timer 1 */
# N1 d7 a5 ^+ L+ k  z5 _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 ?- A8 ?9 e8 n+ J0 p. qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 m0 P' Z" Z9 G2 Z; p, [  kTimer.timerSettings[1].master = true;
7 t  s2 k  W1 I' \5 B1 v5 T4 B# }5 aTimer.defaultHalf = Timer.Half_LOWER;
% y" [3 [6 w: ?# W+ x7 BClock.timerId = 1;% s; ^) _% o6 }

0 o% f6 H( P; U# E5 c. ^* h) p9 e# B! l
/*9 [* m. V$ c7 b2 R
*  ======== Miscellaneous Configuration ========
. d( \, L- M: g7 U! F- @ */" S4 L- v/ s' t, c* K  d, c

% B, D. H+ |* i" ~& g4 X/* set default diags mask */8 s1 Y4 l6 o8 W& B$ f) ?$ W
var Diags = xdc.useModule('xdc.runtime.Diags');- O4 h  A+ q9 t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; D8 r% Y( e1 T7 \$ j: b: T9 _) p4 l; G0 L3 n9 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 k/ D6 V( j1 u% R( o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 T  E% \5 ]  X3 s1 J! xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. Q( @( F" H2 b$ F  V  a4 p& l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 b" f8 p+ E3 F; l8 @) p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 n- ?! y+ \$ |2 N9 ?" S4 F% M. v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, B% q* r2 u8 U" z3 C
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" t% Z# a$ z4 f6 _" qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 V6 r: n) _7 R( w8 y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 f5 X4 `9 T, G& ^$ C  W" [/ MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& @/ x! ^1 x# k6 M5 x2 T
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) u1 S. ?! }; B- L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 U) ~* ^# t5 {  p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 c* j0 ~  [% y7 B3 RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, r# G% d, p6 h, C
4 o+ A* Q& m0 Y$ h/* override diags mask for selected modules */. G: j- G  f8 s  m9 q
xdc.useModule('xdc.runtime.Main');
  H+ k) k0 Q1 }/ m* IDiags.setMaskMeta(, s* ^) r. \3 x+ F
    "xdc.runtime.Main",) N, v6 l1 [) U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# U+ A4 v, }* S. B, h+ g
    Diags.RUNTIME_ON9 D1 S/ T# ^" y) E- x5 Y
);5 K6 G: d& {) J7 [8 t  j( v$ i

( t1 p5 r, E( l, g$ k6 C- rvar Registry = xdc.useModule('xdc.runtime.Registry');
. [- I  k+ f! ?7 Y8 R8 D7 h) `, K. n4 dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; b! R; T0 [: }8 N% V7 l, |- w2 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 U3 `5 O, T, }* Q% mRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  B1 v  A; i  v) S0 ~/ J$ V% v, g. }' a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 @* o5 |5 {, }& ~
) o. f4 X9 n# u8 [/* create a logger instance */* c' t( `1 a. v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 X: U0 b; ]  |* q# jvar loggerBufP = new LoggerBuf.Params();
4 i. I6 v* i% ~3 ?# vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 w3 T( t* O& c# m) RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
: e$ N  u) ^- u8 |- l  r( I
( V; @  L% h/ x0 P  s# Ivar appLogger = LoggerBuf.create(loggerBufP);) \) k7 d3 W, G- U
appLogger.instance.name = "AppLog_Core1";
# R1 Q0 o0 Y. _Defaults.common$.logger = appLogger;" m- p3 b+ P+ T/ ^9 R
Memory.defaultHeapSize = 0x8192;   
/ ]) n5 K0 H2 @  SIdle.idleFxns[0] = "&LEDStatus";, r4 I' v& f% G7 b* o5 s
Cache.initSize.l2Size = Cache.L2Size_32K;
& g$ @& W. c  B
  I- ?. z( Y4 A2 {' K7 [* [
回复 支持 反对

使用道具 举报

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 */' k( _8 @  @% \8 V1 j/ p  r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% h; _! Z: B# F) A. u& _3 G' }var heapMemParams = new HeapMem.Params();6 e; D5 u8 U) Z% C/ d) F
heapMemParams.size = 0x4000;; v, H& E) p4 q& @" X4 U2 ]
" G2 Z; E! E3 y6 }% r5 g, _
var Memory = xdc.useModule('xdc.runtime.Memory');8 l1 u& g/ u+ g& h1 U. j0 Q5 l1 ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% @( N0 F4 _6 |* t( D; X" d9 S
# n0 S$ M$ u' \, U" i
我大约calloc  每次共计大小为5K*16bits,
2 |. [' S1 ~2 ^  k$ q而默认配置才0x4000、需要改大。
; W% M, D+ A% D5 n$ D9 f! K6 C3 a, p+ [: |9 W. y1 E+ g! k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 ]8 F. }; y  v4 T( o: H* H; k
Program.heap = 0;/ P/ Z5 F0 p* ]1 ^' z, i
Program.argSize = 100;  /* minimum size */( ?. K  D; e" v4 Y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 09:49 , Processed in 0.040001 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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