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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) O9 n* e) t6 m/ [" Q9 p0 B1 T4 P$ o" B' ?8 T- y4 x' k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 E* I3 m: ]  `6 z$ G+ Y7 Y, Z
! L% X& _% y: n# k
其他程序段。。。。。
) ?# J- ~( g9 E8 u! M) o' W0 T 1 V; Q" ^5 [( K: T1 n' I4 q
   free(x_d);
/ W; D8 a$ V. W# P- v% h  `' J% s- n* @3 ~
使用DSP侧单独调试功能,验证动态申请没有问题,$ z9 Z- L0 l6 _  s# }
: y3 ^0 b: n! f8 j* }( F% m1 |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 i4 U6 D& ]2 S; V& P
4 R/ y  L% m4 a9 t+ g3 F
$ S3 Y# O( Z+ |4 e* Y# M# n+ @) [

5 N8 b5 y4 U9 g! j# O
. C+ L8 x& L4 M9 f" W; X% |9 O0 l- |# Z% @, V1 @

+ Q' }& w* E, A) m6 k' [- E, m4 V

* Z1 C# k: m. G, i3 c1 m9 r6 C% V) R- ]
, d  t) x  X6 w" e* R# T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ ^% c; S3 d  H/ Q0 f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; R" ^' u- s: M3 r. Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 q( c$ L: Z% S; g
) I- a& D4 [* C1 M# E1 @5 x' g2 ~
是不是需要在DSP.CFG中进行配置
$ ?8 D8 f9 F9 O* C( K我现在的配置为
- P9 `. s! [0 |/ }9 h5 I# H! t5 a% b# ^- W9 Q
/*/ _$ p8 h$ _4 H
*  ======== Operating System Configuration ========; k& U3 c1 k4 E5 N1 U
*// i3 e% h+ A% [9 A( G
8 y; o- ~, x# w) y" ]
/* no rts heap */' Y4 u& _* Z8 \9 K1 O- @
Program.heap = 0;* T+ r3 ~; i  z8 \
Program.argSize = 100;  /* minimum size */
4 X3 y' D& ^  [# m+ e. rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* \' Q% n+ w( O0 t% V, A

8 R0 `" i* e. E# Q( e, K/ d/* create a default heap */
8 U  [& \: l" d, b  ?7 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# }. n) ?% H) \  K" C
var heapMemParams = new HeapMem.Params();
0 @7 R$ D. f, e* p5 G" w  t9 @* m6 x) LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" W1 @5 @. g& X+ @: \
- D& g; m$ y  J) `
var Memory = xdc.useModule('xdc.runtime.Memory');& m( k4 w% }: u1 ^' Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ {: @( V! Q0 W+ C# [* ]
$ d9 @* V6 f  \+ [7 G/* configure System module */
. ^7 I1 K6 F% Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');' ?* f  ?1 q- b9 Y7 I# o) h; ^
SysMin.bufSize = 0x1000;
+ k, n4 W7 I+ `. m2 o- x$ b! hSysMin.flushAtExit = false;
- F$ o# h' Y& K, b. c  w0 g/ y4 ]& J
var System = xdc.useModule('xdc.runtime.System');
& b5 P  G& ?+ E2 O5 ]; B, \% f: |System.SupportProxy = SysMin;
4 S2 O: q& R1 @' e% {: E7 \: [. ~* p. _6 Z& {0 l1 u! e
/* configure SysBios to use the lower half of Timer 1 */
- M% }' L  C  ~0 Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ T, c5 k8 K3 t( W4 u; Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  r9 C* v9 p3 Y# i# C
Timer.timerSettings[1].master = true;4 F9 W# {6 s) S0 c
Timer.defaultHalf = Timer.Half_LOWER;. Y0 Y) K, S1 M( Z& }3 u3 K) v3 i
Clock.timerId = 1;
( n- ^# r% Y: \( q1 z) N* P' v" v7 S- H
2 o! c# }; d  n: Q' z' M
) N& s& a/ n, r, T" b2 d: }/*/ I! i6 Y' I3 q$ q; H
*  ======== Miscellaneous Configuration ========
3 n0 r/ I6 f- X7 A1 ?; S+ ~ */
) X  w( B  ]3 I& t% h* ?$ w, N' g' O
/* set default diags mask */
# H' A/ D! T- ^) |1 O3 \, Ovar Diags = xdc.useModule('xdc.runtime.Diags');; b, ^) i. V4 j
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 R7 z! |1 M  L8 g- l: }7 r3 x

# H- d1 ?( i  z$ EDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 \  H0 {8 H1 n/ zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! D( M& D. N# _8 L0 iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 ?0 v! a' h9 a* h8 ]Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( ~2 c, m5 c/ q9 U6 D! W4 t: n. E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' {: |: Z$ j$ n6 T* D+ A+ y' i, [( v3 lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 k! e+ y! L3 r( g# d" J+ ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( L1 H/ s0 G& G( ^) b: wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: H% u9 O6 N! {# O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 A* c, o8 ^. U( D7 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! Y3 p/ d0 O1 v# f/ w  H2 tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* ]- D  `3 K9 \/ O' P6 bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( w" H3 @+ s( u
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' W) G3 r; C3 L0 U" e( e3 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) c5 {- M. m; A* V" p- T# o
5 U* {& B7 ?& o% X( u
/* override diags mask for selected modules */
! T: D/ s( ?2 _xdc.useModule('xdc.runtime.Main');0 [! p) i; F) g9 j% b' S; l% N
Diags.setMaskMeta(
5 q" n* a; _, h, d7 d% c    "xdc.runtime.Main",. A- j9 Q/ @; P* T3 o2 _0 |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 p' k$ p$ B, z& Z  I! L  _3 Z# f
    Diags.RUNTIME_ON
$ y' p& `* q/ K# w( h);7 Q9 o& I# M5 j- a2 M) I% E4 [) d1 `
( @& T% B; E9 c( N3 A
var Registry = xdc.useModule('xdc.runtime.Registry');: `+ J8 U& y( X. t$ Q' @6 P: ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 _: m9 q* Y* K2 J! t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 j. K. a" G: w3 S/ d7 O0 t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 N/ V! V! G+ ~& o' x& q; R$ Q7 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# Q7 l% @, R0 p$ D+ U

4 b) O  B1 c- f- B2 I- H4 W/* create a logger instance */* L. |' `# ]9 C& f7 j) c# P
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; d* ]5 Y5 E* nvar loggerBufP = new LoggerBuf.Params();
. W6 M! W8 e4 G- ]! ]$ v3 u- YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, `$ Z: N  x8 x: BloggerBufP.bufType = LoggerBuf.BufType_FIXED;& n" P# N  ~6 r; b. i

# @9 i& o4 J4 m( ~) _% Mvar appLogger = LoggerBuf.create(loggerBufP);
: Y+ w6 |7 g, L1 B* @0 d6 iappLogger.instance.name = "AppLog_Core1";$ Y8 j( V6 C3 h: q& w
Defaults.common$.logger = appLogger;
' r9 y8 c+ p: B' X# vMemory.defaultHeapSize = 0x8192;    + W: L  e7 d- Z, M
Idle.idleFxns[0] = "&LEDStatus";* C' ]' q" ]; Q/ U
Cache.initSize.l2Size = Cache.L2Size_32K;/ a+ D$ y3 S! ?# P5 k+ q% V$ s

# ?: J6 c$ P( K% z2 r$ _0 {# A
回复 支持 反对

使用道具 举报

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 */
  e! p1 ~; q) R/ g" h; K- S% Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 k6 g7 p; V/ z7 x+ I3 n& n
var heapMemParams = new HeapMem.Params();
' ~0 C5 E5 I7 F  p( v' IheapMemParams.size = 0x4000;
+ s3 p7 L4 D; A( H. t- l* Q0 O3 `: i' |/ b
var Memory = xdc.useModule('xdc.runtime.Memory');; c+ J, Y' a+ l# L3 D0 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" X4 J# a+ h7 q5 i! G, K
2 Q- S: z% T8 `
我大约calloc  每次共计大小为5K*16bits,8 O& \( `, I, ~0 Q
而默认配置才0x4000、需要改大。/ c. q# M/ N2 {; w
' P2 M4 m% s7 y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. i( t/ h, c  G5 C% Z$ ?) E& ^Program.heap = 0;2 u2 r. V% E. z4 S+ O& H
Program.argSize = 100;  /* minimum size */
& W/ Z( j8 [( e) h* _2 m. D& qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 19:00 , Processed in 0.042709 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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