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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, e' W3 K& |* r# G
' {$ \, ^* [0 @6 }& y0 K* N6 I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" K" C9 E* b# A; r, y8 T3 F$ _
4 X& s* s& R6 K3 H! P% k+ n, D8 M
其他程序段。。。。。
: N  g3 W9 r$ V& H  O9 E
/ J# ?; h/ j8 z  `0 S7 B1 V3 e& B   free(x_d);5 O- @# h2 F/ F( a# K
2 c4 x0 B0 z2 b
使用DSP侧单独调试功能,验证动态申请没有问题,, \- _: `3 }) H7 ~0 L$ F% C7 e
+ |, l/ M, @6 n" J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 N2 {" ?# N. G! b( m9 z
( M% b7 {3 H) q# S$ C* H
: @6 @& H6 R: S; [) H7 @2 c
3 D; I" D$ W$ z+ Z/ q0 C
' B, w+ t( @/ Y2 M
2 t3 Q. L  n3 h+ J2 u2 F/ h
6 Y+ B# o" a* M2 c3 T
, y- b9 c- T0 M4 a3 \, L/ {/ `
5 M) s& B+ z3 ]) {3 h! |% I+ J# J
! f5 g4 w0 v4 I5 k

: c4 Z; T& R& }4 n8 y' I. ^6 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 p+ ^  ~/ D1 E8 w- l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 L/ ~6 o: Y/ W$ B  Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# Z$ v6 z  ]) ^# `
4 g6 z0 s2 y  _- {$ b/ C: F
是不是需要在DSP.CFG中进行配置
+ c$ G$ O9 o# {  g8 b$ x我现在的配置为
5 v9 y, F7 h  ~' M! d" W& z: j& [+ D+ I. [' K, e) l
/*, n/ y( m" n  Z) |
*  ======== Operating System Configuration ========, C8 V" c+ V2 d! z5 u4 U
*/: D  O7 ?2 `7 j2 n  J1 h: G

1 X$ d; R# U0 @1 J! \7 T# x0 B/* no rts heap */
9 G6 c- A/ @" C9 J- W9 q  lProgram.heap = 0;
! E: x/ e9 R0 d( ^+ Q+ h3 JProgram.argSize = 100;  /* minimum size */
; |/ a5 g) a* x2 S) v  O4 aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 A" c8 M! c2 b8 h" {0 n/ k0 @. I- G0 X6 Z
/* create a default heap */* r( Y' }4 o" I( s2 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! X- c, d( l. w# q2 y! W4 y5 [
var heapMemParams = new HeapMem.Params();
  M7 s5 z8 H1 G1 H) p4 NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  |' Q" c: T2 Y1 t' V

- x  T4 p1 @4 \/ r, X* I+ _
var Memory = xdc.useModule('xdc.runtime.Memory');% n' h! w# U5 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' D6 j& i  y( m9 E7 T
& Z8 k" o# f% L- y
/* configure System module */
, N% P1 m$ x7 I! \var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 l; R7 @$ o* W" [SysMin.bufSize = 0x1000;
% U( ]9 Y) g' ^% X) K) _6 D( jSysMin.flushAtExit = false;
8 {* U! S# B5 y5 p
8 `6 ?" M7 d0 l% T5 @- R( vvar System = xdc.useModule('xdc.runtime.System');
, f$ b: X' t7 T) P0 _System.SupportProxy = SysMin;
8 p7 X2 F2 L- z: |/ r  J" O5 x2 _  O) O8 u# z
/* configure SysBios to use the lower half of Timer 1 */
* s" r$ H1 g, w& vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  k. }" `& \, ?! u1 K' J* o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 F6 }. e) a5 d1 ?Timer.timerSettings[1].master = true;' H' S' s$ N2 @9 n
Timer.defaultHalf = Timer.Half_LOWER;
; p3 U% o. g8 Z, |' OClock.timerId = 1;
% \" l, h1 t3 E2 S- [
: w" S% g+ z/ @, R& ~' i! V' }( L8 j5 e- o; P: w- z
/*( B0 S2 Y5 U+ ^9 Z1 j: e' I
*  ======== Miscellaneous Configuration ========" l; J. }" F& ]3 ?
*/
/ ?' U- U  f9 b! k* G& _. F. V4 z, S" ^$ o5 \- ]6 [9 y; T
/* set default diags mask */
, a- s2 Y/ v! n2 {# Mvar Diags = xdc.useModule('xdc.runtime.Diags');% u$ I" m1 s  A7 P, B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% g  b% `  A1 w; Z$ ?) Z( X6 S! d! R% D! n) j, G' Z5 r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 a- @$ ?; h# z" S) o. x! E4 ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) q+ R2 b; r" V& l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. @% ?9 @6 Y' h; C2 L' YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; b4 A9 A4 _- p2 d3 x8 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 W+ X) w7 q" ^! W# _1 y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( p7 S. a0 n7 @7 S1 b5 _5 NDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- g1 D/ B' \* C9 [8 S) w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 f, K; B7 c, Z. h- z' ?& _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  ?: v6 S! Z, G' b; u1 g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# E$ s0 G* m; A& A1 s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 N" |- t* V5 T" _- C
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 m8 `+ d% O" `; \, x0 }% r1 z$ qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ z2 l' z6 o' G- \' eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ |7 f# j0 u, M( J% t: n6 f4 i/ z9 Z/ d0 b- p+ {
/* override diags mask for selected modules */; t+ [8 x! a* M. w  |9 E' x
xdc.useModule('xdc.runtime.Main');1 K+ C2 C- k( Z9 j$ C
Diags.setMaskMeta(
, ^8 [+ ~. S# u0 `    "xdc.runtime.Main",
. t3 ~0 }. d4 D# M    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; W$ x; P6 t+ O! }" J4 y- j; m% s    Diags.RUNTIME_ON
$ t: j# z1 {! j);, x! r8 ]' h- B! {: F5 S5 o
) z. N/ g5 x+ V7 W  B% M2 O
var Registry = xdc.useModule('xdc.runtime.Registry');* r' b" J' `9 f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; B: d3 |2 x9 I8 |( M; c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 w' `* H* w% G. e! ]# V! R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: D9 K( I: Y( D% b: r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" W7 H* t( B  J
: i0 V% H6 f' a" Z4 X
/* create a logger instance */1 I$ x" Z" k0 h* r. e8 J- `6 n. N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 i4 j' Q, R/ Q  W  p& Wvar loggerBufP = new LoggerBuf.Params();
4 x3 T( H; y8 x) lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 ~# G: D0 p" x% N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( Y* s+ f5 Q+ h5 S( H, J- [7 h& K% r( S
var appLogger = LoggerBuf.create(loggerBufP);
4 U) J& i9 j' F1 RappLogger.instance.name = "AppLog_Core1";5 p6 Z. I3 `6 I# t6 n
Defaults.common$.logger = appLogger;  P; B$ J, K  N9 m- e/ s! p) \
Memory.defaultHeapSize = 0x8192;    " D6 Y, ~  ~9 M7 j, O) ?' P
Idle.idleFxns[0] = "&LEDStatus";$ s3 U, c, X( ]* s" _3 t" D% G2 L
Cache.initSize.l2Size = Cache.L2Size_32K;6 ]3 W4 r. i5 Q& Y# u) m
; y$ j2 F: x5 ^0 Q) N5 U* D. C. G( i
回复 支持 反对

使用道具 举报

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 */
' z+ ]0 m. K) Z5 _0 Z- [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" t& z. }5 T# Y1 z7 |var heapMemParams = new HeapMem.Params();, u" e4 W: h2 U1 W4 A
heapMemParams.size = 0x4000;! }7 F5 ~. |. s( ^
- i, p; z: z. e+ V7 l$ Q/ y2 a/ h
var Memory = xdc.useModule('xdc.runtime.Memory');
. ~- h, k5 z6 r& D0 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% w) r6 T4 x7 w( c; Z4 Y9 c/ Q: _

6 F% t% T! o- j0 E6 c( s/ G我大约calloc  每次共计大小为5K*16bits,) K. y+ _4 s: O
而默认配置才0x4000、需要改大。5 d% P/ ~# G$ v# g
7 x  B2 p" U6 v- ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 R$ F0 G( f; J' I
Program.heap = 0;
" z9 U  d- i. k. q/ ~Program.argSize = 100;  /* minimum size */7 t0 N% q* I8 B% R5 u6 Y1 n) _) H  F6 q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 15:50 , Processed in 0.044272 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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