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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. _4 S; Z* B* z6 y7 \
* w3 {  b) i6 @; x/ v7 \2 h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 c2 C7 r8 m# @3 y- y

8 c& V/ a% m/ x% P/ u7 N2 v其他程序段。。。。。
! M  {0 b% d2 R4 G0 t& M7 l6 [/ w. K , _9 _( D; v0 p$ Y5 F+ b
   free(x_d);: J- a5 O' Q, B/ M5 d7 n* O! N

# O# I1 M% ^! b  x$ e  Z! p使用DSP侧单独调试功能,验证动态申请没有问题,: }  U4 B9 y0 |: C! H
% b5 N4 }0 X* s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; ], |/ t/ S, v/ s3 p- X  B- v

& D' W' E+ V' X- R1 d- e3 w
6 B* U, U7 U& R) |8 n9 R+ U) m& G4 a! o. V: y

) K, l& A7 {$ \7 ], H
( X! O6 i- g% }1 g
+ I' |/ V5 \& a" g$ ?! S
  R9 u% r8 ~  R0 L5 L  W" [' A4 U( ^5 K& ]

, T  P2 e. `& g# _, Z
7 n; R  \$ u, H* J9 F+ ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) @' C. r1 {8 Z3 C! Z. x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) b3 y( `# n1 Q# k( R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ x- e- E* E* t" X
) E: n# w8 V( ~) g( `
是不是需要在DSP.CFG中进行配置
" [/ T, i; o. P. G我现在的配置为- h1 u% @9 e. a* j: {3 `
# s2 r4 \* Y4 Y5 W1 K
/*5 A9 X  f- H$ _; z
*  ======== Operating System Configuration ========* |3 s- H1 d8 I/ w4 M/ G' R
*/
& y, z& n+ _, R  J
# _) w6 X6 y. e2 `/* no rts heap */, E" q3 h# e# W4 D0 ]1 z+ u  |- p
Program.heap = 0;1 J: M; v5 H, h+ n' _. {
Program.argSize = 100;  /* minimum size */
/ [, ?9 J- ~8 c: y* ~" d* A0 P# vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 V' g4 g/ ]# f6 K. d

) c7 n. J1 a. U# m6 T/* create a default heap */
! \6 e; y, s( u( I: Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" Q5 H' q& e% h' dvar heapMemParams = new HeapMem.Params();
$ C- G, I% }4 f  O8 CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 N/ J. ]! D2 h' n; Q/ X0 E5 L& G$ ^( k2 t8 v7 t/ H
var Memory = xdc.useModule('xdc.runtime.Memory');
5 R5 A, `) @) T' u4 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' K$ N7 P! G& X/ N/ e% U

( q( y/ ]; l) d9 e  t/* configure System module */+ o+ h3 K2 H2 C* B
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 }/ H: O% {  v) S3 M+ `; z. `SysMin.bufSize = 0x1000;( V. K7 ~$ F. D) b4 d3 z; p" `+ b
SysMin.flushAtExit = false;6 A& a& `1 a2 P$ s7 F6 ]

' N  n. F% V8 C! fvar System = xdc.useModule('xdc.runtime.System');. b/ k; {3 B' C( h
System.SupportProxy = SysMin;) F: _3 ~& h2 u8 f9 O+ C' O
- E  h; @) e) J0 s
/* configure SysBios to use the lower half of Timer 1 */
/ e& s- ~- F& k0 [# @& D4 N- Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; g$ ~  w! C1 a( L" Y" mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( G  K% ?3 w* u
Timer.timerSettings[1].master = true;
! [3 Z. v6 f9 t7 b$ t; RTimer.defaultHalf = Timer.Half_LOWER;, ~+ p6 U; o/ `6 t- M$ |3 Y) W
Clock.timerId = 1;
0 e8 G* W9 D! l+ g
3 M: B( B$ b7 ?. G$ a3 K2 ^# f+ c- Q; J/ {
/*
5 w3 H" y! ~2 X# ^* m. e *  ======== Miscellaneous Configuration ========
0 f7 n8 O; |/ o4 Z( {  @ */
" Q: U3 Y5 e* f: q- l- ?6 v' {; }. ]- J# h" j6 `0 s
/* set default diags mask */
# @$ t/ R- W9 @" Q8 g) xvar Diags = xdc.useModule('xdc.runtime.Diags');
6 n& p2 v5 y( Z2 N" L- L- ]! z& Fvar Defaults = xdc.useModule('xdc.runtime.Defaults');( n: Y! g. R' B- N" n
( E1 B2 x6 C% O0 r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ z0 O9 E8 D. L
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ c3 z" I! L& z4 s- p' J( Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 K8 s: z) B8 B' V- J; cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 g: [* o+ ?# V6 Z& D8 n" CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 H4 O# M/ p* m! `4 K; Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 }; D" m3 L/ r. T% x7 s" P' W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 _, t' ]; h: P+ X' A* M7 o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 S0 M0 G. Q  [% S. L. _- O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* l1 g6 |/ F9 k" _0 W# E% n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 v# ]! [) P! b2 u, {: C4 c) j+ `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, {/ c) M/ ~4 R+ }: [- JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! Q' O! m! t1 M: oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, M5 z8 A- R' w1 h+ |& Q& {  ADefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. l4 r; s8 c: C1 p2 K
/ [+ U6 K. |" r3 P& c- I  n/* override diags mask for selected modules */1 F9 @; g/ K% V: Z
xdc.useModule('xdc.runtime.Main');
# W6 }9 @# U5 ]0 |+ k7 }3 ~Diags.setMaskMeta(
1 N$ \1 [$ o) Y    "xdc.runtime.Main",3 `7 \- l- v- i+ }& n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ F, H' }" Y& ~$ b' J2 V    Diags.RUNTIME_ON
2 A( o. t) m1 T. K4 L5 O0 g; e);3 u; n" ^, z& h; V( r5 L$ k
- X. U/ p* X; {% _- V
var Registry = xdc.useModule('xdc.runtime.Registry');0 ~/ Z. u* o4 }0 ~
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 V, v8 w1 d9 R( T9 j: n8 j" [6 `9 @Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% p" y5 A' Q/ p* M( Q) xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 Q2 d" ]% N$ E9 X' U/ m: I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 _. ~: w2 o: `0 o0 k7 W2 k* }/ ?6 O- V9 v, A; ?
/* create a logger instance */+ r+ Z/ @) e4 p8 f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* O* Z5 l6 H1 Z1 X+ v
var loggerBufP = new LoggerBuf.Params();, `  {6 g  b7 n5 ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, z. |$ E+ R, f" D2 S1 G8 p: i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 T! {6 r- e$ @, v' s' a9 N

. z4 x" E4 b# d4 B/ b: ~" Bvar appLogger = LoggerBuf.create(loggerBufP);
3 V, q1 y5 F- K: o( ]appLogger.instance.name = "AppLog_Core1";0 [6 \1 ]! o" Y0 ^2 N1 a
Defaults.common$.logger = appLogger;" x3 Q$ @: L! E: M
Memory.defaultHeapSize = 0x8192;    ; g* T8 S/ v- @5 M% o
Idle.idleFxns[0] = "&LEDStatus";( G. w. M$ _$ Q4 u
Cache.initSize.l2Size = Cache.L2Size_32K;
: c$ m( `/ B% J% ^9 y( Y$ N6 `3 O% O* b8 {$ L1 h+ v& [
回复 支持 反对

使用道具 举报

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 */) W+ K4 K* y& j4 S, n6 N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% t& W2 j* F2 wvar heapMemParams = new HeapMem.Params();
3 C  \9 @$ _9 E4 P: x$ kheapMemParams.size = 0x4000;8 [5 y( I- O, p% l* T" K

7 y; p  T9 {, e# v1 Wvar Memory = xdc.useModule('xdc.runtime.Memory');# Y% h, v9 U* ~5 V  D! I2 V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" c. ]9 }5 _1 s" h9 `( r7 o

* Y7 E# \7 l; j# n, f9 K5 Z我大约calloc  每次共计大小为5K*16bits,$ ?& K; C2 O- E  y
而默认配置才0x4000、需要改大。
$ }) T/ |) }" s" v' @; k7 e
% L  g9 v# y' P. B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# r. a+ Y( f; g8 t5 gProgram.heap = 0;
& a# M" K! w( j8 [Program.argSize = 100;  /* minimum size */2 _/ V" J5 F8 u( w: F2 M. D
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-29 07:27 , Processed in 0.046540 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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