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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: f% |" ~# A. T. V! h5 s' I
! Q1 u8 t3 L% J$ d1 F8 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 H  G) Z' h) [5 h: R1 [& |$ d9 v
( c' ?8 ^' W4 ?" T! F
其他程序段。。。。。% P$ [! d4 S6 `! F

. S; r. c% ~9 e; e% O8 L2 ]   free(x_d);
, d- T$ ^5 I" g! M- p4 Z- m$ ~& q0 }0 V/ J: O% T9 i
使用DSP侧单独调试功能,验证动态申请没有问题,' i4 ]9 e" k% D
- n) k- B3 K0 d. `2 \# g- e/ k; o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% D1 Y* v, r# ^- O$ Y4 n1 h

: x5 d" j1 ^9 V# L: M% ?) l. h: T5 j3 c2 |' ^2 F

# s' E0 a4 T$ L0 w: X! I' y
1 B; Z/ J4 ~7 }) W& I. [
% v/ ~% N  X9 j7 o9 b' E0 ]% u8 C2 E
5 ^& j  I$ |: `3 D- z' d* @' j/ i
6 `: X: s: Q, K" T1 C
' j1 j: T% ^$ i/ Y" v: `, }+ y* B* d3 u; s1 Y9 d0 s/ f
0 V9 G5 B" `8 |; @; R' N3 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- k: o; ]( [, z( b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, c& x* \2 }8 V9 z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' m+ C( l7 X/ @' n* u9 I1 ]
. s' ]  v7 C+ `- {- q
是不是需要在DSP.CFG中进行配置! [4 R' G8 w. I" c% k1 y
我现在的配置为
8 o) u% _+ H9 i# h7 j' L4 t" X  V$ G! u
8 `5 @6 a; E: j  O( s/*( m$ u1 H% g. h2 `+ v
*  ======== Operating System Configuration ========
1 e; T- ~8 z) e! j% t5 N */
7 M% o  T) q0 T
" m& d/ q: @# l% P/* no rts heap */6 G4 ]2 B1 C5 g
Program.heap = 0;
# v" v6 Q* W9 p+ OProgram.argSize = 100;  /* minimum size */
- J0 |# L9 y; c2 `4 [0 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ z# R  t+ ?/ f. S0 K3 x2 s) u) j8 C0 d2 J" C% l* V
/* create a default heap */
) x- I$ n5 v$ F# ~5 b4 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 m2 A! O( E, N7 v5 A+ h9 g5 p  Wvar heapMemParams = new HeapMem.Params();
6 i; K: r; t* n( L$ O1 V* MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: R  E. F. \' h; }" F
1 p; A. B! z/ }% h' ?
var Memory = xdc.useModule('xdc.runtime.Memory');
+ G; V$ I  p$ ~, S+ i5 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" l, w. I. L5 W8 f  Z- v" d
  D" m* ~; H0 T; D8 B7 V! l& B2 Z2 h6 e
/* configure System module */5 v5 J8 |8 \' A% N6 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 q7 w& U, Z7 t8 J4 H
SysMin.bufSize = 0x1000;
2 {: J* ?" l. B: pSysMin.flushAtExit = false;2 n! M2 A6 q" F* V/ v, U
' \* I9 f* L) N. \* w
var System = xdc.useModule('xdc.runtime.System');2 H8 U9 s1 ?) E  o/ f1 ~
System.SupportProxy = SysMin;! h1 h- l4 b- R) Y
, l- _5 Z9 t( y, x% t- D8 g1 u
/* configure SysBios to use the lower half of Timer 1 */5 C3 {! C/ i( d% E5 G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ _! B9 M/ z4 ]6 q. g+ p1 {# Y( wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ A4 e' q# P3 `2 s. q
Timer.timerSettings[1].master = true;7 B% i- Y- F4 s$ O( y0 |
Timer.defaultHalf = Timer.Half_LOWER;. }! P" N# x9 S9 l
Clock.timerId = 1;4 K3 i% H) C0 n# U

( l' I) _  b2 y4 W1 P. Y( j1 K( r0 Y- J; B# [1 h3 x" Z. Z- Z5 ^
/*! t/ U2 o, ?2 ^7 V
*  ======== Miscellaneous Configuration ========
2 Z. m) B8 F, f4 i) h */
: u& b2 H' c% o
+ Z  l4 @6 ?  B0 w  s/* set default diags mask */; z( P) L- `/ a. _( [
var Diags = xdc.useModule('xdc.runtime.Diags');" u9 h( N" l$ |/ G  N
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% n0 n3 ^; R$ X' d# E; v
' t3 S7 W: I; T$ r0 F! P5 z. hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ ~$ O5 B% T8 Y, y3 ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- t: z( B$ E( |9 r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# `# A  h) G0 c! x& p! p* X' @9 B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 M7 V/ G8 o7 k% ?6 f0 p4 YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) Q" Z# [- B6 u* R2 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 f- g0 g9 [& L5 f/ t9 }5 R: VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& t* k  q& {) b3 J7 ^! TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 z: R/ A. H5 l/ X6 O4 O8 ]
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( D! m7 c. E3 m: ?& EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) U# T  w3 N+ }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 Q/ @1 u: y  C& X! WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! r6 R( s4 r) ?  R" ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 S4 R! u* J. t; KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 `* A2 V( o. M* w9 O0 }% \. W2 @, b  r" R
/* override diags mask for selected modules */4 k$ S& [! P7 x
xdc.useModule('xdc.runtime.Main');# ?( Y. ?7 w- `' k/ l6 M# L7 W$ r  k: j
Diags.setMaskMeta(( I0 c) y$ l+ j
    "xdc.runtime.Main",9 H6 j9 T% U. D& k
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, Q9 G4 O9 k) i3 }7 C4 J8 k. ]' V
    Diags.RUNTIME_ON0 c8 Z4 u( a) [+ `3 I) O: g; n6 q
);
% x( J' O1 w+ j$ U4 }+ {, z
; t! W9 n, w7 P6 fvar Registry = xdc.useModule('xdc.runtime.Registry');+ ]: \$ Z% C' u+ I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' F8 t$ q; {7 s6 q5 D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# i2 g3 h4 @. T( ]2 ~$ q. m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 z4 u: P0 G8 `7 l- u% Y$ n/ [7 ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- `6 C; P+ U6 K9 |/ R" `2 Y2 Y8 M/ O% R. E0 h/ I% P8 V
/* create a logger instance */
) r( U6 S3 M0 _9 E  W) G) Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 |9 X) v0 w9 j* l8 G
var loggerBufP = new LoggerBuf.Params();: m: c+ d8 u! c. h5 B* X. x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 E8 g/ |* w  m, o' z, a; XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, R0 `* }& Y! Q0 G: ^3 d: L4 V, G# P5 p
var appLogger = LoggerBuf.create(loggerBufP);
& U, m1 l: v9 X0 U& NappLogger.instance.name = "AppLog_Core1";2 g# g6 A9 e# t* }5 Z; I6 o- O) |6 a' L
Defaults.common$.logger = appLogger;
& e9 V$ U( O, U2 K# Y+ H. Y/ J7 xMemory.defaultHeapSize = 0x8192;    / L7 U2 s8 p0 O5 T
Idle.idleFxns[0] = "&LEDStatus";- a$ @6 g' g) R( \, @" A4 M
Cache.initSize.l2Size = Cache.L2Size_32K;5 Z; H8 I  N! _* U- u; h
0 `* N" ?2 Q, e& S2 j9 S$ {- K
回复 支持 反对

使用道具 举报

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 */
6 |% C& N3 k& w, Z: P' Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 k- ]9 g% {( g8 M+ d  ?% ovar heapMemParams = new HeapMem.Params();) m3 p) K2 z* z6 N
heapMemParams.size = 0x4000;
* K  h8 W# l" ]  R. W$ n, ]2 ^7 z, b, d% @! w4 u* m
var Memory = xdc.useModule('xdc.runtime.Memory');
5 Z: {" t+ X8 }- u! D" {& V. V9 |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% a  G/ n8 ?% m' {' t, w7 R; e# F( L/ \
我大约calloc  每次共计大小为5K*16bits,
# r* _5 Z5 K. p9 m! l" Z而默认配置才0x4000、需要改大。
  J3 |5 Z! U; w4 T& P* S2 _& z! W- H3 D4 r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: c( `! H% l: I, ^" IProgram.heap = 0;
! @( W. _+ }3 }* K& [Program.argSize = 100;  /* minimum size */
2 |4 S9 u! H7 @' n# [+ Q1 ^. fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 12:11 , Processed in 0.042599 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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