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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: {; R( T. H' ~
# S& |$ a, m) D& Y6 y! x* g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 z8 H  Y7 U) h1 m; u- p7 T4 V9 a: E# F. @& k9 H
其他程序段。。。。。% [# t8 u7 v9 [9 ]4 k+ M
* d& B/ [& p9 e) l
   free(x_d);# V( _3 W! l# ~8 N& {

. e/ ^( M+ ^' J使用DSP侧单独调试功能,验证动态申请没有问题,
2 N! h$ z' j+ b$ x# ]3 y2 M5 `+ n9 @7 i: `% n/ H+ ~8 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ l3 C5 C8 G8 f$ n$ g( U! V, l' u
7 Z  B6 Z- |# J6 Y/ r8 p% P  D
' M! d' C3 }/ i) p" b

9 P$ o. H: G# `8 x
- w) b0 O7 p( a$ s" g& H( C
& b) t0 H' w" z6 U7 V4 A+ L, m
7 a% Y8 a! p& ?# q. {( m
/ q( R# s' S1 ^; C3 X* F0 H3 f: j: O! s9 S9 E$ B' ^$ k
, D- y  G  {9 C* C
0 M1 X8 D2 D* r5 H0 U# _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; X, P3 ]5 \1 ]- T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, H2 o  T% Z* m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' ^7 h9 d  j" n# g' ]" I# i

5 u+ u* E: d# n9 K! i是不是需要在DSP.CFG中进行配置
8 i. t' x# x$ w9 M0 W. ~我现在的配置为
, q; d4 [' W" a2 F) k2 ^
1 E  s* q/ ^0 G2 e& P$ v4 R' t0 M" a& |/*4 Y; f: S; H, G* e0 n3 {
*  ======== Operating System Configuration ========3 F; M3 E+ k) j/ Z
*/# `8 @6 r* M; K! B; @9 f

" X! Y: N4 ?$ S$ n/* no rts heap */6 w- Y+ M7 i) O, Q* l1 N
Program.heap = 0;7 d& B* d8 o1 Q5 L
Program.argSize = 100;  /* minimum size */- C5 G! B, T; r- r' w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  r" S; f; R4 H4 o

, z* K3 R  I- w" {" v6 k6 W( o/ O/* create a default heap */7 E0 H- g% H- T! Q( H$ n+ e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# t& x# e, w3 H# k$ a5 _var heapMemParams = new HeapMem.Params();
- _( X# O) P9 v$ e6 B5 W5 x. xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( g$ A3 Z. }/ ]! v

1 r/ X" ]/ E3 v; h9 G; d9 A
var Memory = xdc.useModule('xdc.runtime.Memory');
/ B  L+ L) p8 p0 p8 Q+ [7 Y$ RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. G' d. S! S* o
4 u/ u9 U5 i$ Y2 b; {6 f- z% a" Q
/* configure System module */
. z% k) f  U! O& ~var SysMin = xdc.useModule('xdc.runtime.SysMin');* w) s7 L  k3 h( W7 n
SysMin.bufSize = 0x1000;
9 B2 j+ o( [5 j% j& M9 L5 zSysMin.flushAtExit = false;
! t6 K- g4 _0 Q
2 R& E% E* z+ w7 Nvar System = xdc.useModule('xdc.runtime.System');
' L  o0 e$ w2 v, ?1 W$ gSystem.SupportProxy = SysMin;, D( ]$ Y" _+ b" n% l  I
  y5 }* d# o4 j6 E9 h
/* configure SysBios to use the lower half of Timer 1 */; v; [: ]! ]; v1 P- g+ i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 \  [3 d( D  Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! W4 r$ a4 k5 e# p" o1 K0 ]+ U7 c
Timer.timerSettings[1].master = true;3 p# ~: O% x- y/ o
Timer.defaultHalf = Timer.Half_LOWER;, Z# H3 N& ]/ L( k
Clock.timerId = 1;' B; x8 `7 S* K. e

' c+ S2 b6 I. W9 O& K( E* R$ T% |4 u* U- p
( ]9 H. w. H5 v0 C/*8 Z0 R8 q  k8 ?
*  ======== Miscellaneous Configuration ========# G9 d3 J1 k' j5 J7 I; O
*/6 L5 f/ d5 I. u8 R& }! Z
" d# q- E4 @- k, x, `# t( Z( x" q5 g( i
/* set default diags mask */
- X. {* w. D* ^7 o! ?var Diags = xdc.useModule('xdc.runtime.Diags');4 q- D. w  c. a9 T4 U" _% {
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 G& @! Y4 S# a/ }

) s; M3 m: D9 z5 i3 h& @. }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" s: }( S% J& E9 M+ j5 U# w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# L' z1 S# N, A9 f5 q) H2 |. EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 |% j  G* Q8 n! w+ H% j, j4 m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( }$ a8 f& ?, e1 V: k4 Q! J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 K$ [$ i* ~4 ]/ {$ |8 V5 }3 S! ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- h. Z) n! S; l. E1 T# SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 l0 P2 z* p: i' d( @7 }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 ^) K" T$ S1 M! o( q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) ]' u" x' z9 F  u0 o1 uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) a! S* }' n1 ~3 D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# S. g  N1 }' ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 j) g3 H" H9 N8 F8 Y3 DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# F5 F7 d+ {( i+ ~& X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) `  {; j# ]) w" x  C$ h* T
, L/ Z& u7 P! d7 n( J- e" _" h
/* override diags mask for selected modules */1 a9 @" `4 ~4 A, v4 l: c
xdc.useModule('xdc.runtime.Main');5 n+ i  }, r* c; T* Z: q$ o8 K
Diags.setMaskMeta(- Z; b' j6 f# R9 F' o
    "xdc.runtime.Main",4 b( R' G8 q* c9 k9 W) r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! W* k* @. y6 `; e% A    Diags.RUNTIME_ON3 U. D1 F7 f4 G& I$ w- G1 o
);( N8 |" C" x. i- J6 C2 w! P+ V
# @7 B% t& K9 H
var Registry = xdc.useModule('xdc.runtime.Registry');
" Y; M  c5 x( H7 p2 MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 g0 C; L% j* \! W( {9 i) ]9 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 x, W, ?8 N! v; c* z* u1 X7 I: RRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- |7 B8 _/ P' M$ U, @: r3 m+ }# l; @2 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 ?. \# L6 _; d; j. U' I# L

  U! t* o' I: O+ f, ]/* create a logger instance */
3 q  @/ ]. t% H- u$ M5 Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ P8 m8 Z" \  m! B5 x# C6 w  P2 K1 i
var loggerBufP = new LoggerBuf.Params();; b$ r" [- F# u
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" g$ O- ^2 |4 q& P/ G% e4 R1 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' n! \$ x: a, ~3 z6 G5 w; d& k. [$ f" k+ t1 v, k: D' n+ \9 o$ l
var appLogger = LoggerBuf.create(loggerBufP);
+ h' V4 p# U* A5 K. D' o5 dappLogger.instance.name = "AppLog_Core1";+ x' T; A7 c' A
Defaults.common$.logger = appLogger;
! k" q4 h7 n$ u% TMemory.defaultHeapSize = 0x8192;    5 O" q& C( M+ B. q
Idle.idleFxns[0] = "&LEDStatus";
& \" c8 d3 U% Q! PCache.initSize.l2Size = Cache.L2Size_32K;+ c; X! J! @5 N0 x! T3 y+ N) n: s

0 ^7 B; \1 s& i8 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 */2 X0 `% F7 U2 Z* G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# B0 e( y' |/ M- O! A& u
var heapMemParams = new HeapMem.Params();
6 k: j' |. B4 o1 w0 pheapMemParams.size = 0x4000;
# [. X7 @4 g0 {8 D- R- U- p0 ?" u' o
) z6 H7 o7 m& c% u! m9 a4 Svar Memory = xdc.useModule('xdc.runtime.Memory');% Q# e7 G  T# n8 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" c5 }1 G9 h3 ?
& U% `8 d$ _# _# X6 T
我大约calloc  每次共计大小为5K*16bits,
. ?- g! F) b* h而默认配置才0x4000、需要改大。
1 t2 b% r) A; u% m% r* }+ o5 M/ q, c, |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& r$ x& R/ V/ l/ S. m
Program.heap = 0;: z0 |- [& ^/ J2 D8 _" ~! w
Program.argSize = 100;  /* minimum size */
4 g3 g5 Z3 W4 A6 Z; gProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-13 07:56 , Processed in 0.042542 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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