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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 Q4 ?' g! @, _1 W6 @5 _( ~6 h" I; J, |
8 A' m" b. U& _3 X0 b( b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ I4 K& B* e, q1 Z/ {9 T0 f

( Z: ~4 C3 I) H其他程序段。。。。。  U8 a1 P- v3 m8 i) B# L
8 L% q1 L) f' E% V: @6 H7 Q
   free(x_d);& n) k4 N9 O' `. P3 P2 [4 y% Q

! h3 S3 y& g$ o! _使用DSP侧单独调试功能,验证动态申请没有问题,  `8 b/ _+ T5 e2 ]/ A! u

: C6 f* I1 _+ z2 r, g( a9 v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! X" G  e5 p5 z: q9 y+ T, f6 A
5 g% I% ?( S5 j

6 R, L8 ~! C) U
1 s2 j, K8 X4 ^9 [& P0 G6 O0 j7 K. v- f. \1 u2 \
( F4 H& T- G4 Z, m. j

' A: h$ b! |8 E" G! l
9 M1 |* Y4 F' E3 i- p0 J8 g$ @9 }7 [) G1 O7 ]+ q. Z; t, r6 H

# U' ^7 Z/ ~5 B. w. M0 K# z8 n0 l+ L6 J) `) W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. a- g' `2 H: V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 N' @5 b' |) o+ H9 a4 L" q(不过疑惑的是,为何单独DSP仿真就没有问题呢?): X7 J" b$ _$ F$ R5 X

9 u- N3 c4 a1 _0 P7 A6 t是不是需要在DSP.CFG中进行配置
& Y9 V5 H: V2 y# k我现在的配置为+ c+ n, E& E" c0 i& h- ^
5 l7 m8 ~8 {6 x9 I7 q7 [
/*- {' d$ [/ K8 l  p$ i7 [
*  ======== Operating System Configuration ========
$ l0 E  w, ~' N( V */
! ^  v% N& ^3 P' I  X! b
, p* _- b' L( y$ X- w. a" f& W; b/* no rts heap */# {8 q. V" K# t) @& S8 N
Program.heap = 0;
! P6 `1 t5 k/ V: iProgram.argSize = 100;  /* minimum size */9 c6 j( S$ e) l3 J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' i- }' @. m) a2 f' A/ j; z8 R7 R6 G' W- e' S: t
/* create a default heap */- A9 b; l* S1 u  c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" E7 i; U9 U% M4 Z3 q" `6 lvar heapMemParams = new HeapMem.Params();
& G, @3 c8 i3 _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 ^" M, ]8 g% v+ X. ?8 x7 I1 ^# ]8 ^4 F2 E
var Memory = xdc.useModule('xdc.runtime.Memory');
3 b" E  `1 B1 O+ f0 E0 d# T/ `' kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ b7 U# @+ v' i

: E: Q( p, p- c: B9 y$ h/* configure System module *// P' J" D1 i0 X. T: C, h( E5 ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');( a+ R3 K) H# V7 T5 g; J$ C
SysMin.bufSize = 0x1000;
) r- `, |7 l# f9 m# E' {SysMin.flushAtExit = false;
0 F$ \/ t. |3 I! D& c$ R. w, U8 E& Q  r0 P
var System = xdc.useModule('xdc.runtime.System');
* z, c/ J& ~3 Y) W- PSystem.SupportProxy = SysMin;% F$ B9 F5 q; q( t5 S
; ]+ D( `& b, r% S! t
/* configure SysBios to use the lower half of Timer 1 */
3 K" d2 q. f! D: Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 u! n4 H5 K/ H, I) Q( t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' r; b; c( d: z2 o9 a- q/ V
Timer.timerSettings[1].master = true;
. \6 n! Y: z2 R: B, ?6 F$ J- I- xTimer.defaultHalf = Timer.Half_LOWER;
- `. _- a8 ^. H/ LClock.timerId = 1;0 b9 |5 S8 W- [" x( q1 W. g
  A/ n' e6 G7 @& L; P
3 K. W* B. P' W- d0 V& ~, z
/*
8 V  \# i- `6 |4 _8 t" O *  ======== Miscellaneous Configuration ========2 ]6 E* ]7 Q& @% D1 A8 t
*/  M6 }- y& ]: ^( o5 [) C/ X/ ~! _

8 o6 B! c  J9 y# K' G; m/* set default diags mask */( K/ m7 Z. _$ ]! w1 ~
var Diags = xdc.useModule('xdc.runtime.Diags');
3 \7 |/ ]3 J6 Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 P2 b& k& g" p7 L3 ^- X5 i, y* O9 L
) B% `6 U0 }$ V) b, ODefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- U$ ?, @0 p; N4 w4 x8 zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, t4 L" B( E: y& h, L( R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' C; T# H# \3 ]# l# o! H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 C- y* ?% @  r. |7 u8 Y" p3 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! `! b1 z" N* `% S3 N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 h+ v  r, E# d) A+ C6 p) F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' y2 z5 m1 e) t$ O+ A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 ^7 f: Y( \5 I7 h$ }7 ]/ a( W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 I+ E# w  B/ nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 r; t% i: d* h2 \/ i1 g% [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# K; e% P  t- gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' m. n/ g4 G' w1 `- N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 |, L& I& J$ j! Z( f- ^% bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; E3 _3 y( L0 x" |/ Q
, [( m0 z" r5 o# S) c/* override diags mask for selected modules */
7 w6 L; j; E* h8 n' ?8 ^xdc.useModule('xdc.runtime.Main');! i; z  o, j4 y; `# E  Y5 ?
Diags.setMaskMeta(( ?8 q* u# o+ G+ N7 E
    "xdc.runtime.Main",
" f. |6 Z. g- b0 }! L    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. A! D/ K2 A# v    Diags.RUNTIME_ON
  O) [4 a8 Z! R; K);) o* V7 t; S# p/ ~4 l; z6 |$ X
7 n4 t6 x- b" I' r( e
var Registry = xdc.useModule('xdc.runtime.Registry');6 l+ X7 g6 b" o( x. f& P
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 z8 L. D/ B* uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 P% x; R4 H! B! D6 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: N6 }- `" J/ P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 `1 l9 ]8 z. b$ ]4 u: L/ M# _" x( H& `
/* create a logger instance */
2 q: V1 _- X% Y" \1 wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ h/ q' H" _7 F+ V) n0 {+ i# f& u
var loggerBufP = new LoggerBuf.Params();
7 O: \8 E8 F) w- ^! U$ ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ K* ^6 ~+ \4 r  T; q) a$ P/ l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 y4 ?9 W  X# {
5 r2 c; B* G; [3 s# L, hvar appLogger = LoggerBuf.create(loggerBufP);5 E" Q. @; B' j4 X+ X; Z
appLogger.instance.name = "AppLog_Core1";
8 P! R# A& C9 ~1 Z9 U6 K& U7 EDefaults.common$.logger = appLogger;4 z! K- ^- W  j& t0 ]  y
Memory.defaultHeapSize = 0x8192;   
/ ~/ p, ~; s6 E4 |! i: L, vIdle.idleFxns[0] = "&LEDStatus";
3 c1 w" G( L" k* T) P" QCache.initSize.l2Size = Cache.L2Size_32K;
! v5 X3 [9 o. o2 O6 c9 A8 A. M
' t0 F( T5 y/ `2 ?
回复 支持 反对

使用道具 举报

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 */& g. ~1 C& p6 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& M  a0 S- i9 r6 f( Lvar heapMemParams = new HeapMem.Params();
* ?* q. Y2 _! O9 o, I* j/ M$ `heapMemParams.size = 0x4000;, v5 y: `; ~: _
2 `1 ?' Z" l% O" q8 L
var Memory = xdc.useModule('xdc.runtime.Memory');. R, |7 Y; u+ Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 l) _" z1 \1 _, M

: p! ?- m# u3 F, }我大约calloc  每次共计大小为5K*16bits," u) q$ V& [* x
而默认配置才0x4000、需要改大。% j5 Y( ]  a  W
7 k( p' N. b% v# v4 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& y$ {7 q$ Z+ D* b( |" J; k, ]* c
Program.heap = 0;# a! r, p; P+ [
Program.argSize = 100;  /* minimum size */
& y: e& S6 p3 }  w+ f- y/ Z1 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-25 07:05 , Processed in 0.041655 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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