关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 h& ~) r7 F. k; k3 g$ z' ^
- R* A5 G2 s0 M# K# V  d  Q$ o$ [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; I" {- Y6 X$ R7 M+ A
/ l+ t0 S& k$ H" L8 U, c2 B6 l其他程序段。。。。。
7 U6 w* i! K9 h0 K: Q% U # l; ?8 u/ E7 k4 |, K' e
   free(x_d);4 s7 U8 {% b9 ~& o" L5 ~9 n
1 ?: W1 S' g& J# A3 Z, ?5 C" j
使用DSP侧单独调试功能,验证动态申请没有问题,6 E. `* s; T% O! d, _; @% j

2 ]+ Y. y. C+ V8 S/ {! o" L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 v9 {( v0 k' U; l3 Y" e' U
) M5 G- @6 m8 _: e7 F' j8 K8 g
3 t4 X8 m2 n- T+ j  x

3 H5 S  F% E' b) ?' q' T7 i* |; A1 v1 `0 g& z% M7 V' X. m" I$ ?# E; o( j

9 O4 }: B5 u' z, H. K2 J4 o6 O# |4 v' @

1 m/ a: r2 t' I! O
- O# K7 D& ~% ]+ m1 k6 y5 l& `
! u/ q8 W! k3 J* |$ o, q, ]4 |# ?7 C% |% |& ]9 J# e" K% Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& ?% H! Y6 c6 Z* r; @. U* F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 b6 l6 @0 Q- ^9 B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- O  b3 N5 Q3 u
, c' W$ `9 D* v+ r
是不是需要在DSP.CFG中进行配置
) M; ^) K9 v8 a我现在的配置为
6 i% X. o+ o+ s' _/ s$ ^! K, `) o
9 ]5 |) t1 ^' ~8 c/ ?( E/*- ?7 [% O+ z2 L# R4 n( S8 o
*  ======== Operating System Configuration ========: `4 h/ j8 S9 B: a9 e
*/
' P; ]& W2 J8 p$ @$ D$ P4 M6 A7 M
5 A1 h7 H8 I1 W& Q# q( E/* no rts heap *// r' \( S% l% l8 d' O' ^9 \6 f' i
Program.heap = 0;7 k. X! Q2 V& m, r; h' H
Program.argSize = 100;  /* minimum size */
- a& y6 D/ g! K. j$ c+ P2 y) `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% |# x( K& l/ W5 Y( M: R& k

* X8 {, J% k$ g# K2 f/ G/* create a default heap */  Q& o' ~- k1 l  O0 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ `! v8 o+ R2 S/ ?3 b$ M) g
var heapMemParams = new HeapMem.Params();/ d" `' W' ]  i; J" }0 X* T# H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 I, a$ h# ]% T. d6 ~8 w

4 a8 x( [8 M* S! |% j
var Memory = xdc.useModule('xdc.runtime.Memory');8 S+ u% f- O. O2 S# y; O. w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 {' E7 o4 ?3 ~; d) N& {9 d+ X; l2 `/ P) l
/* configure System module */' ~: T7 ]* I  w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 ]7 A; Q% ?6 Z2 z' JSysMin.bufSize = 0x1000;( J. A$ x0 A) C9 |0 o
SysMin.flushAtExit = false;1 n2 F0 N% j( \& A2 P4 n
" I( V1 d1 l' G+ i. L
var System = xdc.useModule('xdc.runtime.System');
8 B7 n0 W  R8 I; P4 K/ `System.SupportProxy = SysMin;7 o3 v% w7 ~- h/ U: l
: J6 h* t0 M5 O( O# H
/* configure SysBios to use the lower half of Timer 1 */6 H% i* @+ G. D: \- S9 ]4 \
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 Q  Q$ J4 k$ W/ k2 Nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
. i/ g, }3 j; U4 a$ _Timer.timerSettings[1].master = true;6 z: @0 w4 M2 G  E. k
Timer.defaultHalf = Timer.Half_LOWER;
& `/ H! F% D# D- vClock.timerId = 1;
5 F8 F. L' L2 v( `* Z4 f( M  k' h& s8 i6 B8 c

1 s  B: ~' ?7 @0 P! H/*; x8 q0 y% A* D, E- \
*  ======== Miscellaneous Configuration ========
2 V  J* ?9 d+ S! z3 f2 c1 _4 i */& }7 ~0 |% ?; I

6 U  K, ]( w4 a/* set default diags mask */3 X% \+ \( ~7 \7 e. _* C' K& R
var Diags = xdc.useModule('xdc.runtime.Diags');
0 |1 x; u/ c% l5 u# a" avar Defaults = xdc.useModule('xdc.runtime.Defaults');
  d3 `, K" g5 u* @* y, ]% Y9 i- D: u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 Z/ ?" N- F: a  G8 ~) nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  k9 \4 A" O, V9 s" ]/ _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 n6 j  t' t$ VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 X, R- X9 C( e+ {$ |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- h& ~0 x% B3 Z- Y* Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 L0 s8 f7 V( C9 x) a9 R- |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 Z( ?- C) @8 X' ^# v9 g$ V2 wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 k7 Q6 d- M5 s4 W& xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! ]9 Z  Q3 k5 `) g4 K% H0 X6 `/ H' BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; s& Y/ d' t2 H7 dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 E3 X: X1 \) I, DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ Y+ E$ A  ?' Y7 i4 C0 t2 BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 w4 P2 @: b" F5 D. n, M$ E8 L* |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ t+ ?  H% m6 L$ {3 Q
% E& B9 I8 _0 H/* override diags mask for selected modules */
4 r5 E6 i+ t/ B  e# X) J9 pxdc.useModule('xdc.runtime.Main');) Q+ [% d5 N3 K; {0 w) Q3 C: u: U
Diags.setMaskMeta(
6 V# ]$ c5 p: n! x% F/ L9 t7 M: A    "xdc.runtime.Main",0 m( _6 m6 W4 C/ s2 @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ r- w0 [( d- r" c    Diags.RUNTIME_ON
9 y$ k* P7 a2 j);
# s8 B! ?+ D6 W) u  {+ z$ Q9 Q9 L+ R' z# W0 e
var Registry = xdc.useModule('xdc.runtime.Registry');
2 Y' \1 a( N* I! G; MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 m' V" L$ b7 H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" G" \" v5 V4 D, L3 |) g  P8 h5 i, `) R, |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; p, J, M6 K% E1 r0 H* L4 i( t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# b3 W9 M4 x6 w/ h0 ~/ X# d
* v' Z$ C- K* B( p; f' @5 }/* create a logger instance */- b  c7 E5 y: }
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! a  G' {& C) Z) d3 B
var loggerBufP = new LoggerBuf.Params();
4 K6 M" N) ?5 E" @0 y" l8 P% ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 x! e( I+ T4 v$ o" O, p/ m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 ~1 R" B7 X. n. Z/ N( x6 b

6 n* I/ T' H" rvar appLogger = LoggerBuf.create(loggerBufP);3 S' k# B9 M+ ?4 G: h
appLogger.instance.name = "AppLog_Core1";
6 S" m6 t( k3 B( ?& BDefaults.common$.logger = appLogger;' m4 v- K: \. u$ L# v, `/ ~( E
Memory.defaultHeapSize = 0x8192;   
, O- \% \3 y) c5 f+ dIdle.idleFxns[0] = "&LEDStatus";
( {. t0 c3 ?- {Cache.initSize.l2Size = Cache.L2Size_32K;
% M* G6 p: X7 C. V' a  A: Y" x3 M5 [. |
回复 支持 反对

使用道具 举报

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 */
: v0 S6 d  g, L$ M1 c) o: uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 b4 n9 C) K* b8 O& uvar heapMemParams = new HeapMem.Params();
+ O' v' A2 `$ }% w/ {heapMemParams.size = 0x4000;/ p" ?6 B) T7 y& L- N

, E* B, J- `  h( q* Dvar Memory = xdc.useModule('xdc.runtime.Memory');
$ o5 U; b: }* G. e8 ^4 Y# ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 `& S$ N# m- J6 w, y
& ^' L- \2 w' ?5 C- V我大约calloc  每次共计大小为5K*16bits,. p$ y3 V- @8 ?. F
而默认配置才0x4000、需要改大。
  h2 Y; ]" z$ U( }  b$ U* P/ ]$ e3 L! W* S5 R; @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* y' H8 E0 z8 ~8 G8 K0 [1 d
Program.heap = 0;
, X4 t* F; T$ d' }8 ^  e0 d/ EProgram.argSize = 100;  /* minimum size */$ q( C; n5 R3 l4 O7 r1 F1 D1 P
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 19:44 , Processed in 0.042213 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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