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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, H, }3 }+ }0 I  Y- ?9 q# T6 w
8 }! r/ O7 u* ^4 Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& T# ]$ X6 W2 i% h5 w% r& l
% Z/ t4 w4 c  J. j6 s
其他程序段。。。。。/ @# n% v0 p  f+ S: T# Y# @

% P* W7 @) S0 ]3 `5 u   free(x_d);/ I. p( P0 ?$ p6 C" `

4 E' X( U6 F  P: ]1 y使用DSP侧单独调试功能,验证动态申请没有问题,
7 k/ C0 R$ L8 n1 n& a2 x$ N  z
7 h  q9 O; m0 L  a5 t" g/ |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 t* H/ m/ s- i  q* H0 m0 U; Z$ s) |
! f# S+ X2 l+ ?

! h2 d1 o( g* U9 {- n, ~" w3 }
0 v$ p) c0 L' `6 W! ~2 j
( K) x8 E% P! C  `8 r
' F) z* b( s4 i; T+ w/ g$ u
" R4 r/ @0 l. v; b" M& U+ z  u
7 j# D: T1 E) l) J( Q/ `3 a; l: p0 S/ K# N3 L0 b- d" R
1 N' l( M! K, ]  i4 y9 m: Q

; Z; y" g& `' l3 m" i" ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 Z/ x; G& b# o
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# F: K8 \4 {$ x4 R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! X) s: l% I9 f
: m. s% }8 B( m" g% m9 _& `
是不是需要在DSP.CFG中进行配置8 ^- l- m' d  @1 h1 k) x) k, S9 U. i
我现在的配置为
& t. |, O# [* e( p1 D7 H# A1 \; [) m' ~" |; u4 T0 ]3 }6 D5 v
/*& h$ [) j' t. o6 k0 c( ?
*  ======== Operating System Configuration ========
0 Z8 p' S( h+ J5 i9 ]. B) w */
7 w6 v: v2 P: p5 }  @/ j  E
# V; J$ d3 t7 w' B/* no rts heap */
" m+ a" E3 o: b8 a/ h- IProgram.heap = 0;
9 e( @: i4 J% V* S1 Y, Q& e7 FProgram.argSize = 100;  /* minimum size */
& P* d. G5 @$ [Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 ~: [3 Z3 {/ Q+ |/ c' o# D* @6 |2 L# W

8 h- p1 z$ Y$ K: h' j/* create a default heap */' L3 h+ ^) i5 D( o! j) h( }' L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 V' ~9 Y( b; B( |1 z, Uvar heapMemParams = new HeapMem.Params();
4 `2 _, |6 e( o( \) F% Y' ~& vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# W# q3 u  K* U- ~5 o
9 I7 N" k2 x" B; Y& h7 P& d
var Memory = xdc.useModule('xdc.runtime.Memory');# p: }* Z8 ]( J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& K% y- E5 ?2 B5 r, X' o$ W3 W

; v7 y7 a. }% c' f# \/* configure System module */
0 J. Y3 Z- v% u- N* hvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 R- r# Z; Q+ E- y( Z4 y
SysMin.bufSize = 0x1000;  X; M& f' Y  v" r+ `$ Z, i
SysMin.flushAtExit = false;# d9 z7 ^% ^! F5 W3 p
: O9 J/ r, R! j9 H4 a( @. P
var System = xdc.useModule('xdc.runtime.System');  q0 r9 W" a- {! e/ M' y. Z* g1 v
System.SupportProxy = SysMin;# A2 z4 y! A2 K" Q2 B- O5 i$ {, L
* O/ n8 R; m% z
/* configure SysBios to use the lower half of Timer 1 */
/ s9 @: X6 T( e8 S9 t% P! w2 pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, R3 O( D- t$ T0 @2 A5 A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; f9 F8 H2 S, H
Timer.timerSettings[1].master = true;
) ^8 Z2 [4 Q8 v! \2 C6 [8 B* UTimer.defaultHalf = Timer.Half_LOWER;
9 \3 F6 t% T$ h3 B& c% u' g4 uClock.timerId = 1;
) H* ?) W" d2 z; A" h5 ~( q1 D/ c, Y" |% F: o

8 A" w# w; P8 B9 V6 ]- U' d/*
/ K5 S5 j8 F8 Y% q$ D" ` *  ======== Miscellaneous Configuration ========, q3 i: [8 O" M) ?2 i: r
*/
9 _/ F9 J2 \9 _' T! k
7 ~; [. e; ^3 I, F$ ]/* set default diags mask */
, A7 t1 ~% L$ b( D1 v3 E/ Bvar Diags = xdc.useModule('xdc.runtime.Diags');
  Z/ L) x7 b& @% J- r! Rvar Defaults = xdc.useModule('xdc.runtime.Defaults');" _3 H- J* c! |# `# i
3 r! c3 e& c! d( d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 [$ _* {  u; g, h
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# G% m, A& P$ v/ E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 Q6 j+ k' W3 k$ i3 T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  o0 \+ l: l5 i& H1 N) ]% N8 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 ]% ^6 W( q8 n  n: R% u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  f0 D" ?" _2 O3 J# [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 R+ N/ s, k3 s6 r0 HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ `) \9 {. t; T6 A) tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ `! Y6 L) X0 d; \) |; |) l
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 j; a+ A) M9 j; b7 K* ^Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) r# d# M" ^4 Y' {7 Z5 p& TDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) @6 M& ^" i; sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 C( C2 R6 p) g) F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 Y3 g$ Y2 G" H/ a7 V1 T2 P  [7 u# e! S8 U1 h" u
/* override diags mask for selected modules */  j8 x; e: V1 q+ @) Y: m; O
xdc.useModule('xdc.runtime.Main');
9 f/ a; H! Q; {% kDiags.setMaskMeta($ y9 B7 M& x# t& G
    "xdc.runtime.Main",9 g0 j, r5 w" Q8 d% z8 }1 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- P% \( C- ]9 K    Diags.RUNTIME_ON
. g: r$ z# u% I4 C/ \);
; n0 z3 h/ e9 }0 S
  {3 w! C9 N3 Z) w) s8 `; Bvar Registry = xdc.useModule('xdc.runtime.Registry');
3 _, ]" G2 U7 z9 b* cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% F0 X) j6 q. y7 L/ eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 |! k/ e+ N9 R+ d2 ~6 P, w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  e( \$ G$ d+ ~3 @( JRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: T4 @+ \) ?$ q( o& x* U3 [

4 x: Q) n7 t3 l4 g2 @, t  j1 y/* create a logger instance */: b' A9 h8 e6 X2 p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: ]  L) }3 R0 C$ ?3 S+ H& [var loggerBufP = new LoggerBuf.Params();3 ^4 u& Z  C; u) }* m% ~! r3 Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 A: [, C* r' n4 x/ J/ `. BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
: d% `% ^# l+ l: ~
& i1 j! G( i0 s, Avar appLogger = LoggerBuf.create(loggerBufP);
0 W/ e- T/ {( Y7 X  M1 M) b, C8 AappLogger.instance.name = "AppLog_Core1";# S: Q) N/ L7 s% ]4 L! @  ^
Defaults.common$.logger = appLogger;0 `* A# P5 {/ ~* y4 T# Y
Memory.defaultHeapSize = 0x8192;    ) u2 D$ ?8 P) g6 y5 D+ \& Y
Idle.idleFxns[0] = "&LEDStatus";
$ A3 t/ m; o: E" OCache.initSize.l2Size = Cache.L2Size_32K;" U( g: F/ K" @( W$ d% X
; i1 E0 Q0 d1 q  o! J* `" z
回复 支持 反对

使用道具 举报

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 */! R3 r( m! l! B6 i' ^8 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 E9 _6 p" C6 Q. I
var heapMemParams = new HeapMem.Params();
& q" ?, B5 h- c) y. CheapMemParams.size = 0x4000;0 Y+ d" _: n6 X8 A$ s7 \! T
: \) m% a2 v0 f) r: Q, Z; ~
var Memory = xdc.useModule('xdc.runtime.Memory');
3 ~9 T7 |7 w4 E( \, OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; R8 J. T# k% a: X0 K; e% F0 r* x) z
我大约calloc  每次共计大小为5K*16bits,
* n, j3 m! v! ?' `6 y+ B7 P而默认配置才0x4000、需要改大。
, a+ D, O* S2 h2 I0 h) [$ y) V/ ?7 c; y& q9 c+ M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 i3 T/ F6 K; x* ?% M
Program.heap = 0;( I9 |4 r: F, U
Program.argSize = 100;  /* minimum size */
$ f7 K+ {  r9 K. s4 p$ X( JProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 02:54 , Processed in 0.041436 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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