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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ v" J' H  c% e7 q
! U) [& D% q8 U" R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, e. ]3 G, d- u9 D

( T" s" a" v( ^其他程序段。。。。。; u- c$ A1 Y4 M; F' ~
- ]! x0 |& b  n; y0 c" K
   free(x_d);
- v* E; p& V2 h6 n+ a$ `7 b3 y* r; ?: `/ P
使用DSP侧单独调试功能,验证动态申请没有问题,& `# u: T, ]  E) c

: @  |: b) x" {7 d( T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 A0 q3 K* z0 {" `: m/ X( y$ t( f
9 p1 \; ~6 {* b6 e9 l& V

  t* V3 b( D) b2 b( [3 ^  j0 R- R$ `: O- R( |

7 [) \( W$ o( _% n9 O* _, f# ?+ u) N9 n3 e
9 ~6 L) Y( v, k8 {! i7 s

) d/ s8 Q! f: f' N% Q* g6 E) g! I* L5 D, G* \( g
2 M) ~4 S- \2 m6 A$ b

" L% \5 O4 G, z% {: H& y/ G( @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, ^2 x# r$ e- o  Q* a! p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 y) @) o/ m1 }- ^0 Z) I: N6 o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! x0 v5 ^8 T! r! h
  V7 N3 @7 j9 F& k8 v; r
是不是需要在DSP.CFG中进行配置) W" ~7 R) g. M( H; G6 x- g" z+ x; S
我现在的配置为
3 q) @7 I4 r" @8 f5 [! Z, D2 I# K  O& d8 i5 [8 u$ |* j. i* m3 u
/*
8 R. u6 F; b2 c7 r$ F% { *  ======== Operating System Configuration ========- {# \5 o, g& y4 C6 m- \+ z
*/( h/ q$ S  R; B" x6 q8 {4 a
, g7 Z' g$ ]4 h% _% v" z
/* no rts heap */
4 R% }( _& {" XProgram.heap = 0;7 @- U# D5 H$ j) [
Program.argSize = 100;  /* minimum size */
$ y/ {8 V$ ~' s8 C$ p1 qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" M$ I* q! a: B' `
8 n& }2 i2 C8 g/ |: Y
/* create a default heap */( w1 K. ]2 Y6 C1 k3 n5 k" ~: U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ n0 _+ e0 M2 H  @
var heapMemParams = new HeapMem.Params();
3 S/ u5 X" D& |, e+ wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# M4 ~  I8 R2 ]0 H& n& R, _' g0 k/ x. V/ W. A" d
var Memory = xdc.useModule('xdc.runtime.Memory');, e6 d) e& ^" f; R: h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; l( q2 D; w8 b0 [" ~/ v' A- c9 ?' J  n' G$ n
/* configure System module */9 w2 V8 |9 s/ g
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. w% T4 R0 s" t- x+ `' T+ YSysMin.bufSize = 0x1000;8 P0 y% V7 e2 [
SysMin.flushAtExit = false;
* V, v# P. I- @& a' `. G
" y) H$ P1 w* ]) x- ]. P' l& Yvar System = xdc.useModule('xdc.runtime.System');5 G& z6 o2 T! @, ^
System.SupportProxy = SysMin;" e; s; Q+ s+ C+ m5 D) Z' C' y
7 q/ O1 ?0 L' R! A/ z) q
/* configure SysBios to use the lower half of Timer 1 */
' P4 J8 x( b) m9 M& O' I) S$ gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ ?7 H$ o% y5 F5 Z. ~; @var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  f/ `) W$ h/ ~2 a* a; M+ ZTimer.timerSettings[1].master = true;
5 A* ]& N% t  Y$ j* G& Y- bTimer.defaultHalf = Timer.Half_LOWER;7 S, ?1 ^! f2 J
Clock.timerId = 1;
" T7 L" T* t, W' N# [) i' t
4 S7 Q& s7 {7 h8 b, J/ l0 W' h# ?! Y/ G- R0 M8 @! l$ ]
/*$ }8 t+ ]9 b7 K' E  @$ ]
*  ======== Miscellaneous Configuration ========! N0 h; N; A) B" n- P, L
*/7 t/ t9 \$ f/ `% t0 v

/ ], }" W! Y. n2 X6 Y4 R/* set default diags mask */6 n% ^8 q- X& A; B/ {- j) V7 J1 c( ^
var Diags = xdc.useModule('xdc.runtime.Diags');
0 V* B1 y2 N) v4 Z7 w% jvar Defaults = xdc.useModule('xdc.runtime.Defaults');( t+ s. t% h) v3 i5 O1 N2 |! u

/ ~. D, M5 H2 W( T, ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# |7 B% j/ u  o! ?& d4 K
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 g& r( g+ b8 h* M- ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! ^( P! k& c! \, ?: N8 a# N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' A  l- i; {  I" y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, r- v5 j8 i3 {4 BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, _7 K) V: b6 F% U0 Y+ p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ O/ m2 \, t5 I% K. l, H# b2 f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 ~4 o8 q/ q* `: ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; t" T( Z: ?7 Z1 ^0 o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 d' r' g2 ~# V2 y$ c) g' tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. {& ^( M8 B/ l9 ~  h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 a7 I; l% d& p3 m) }
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ^5 r0 f0 C/ Z+ b+ W( U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 s  B( |2 ^" V+ H* }

$ r1 |2 z& {' p4 k/* override diags mask for selected modules */
. J6 g- H& s- oxdc.useModule('xdc.runtime.Main');
  u8 e! S/ J9 RDiags.setMaskMeta(
6 L& p8 H  L8 H4 {( Y) ?    "xdc.runtime.Main",
$ u* E" o  j, N* O. A$ U    Diags.ENTRY | Diags.EXIT | Diags.INFO,' L8 E) \" t$ Y8 m# @
    Diags.RUNTIME_ON5 e, a3 Y' ]9 E+ g% _# R4 ^
);
  ^3 a; Z5 M9 `+ p8 ^3 N% p/ H% ?- W; O- p5 M- E, C# E0 |+ `
var Registry = xdc.useModule('xdc.runtime.Registry');
9 n9 t* Z' m) |) Y( MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 u' s. Z. h# C; l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; m! s, [  y2 i5 r( k: _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" ^9 ]! \' S4 Z. L  H. x% ?/ XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% m0 B7 P6 ^# {$ X9 N! X3 g" M4 {  G0 I* s" \/ S
/* create a logger instance */; v4 r; K0 _8 @3 [# M" W+ F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& j( ^6 q( O$ b% o% Y2 R$ _1 c
var loggerBufP = new LoggerBuf.Params();
" X- _; j. T2 L8 X& ~% u* L. zloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 n) N, p& B9 F; Y% V+ W4 SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, {$ O; f% S$ U' v6 ^: p2 i( T& S" B& P) ^" h, f( l3 o! z, H" h# p, G
var appLogger = LoggerBuf.create(loggerBufP);
; _2 f4 z% L3 @  u" AappLogger.instance.name = "AppLog_Core1";6 D/ q' ~# ]$ R6 |5 i
Defaults.common$.logger = appLogger;
# v; K) X, C* k3 N1 O7 KMemory.defaultHeapSize = 0x8192;    4 e0 [5 R" Z4 o# Z* L
Idle.idleFxns[0] = "&LEDStatus";+ {* y( b2 u: v' z- O# ^' F/ l
Cache.initSize.l2Size = Cache.L2Size_32K;
5 F# k$ y* @8 c3 h7 F# O  S; H% S# z# t8 o, M* G0 R
回复 支持 反对

使用道具 举报

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 */
3 M% I, l: C/ _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- h- @) O: q3 F' P3 N5 v* ~' Yvar heapMemParams = new HeapMem.Params();$ @" P. T# u* f( m3 P# u. y  k
heapMemParams.size = 0x4000;0 s; S4 z; v; U# c  P: c; R

( E" [+ M9 v  I4 O8 n1 z' |var Memory = xdc.useModule('xdc.runtime.Memory');0 |, q& e4 |) |; {, A6 ~8 N% o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ {3 @' W& O/ O0 r0 @
( |+ N' t. s, D- I. e" i1 y4 Z& D
我大约calloc  每次共计大小为5K*16bits,
+ _1 [- i6 {3 Q- d而默认配置才0x4000、需要改大。" z, N2 |5 F* `: s6 g; m- R6 a
8 U* j4 }( [. v- n' N+ E; f8 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; ]8 f0 ^7 L5 O5 I1 g" L
Program.heap = 0;
4 J7 M; X9 S# s) i2 t" sProgram.argSize = 100;  /* minimum size */  N4 a9 W, {4 v' ?
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-15 13:33 , Processed in 0.043973 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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