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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( W* y, T5 h3 {5 p3 t
3 _$ z3 _; f& t% ~6 l& [! H) {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 o( g% F3 o6 j% i4 H2 N1 v

3 _- u% Y; c$ D# y  ~其他程序段。。。。。- b" f9 m: V! B% u9 ~+ q; Z- H
4 E, L2 l% ?/ d+ m  _  s* m) E3 M' V, d
   free(x_d);
' L# P# B$ B" c: t3 q3 [. ?/ E' @) x6 P) `: K3 o, R
使用DSP侧单独调试功能,验证动态申请没有问题,- E7 R; y+ L2 O0 o2 p5 s9 z
% C7 p$ D# H( x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( P* V7 ?# U9 b; ^- w
/ Z$ A( Y5 X; }

( Z2 u- f$ G8 ]. n0 v- q+ H. V
9 x! Q' K. Y0 f: Y3 K; |5 P, m* W) Z$ g8 |+ e( K
/ a5 Q) ]- N* N& G, P) E' @
* N; y# T) @( B( l, C

# G8 w- g: N* ^3 u
/ e( E" a$ S- D% y- q; H
  L2 f' d! n6 X+ `; d5 ]% P  t7 Q% J; n2 m! j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. c: m6 Q% P! m$ @7 Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ \. H$ F# z5 o6 H4 c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 g3 E2 K6 P- ], W. M6 i

1 ^- _7 r3 u* L是不是需要在DSP.CFG中进行配置
) J% h( ]& p* @6 }( u6 ?/ }$ v我现在的配置为
$ ~( ~7 a3 O4 B# b! b' T6 g/ q4 X7 w8 `" I8 v) {" f
/*. f0 P" d+ h: ?
*  ======== Operating System Configuration ========  w/ h& ]" a& @5 L0 t* w; b" _
*/$ g" ^6 E' u( |' u7 L$ Q" {
* F" ~. K' J7 Y$ q! t, R" u# D( Z
/* no rts heap */
* H# z3 y+ u2 S9 {2 {9 @. R( BProgram.heap = 0;. @  r* D; N: A
Program.argSize = 100;  /* minimum size */" y  M! G4 f  a; E. `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) M  [# Y) R/ i
3 {  j4 H$ \) i) a& N6 m
/* create a default heap */
4 k" z) g6 S+ x. P% A6 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 T+ M* ]1 M" I7 W' w8 k4 }
var heapMemParams = new HeapMem.Params();
3 g/ @9 e3 y  M0 d; S/ JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. r7 F8 k3 Z' Q: C+ _4 `- ?7 V( j6 d$ J/ }  Q4 r# G( S
var Memory = xdc.useModule('xdc.runtime.Memory');# D- h2 P7 Y- t5 T8 R: l6 d, y9 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 w1 h8 w6 a. S" [0 m8 t
; j# j9 x1 j6 U
/* configure System module */; ^! m% i( {% A5 x
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ t/ k9 y, D7 z- `SysMin.bufSize = 0x1000;
, e/ d  q' P$ D6 J6 sSysMin.flushAtExit = false;( R5 y& e( T; ~) ]

' M6 a& |1 a3 ^; ^: V! ]/ Lvar System = xdc.useModule('xdc.runtime.System');
4 x( s2 K* r% C2 N, ?" PSystem.SupportProxy = SysMin;! y8 E: W( {$ U# M7 e- ^

# D# L) H+ B5 }, M4 c/* configure SysBios to use the lower half of Timer 1 */
# b5 A  ^0 }4 R& s- Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( M' E. ]" q$ V) q1 `1 F0 d$ @  y' b. u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 c- w( O8 a2 B( o  \
Timer.timerSettings[1].master = true;; R0 X" T0 W7 J7 f! B
Timer.defaultHalf = Timer.Half_LOWER;
2 {8 A" j" t5 x- u; T1 I* x0 i3 NClock.timerId = 1;
& n# ^' ]$ s) p6 X) D! o. ?: a8 I0 U" J1 C7 r% _# X6 T
, G% V5 f( _; k. `, M2 i9 _
/*, `; A! I9 N' g1 p! V
*  ======== Miscellaneous Configuration ========
! O/ q0 u. G7 I7 p1 `# N */
" D7 ^; L* t4 u! Z1 `1 ^! J5 \
" Q. F3 r2 w" A! z/* set default diags mask */& f5 ]7 I+ B3 G- X% s
var Diags = xdc.useModule('xdc.runtime.Diags');8 e+ ^' n) _* z$ @$ Q
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 q" l9 P: U% `0 P* j$ u' a" J& D- O2 Q( D8 ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 a& @9 ]+ b- g1 u$ E) i( J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 g4 t/ H& v, y: mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 ?" F, K& M+ `# YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ b/ D* V. B- n/ v7 n3 i0 S
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- R$ a2 |4 @" ~6 n
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 B! \% a* U0 c/ K2 p, E# o9 A7 _0 `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( ]8 g- |/ V) o& l/ E2 J& W' Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! U. \" Y# l7 g5 Y4 Z- XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* y; Y. i% Q! J4 ]- i0 p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! _4 ^) t( M+ g( v9 D, M5 S9 sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& M0 ?( O) G5 e$ w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ f* M& @# V/ T! f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: Z" U$ c6 Y" A5 U" K: Y; I* O8 Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% f) S4 `/ Z- {8 _
0 H* j* Q8 M3 S% H  ~# x3 Z
/* override diags mask for selected modules */7 q* _* L( _+ D$ F# S" |8 a
xdc.useModule('xdc.runtime.Main');; M( _5 _0 k* u/ s. }% a2 h
Diags.setMaskMeta(
' f3 D5 P, S2 h5 s: F8 o+ x    "xdc.runtime.Main",
) a7 c" W2 [1 A    Diags.ENTRY | Diags.EXIT | Diags.INFO,) L4 d% ~, I+ s
    Diags.RUNTIME_ON: x) k/ g/ ^- X$ {5 T4 ^' _
);
. L% b" g1 ?' w
" W( D' N/ G7 Q0 ^* B, H  G* mvar Registry = xdc.useModule('xdc.runtime.Registry');
* H% i# h1 T# K, V6 E$ J7 zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 _  m; o  I0 d# i- }, _7 MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* J! |- e( h0 L1 |3 D/ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' W9 F7 j8 }" N7 S6 f' _* A  mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( F" _; M8 S4 |8 }* Z" G: ^/ s3 i9 X. l5 ~, ~/ O
/* create a logger instance */4 l: Y# ]: a2 J9 s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, U; t- _) K2 A4 d$ H) B! Lvar loggerBufP = new LoggerBuf.Params();; V5 u8 |; ?% G& \5 @0 o6 a6 }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 h+ y) f3 u6 G; S. t# A; \% XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 b7 v( Y# w6 p
$ C, d) z" S" P1 @var appLogger = LoggerBuf.create(loggerBufP);
$ o7 f8 N0 v' V9 |4 {8 k" XappLogger.instance.name = "AppLog_Core1";' g7 v; i( u& m- @
Defaults.common$.logger = appLogger;
$ _. ~8 ^) N! s$ r2 f* r% t0 XMemory.defaultHeapSize = 0x8192;   
7 B' p' q: Z! e0 Y& WIdle.idleFxns[0] = "&LEDStatus";" t5 q- R/ n4 d0 e: S' t: u
Cache.initSize.l2Size = Cache.L2Size_32K;" u5 X& V* U& }. q4 X1 X1 V! _9 {
7 a' d9 S5 }+ f% {( c& y- I: ?  j  F
回复 支持 反对

使用道具 举报

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 */
! ~5 y3 W, P! ~; e; T" avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 h. c: ]# j  }: Xvar heapMemParams = new HeapMem.Params();& f2 u3 W* ]- c
heapMemParams.size = 0x4000;3 O( i9 o1 e/ ]0 w8 w9 R/ F9 M
* [$ `4 e( C. U4 Q, |- X/ {  b0 @: ?
var Memory = xdc.useModule('xdc.runtime.Memory');7 x$ N1 S+ }# t# Q1 s$ ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 X! u" M( S$ Q$ z
9 {( \% @8 E/ O3 n+ [
我大约calloc  每次共计大小为5K*16bits,
1 a6 K1 p2 |3 v8 i/ k而默认配置才0x4000、需要改大。
7 V( f* z5 }% {- V" ^
# O; J. }$ W7 m+ Y3 }2 X5 a2 C6 e( f, h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ K' \7 ]% U' I7 ?! tProgram.heap = 0;
: N  ]: ]  ]) j7 b" Z' b# G3 s' jProgram.argSize = 100;  /* minimum size */4 C( W& k9 @( a" B# h5 c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 10:37 , Processed in 0.041487 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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