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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' n% t; o; @4 i+ I! w  A9 G2 x1 W( U7 c+ Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 r: F2 a3 \; I" {: n$ m
( q- y" _! I0 W" j其他程序段。。。。。: w. a- Q) z) D' P! E
% k3 {6 i( [/ H# E1 p
   free(x_d);
4 y& g3 c4 u4 r% h8 z' u
3 U& ?: J8 r4 }+ e% m; e使用DSP侧单独调试功能,验证动态申请没有问题,
& R5 r7 ~: J- k  k* u+ g; b6 J
9 M' E/ W) D; Z+ @; |( f7 W; C& p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 n$ d  g4 J  @( x& y3 T

$ s& Q( d4 Y& v3 @( A2 Q% h! c  a0 A* P3 m0 E' V5 N1 _. F6 x

3 a  b9 R" p/ b/ l! }
9 C8 W" H7 m( h, m' H1 D- ]5 F) j# U0 Z& m- \! C# T

9 h" }2 ]! W8 ]7 ]! g! c5 X+ s" V+ l  \6 D$ g! F
+ m+ R& ~8 ]. c  T0 ^( k
. [' r8 P( I  |0 c
. C: A2 d! b0 A+ H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& \; Z! Y, p7 s8 y. ?: ]' z) D. N  B! X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, j6 H" Q0 O4 R( q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ }7 J" ~) U7 v" l* t! p7 y

9 ]) U* M3 X) n( E. c; Z是不是需要在DSP.CFG中进行配置
  Z+ R8 H2 l7 g8 K9 t我现在的配置为# s' z- h* v7 i* T' T  {4 l

+ ]4 S- n% R' F/*
! W4 x+ D. O" `5 P, D! K  u) c7 T *  ======== Operating System Configuration ========
$ h+ c) y0 i+ O- w; O) D' h$ U) ~ */
- Q+ P& d$ |$ i3 B  D+ o
8 ]3 d# H/ V  n! o+ M+ E/* no rts heap */* M, Y$ C0 B. O! ~) i
Program.heap = 0;
! @3 _* `. X& {; v4 }6 ~) uProgram.argSize = 100;  /* minimum size */  d. g- _: o! L: W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) G1 v4 s0 V3 w8 f) M! D1 Z

* K9 U+ L) q. Z5 U2 s/* create a default heap */
6 R5 G1 u" J( [0 g" t. Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* d) S  S1 l4 |var heapMemParams = new HeapMem.Params();
9 r& c9 H8 O: o0 y7 uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 x5 n6 t! f( H: y& t9 l/ P( \# j8 ^2 B$ x( u9 k( x, \6 A! C
var Memory = xdc.useModule('xdc.runtime.Memory');
. z5 j- w1 X+ y. ?# k: s4 o- z8 q' zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 s! Z% h3 H8 v$ f/ a# c' d1 b
% i0 Q. |: [+ i* Z1 x( X  E
/* configure System module */
) y; Z3 [4 `: x- ovar SysMin = xdc.useModule('xdc.runtime.SysMin');7 R1 ^) s! _% q. p% W
SysMin.bufSize = 0x1000;
2 u' T  y/ T8 j' M+ F6 LSysMin.flushAtExit = false;, U; a) r4 g5 i% N! G/ z  `
% \7 ^5 _7 {# ~1 k( s8 O1 w
var System = xdc.useModule('xdc.runtime.System');6 l  f& ~" Z+ }7 {2 }+ _
System.SupportProxy = SysMin;
4 Y% [% n( S! n" b( W
9 W, }8 x, |# U+ G  R1 n$ z/* configure SysBios to use the lower half of Timer 1 */+ c# i" S1 K2 h7 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  b) h# B7 ]& n( ^* k
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 e4 v' g3 R6 Z: A
Timer.timerSettings[1].master = true;- `& O# ]4 G/ Q) _
Timer.defaultHalf = Timer.Half_LOWER;
" P8 Z+ @; j% s7 j- |4 P- VClock.timerId = 1;
) b( T0 o2 _0 t$ ~! e4 E/ |5 j5 T+ }
0 m# c% t  b- E( l9 `' t
/*
4 w0 B" h1 E& k/ B6 C. h, t *  ======== Miscellaneous Configuration ========
+ M! M6 |3 @  V$ E */" f6 F+ U: m' A) f2 U
. x* \- V/ M( r
/* set default diags mask */( r5 @$ L9 f. W. N, h& U( X
var Diags = xdc.useModule('xdc.runtime.Diags');
) J! I+ v* }2 E0 J) a1 wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
" R$ n% L  L5 Z
- p% I  H  @8 e% {8 oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 M( G$ Y* x  G2 f+ V/ g: t: n; i3 DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; f& C( ~. l2 l$ QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! W3 x. Y4 `( \; F/ U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" m$ G& K7 k3 E9 e/ b2 cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( `+ X" m" k6 sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 n2 l6 K; y. W7 @, X2 WDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 c4 _4 ^) k$ z5 |: P4 F4 i5 g) Q* eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- j- h9 ~+ i9 t: E8 xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- Y% {4 X% E/ y1 ?, X. u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& x1 f# l8 A, \2 t( u3 r5 s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 k6 N9 o# ~0 c/ m# a
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' s& [8 X: F1 m: N6 mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" B" f: O( O1 B, S8 B- d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 I- }5 Q3 i8 b: a# Y& a! k, h" {1 |3 q/ G  y
/* override diags mask for selected modules */* k& y2 g. b4 X5 ^& u! u. t
xdc.useModule('xdc.runtime.Main');3 k2 ^: M  `* g3 t" @
Diags.setMaskMeta(
) S! c' {: @% W# l" L4 u    "xdc.runtime.Main",! @* [0 n7 w) w: I* j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" Q" L- Y: [4 C3 c    Diags.RUNTIME_ON
5 G5 |+ \1 o" l+ n& ?);$ w8 `( h; c& _( M5 _

/ T, F9 w7 {; qvar Registry = xdc.useModule('xdc.runtime.Registry');  z. W1 _6 q3 K7 J4 n$ w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 f# L2 l9 \& \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 z! M* Q$ Y4 hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, u" \, E, ~9 f( vRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% O. D: P; |+ c- k" |" v- B: A: d! ]3 P, g0 O- d
/* create a logger instance *// [" p8 M* E$ s8 M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 m1 B. a% i. k  O. L* |
var loggerBufP = new LoggerBuf.Params();) @: w3 c  c7 w+ Y3 ]  W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. V+ O3 o# P8 b5 dloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 W3 _* g8 n( U' n
2 Q( e3 [# \; fvar appLogger = LoggerBuf.create(loggerBufP);. w5 F" ^7 l- S$ b1 B% N& @
appLogger.instance.name = "AppLog_Core1";3 a* U1 [' M2 o. a9 m$ m1 d5 V5 U
Defaults.common$.logger = appLogger;
7 i( U! G4 c0 T: ^* _2 l" kMemory.defaultHeapSize = 0x8192;   
# N; X* p$ G9 ZIdle.idleFxns[0] = "&LEDStatus";" O0 {  W2 e$ _6 Y: V+ j
Cache.initSize.l2Size = Cache.L2Size_32K;
' j% ]1 [" w/ ~9 \6 H) r2 s1 N0 j5 l6 V! y* Z3 z' _2 f
回复 支持 反对

使用道具 举报

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 */: s* @5 Q/ E6 |5 ?  C4 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 Y/ G2 |6 p9 @- ~var heapMemParams = new HeapMem.Params();( J$ v$ T7 [/ u; T0 B0 {$ e* q
heapMemParams.size = 0x4000;
2 I' W+ e/ B' R
. b& j/ {; l$ r1 svar Memory = xdc.useModule('xdc.runtime.Memory');5 _' e, {! @5 f. i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! [; R1 E, {$ ?- D% |( J$ V$ L2 n. c# W1 T: z# G; b4 F
我大约calloc  每次共计大小为5K*16bits,, `( K/ a9 U( R6 l3 j, ^
而默认配置才0x4000、需要改大。" G1 q2 @+ m; {, O# G9 Z. Q
6 }7 I% ~  b3 v+ L3 P, i* _0 S' ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& p$ F( x: N. }! F# k) j
Program.heap = 0;7 Z& A2 w  }* c" d) s+ P3 K
Program.argSize = 100;  /* minimum size */! G+ E- }6 |9 ^% s# F
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-22 22:33 , Processed in 0.050987 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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