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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ J! `. {2 v0 u( A0 K8 M5 z- b- M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* I  g, U; k8 l( e
! _" P$ v6 N( q" J8 w# a. t; }7 V其他程序段。。。。。
' i  P; ^7 p1 L+ E
3 Q7 I) a& |- N9 M   free(x_d);( H3 o8 E" K- G

- S3 V( S7 B# x0 g使用DSP侧单独调试功能,验证动态申请没有问题,+ ^8 u! g: h2 j8 y5 @
* S* j* U" g  c( B% M- M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, W' u% x: D; f  w4 ]
% b" @1 v% \' {

' k+ p3 D* y2 z0 f
1 }# l2 j3 p' }" ]$ e* E/ `1 N/ r
7 k. s) l( j4 X2 F- X

% H& L. D& u9 n6 O. B  v' M) `* B, A, b, n
# `% h- B5 V! h+ V. @

5 Y* v2 p6 v5 e) }/ ]' ?6 D- U# t' z
* F" d' L/ i. O) a8 E8 }" b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 a  Z" Y: E9 N% B5 Y6 mProgram.heap = 0;+ l. D% m% J* u3 Z# W
Program.argSize = 100;  /* minimum size */
; j: O0 I1 {! {1 v7 a" l0 hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
- [1 s/ X5 w  w# |( r0 ]6 w$ bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  z% G0 N' S9 q6 w3 A) Tvar heapMemParams = new HeapMem.Params();( {8 w7 _" t8 F+ t1 i( |! ?
heapMemParams.size = 0x4000;/ d7 A8 r8 I3 ~. P$ ^2 u& w1 e

- y- L$ k) u; x6 ]. a  Fvar Memory = xdc.useModule('xdc.runtime.Memory');
' N% v5 ]) T4 h% U; G+ o" jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# v4 Q5 @6 A$ t; h, {  C
' U0 c) W8 o" P1 j我大约calloc  每次共计大小为5K*16bits,
( B* X. D& L# ~6 ~而默认配置才0x4000、需要改大。
$ ~3 w) K; T: V3 T
, g; p  J0 G8 M0 S0 L% C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 ~+ ^6 R- M# t+ I$ Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 l' P8 m5 M6 v1 n0 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( X! i- B/ B. P3 h7 X" t. R9 R8 \; D

, m+ b$ _2 M6 V: I6 C是不是需要在DSP.CFG中进行配置
3 Y8 T8 T# r: a我现在的配置为
8 Y, z8 C- i/ ~; D1 S+ t  b# H) \- Z
' W+ Z- K4 V% s) N: x/*
" L& \1 X8 ]# _  c *  ======== Operating System Configuration ========
. a& k; y1 P1 M, b; ?. D, d2 o: y: y */6 `9 q# S  b3 k9 G+ s

- P7 j5 [$ D5 _- R9 N, V/* no rts heap */
0 y& \. R$ t0 n  IProgram.heap = 0;
% j( b  _1 C9 t7 r% ^1 eProgram.argSize = 100;  /* minimum size */  u8 i& B! e) w1 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& {" H1 N. s) ?7 j4 [7 m, b+ c. i2 M( ?- n3 D* z2 R+ q4 N
/* create a default heap */& q8 d* t- b8 {' h/ B; s. R+ W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 x# }- ^0 J  d/ dvar heapMemParams = new HeapMem.Params();
; o: Z5 ?' i) ^) XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: C( n7 x  }7 ^
5 p! c6 U1 H* N8 ?4 G
var Memory = xdc.useModule('xdc.runtime.Memory');) N* F% ?  h$ E2 Q/ O1 g$ ]3 t; c% p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 {0 F# U% K! p; o7 Z6 n, M, ?$ z0 Y7 e1 b" @6 t! o
/* configure System module */
, h) m. d3 b3 X; ]$ s$ b8 L' j6 Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
& I) L8 Y  \! V- ASysMin.bufSize = 0x1000;$ O( |/ b9 ]% }; K0 i, y4 p
SysMin.flushAtExit = false;
1 n' S$ I  X4 h2 l' D
" R% d1 q0 @3 v+ ^4 bvar System = xdc.useModule('xdc.runtime.System');
. f# P- _1 t- h5 N% H4 |1 z, {System.SupportProxy = SysMin;
& _# ]# S, R- K' Y3 }
* ^6 x8 `. s# L# }/* configure SysBios to use the lower half of Timer 1 */* y2 H2 ?5 ^" q* B7 l5 ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: S( g" M" {: F3 R1 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 g- x2 S& h0 n" p
Timer.timerSettings[1].master = true;) t6 n  c: x; e" q$ H- |) ~
Timer.defaultHalf = Timer.Half_LOWER;9 i1 [7 B9 U9 i
Clock.timerId = 1;
5 j$ E& @/ l) H0 ?9 G4 I1 d
6 ]) K/ B1 e& R* E# G4 H* A- x7 d( r& o# ?; v/ W: D
/*6 y7 ^  @7 W3 y5 `' X% A
*  ======== Miscellaneous Configuration ========9 `! H/ e; d$ }8 Q. U& N
*/% t% ?% E6 g& z+ x: P
8 a' }/ y# {+ E& c
/* set default diags mask */0 w) U. B$ a6 k6 }9 B; n$ ^
var Diags = xdc.useModule('xdc.runtime.Diags');
- S) G" |: h% U* n7 ]. Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
4 a! g8 z! p% X) D. L1 K+ Z; V! ^9 a' x# }$ H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" m/ E# |  Z+ B  m, _/ e- T' Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& F9 T$ s, H/ Y4 w( G2 F: s$ i& c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 A* t$ v8 C* x$ H& G6 CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* g/ s4 b# k2 y7 Z  s7 O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 [- o1 V; K) z2 S5 bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ F( E% b3 ]8 ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 E+ G7 s9 ^3 jDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 u' ^6 i- f# d7 a* q, r/ {# @$ r; xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' p4 c" x8 T- t7 u2 d6 m7 Q1 dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: K8 U/ x7 a% I. CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# e1 z5 k' ]" Z/ [" e, D4 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ Z2 W9 Y: b) J2 ?4 d5 B+ UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 d( d  z) `% L7 c0 ^9 S6 e2 _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 c2 w, [: B* u0 _  P- Q! q

. ]! c% d; ^6 e- p. ?1 O8 ?8 l/* override diags mask for selected modules */2 b0 a9 Z  K  R( e* @
xdc.useModule('xdc.runtime.Main');! _+ a$ V& P# W* `- o! c
Diags.setMaskMeta(( u  U4 ^& t) r6 |9 g4 d& o
    "xdc.runtime.Main",
0 f( e6 Y) l5 \$ J/ P    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ h; Q  T& ^7 p) W
    Diags.RUNTIME_ON/ f0 Y) l5 o2 ^9 q: Z8 e% G$ \
);
3 x6 L. p+ j' x+ j! T9 o. b
9 u- @, [" i, f: ]0 vvar Registry = xdc.useModule('xdc.runtime.Registry');# I# B, k5 F; C  d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 ~  G/ Z/ t, z2 G. v* }) Y6 uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 T4 {& k2 ]$ J4 l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 f' O0 F1 \" T* n- T  J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# L% ?( ]3 q$ F( f1 c4 G
9 o  m' e4 R+ I' Z) K$ K/* create a logger instance */  w2 ?4 L: A1 y  o
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" }. k6 K9 Z2 l# \  x* T
var loggerBufP = new LoggerBuf.Params();- _; y# i# Q  r+ M( B5 c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- }4 H& u7 p  I! w2 q' e2 h- `loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ p* O) p0 k# S7 i3 N9 h8 i' S" [! m6 _7 r. y7 B/ W
var appLogger = LoggerBuf.create(loggerBufP);
" V! W: o% O4 Z! }& o$ CappLogger.instance.name = "AppLog_Core1";; P; Q* b* P" y7 }- _  J
Defaults.common$.logger = appLogger;
; e9 A  S: [# u+ NMemory.defaultHeapSize = 0x8192;   
- c% j4 `* R+ x; JIdle.idleFxns[0] = "&LEDStatus";
1 g; n# B+ I( tCache.initSize.l2Size = Cache.L2Size_32K;) m0 _! p, L) y

' k, k) i* w6 m7 \7 `! S8 ~0 O
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 17:56 , Processed in 0.041499 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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