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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 Y3 [- o' G6 b5 S
7 a! w* \. e4 t" K- }3 F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" ]4 k8 L! N) F

5 W$ J/ P) A; U: G其他程序段。。。。。
8 `6 R8 [, O" [9 ?
8 E8 f: n" w! c6 z2 k+ u   free(x_d);
+ [( C/ Q4 C, d! C- c! z* a& _5 Q- v$ R) e2 I* m% b( [* _- R) {
使用DSP侧单独调试功能,验证动态申请没有问题,
( D* \( H- N2 h: W& y# P( Q
6 Z4 E. v7 j9 N' X6 H3 |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ y3 l  A2 L6 N9 ]' J2 n

1 ]% y' c7 n. D; i' ?# a2 G1 p
9 j& H& l# \- Y, @/ ]
5 x. E* o, I' E+ w% V& V
9 q4 N! J5 J5 \2 D( n/ Y. f! C" l; [  u; \
* b9 O6 ?& K5 M* ?! K
. O1 Z/ r$ a7 L0 f6 K% ^, y
  A2 F$ ?# c/ H% i) e3 c

$ L6 ]+ b# q$ q0 o4 z$ y) D( ]/ s: |; H4 t7 S1 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  F" K; m- N1 B/ _3 t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, G- }/ b7 o! A2 F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 r* t% U8 y8 a5 U6 A# n3 r2 }& F

. d  @; r1 F, K1 N是不是需要在DSP.CFG中进行配置$ D/ z# b/ I$ j) [
我现在的配置为0 h: u: _' C5 }) B9 P1 S5 G

, e) L3 ~' w- i3 f/*
' o- P  v" X8 B" l6 F *  ======== Operating System Configuration ========1 A8 V4 Y- P% @! e, N1 @1 z* x6 T) i
*/2 s) r/ V% j; \9 C+ u9 X: j! T" F* J

+ m3 W0 }# P# h$ {$ o, i/* no rts heap */8 H+ E4 s+ i8 Y6 f
Program.heap = 0;
9 m0 K7 q" ^4 j! B9 o5 O6 Q7 \Program.argSize = 100;  /* minimum size */) ?8 c) ?1 G/ A; R/ y0 L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ C/ ]$ _; @' P0 J1 i
6 V, y$ R. S5 B5 c( S+ R
/* create a default heap */" @6 ?, u% u! Q5 ^" g7 \3 X! t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 e( z# \+ d- j% B+ _( B0 ~( Qvar heapMemParams = new HeapMem.Params();
* }$ n) L' S( R2 h# s& X1 qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  [( i: Y9 v( j8 \
/ E9 Q/ p. K" A" {6 O
var Memory = xdc.useModule('xdc.runtime.Memory');. y) |1 E% i; p, M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& z: Y1 z" p9 e' N$ z0 N/ h
6 m1 k+ `9 S$ k" W/ g6 J8 C1 E/ W5 N/* configure System module */
/ O) c4 E3 `0 c: c+ Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; W5 r  v/ w4 O% u% P% m  dSysMin.bufSize = 0x1000;& B3 l% N4 }2 y: E& S& {. E4 k
SysMin.flushAtExit = false;7 @5 h) ^# h0 w: n+ K

" J$ Z1 }; v; I: |$ K0 c* ^var System = xdc.useModule('xdc.runtime.System');
& f& p7 U' q+ K. B7 t& `- X; ?4 Y4 pSystem.SupportProxy = SysMin;
( o" w4 `; z4 c1 S/ H" T6 f9 w( e* ?  a+ m
/* configure SysBios to use the lower half of Timer 1 */0 ~- `9 l. z0 T( j% @+ D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& {4 A+ p) Y- G1 p& Q% E1 P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 |' Z2 e0 W  jTimer.timerSettings[1].master = true;1 p7 O. A  {8 w3 |& \- S
Timer.defaultHalf = Timer.Half_LOWER;
6 o3 O" ~4 Q) {3 [( C3 [Clock.timerId = 1;
5 X+ b; P5 q+ a  N# I# _; y/ x# m5 v- T& `/ Y, m+ Y
! X! }% p7 M# K3 g
/*
/ D( y* V0 G% K7 I, j7 x *  ======== Miscellaneous Configuration ========
1 b& e! _2 J/ o5 o% }' t* e* G */
$ A. Y1 N$ G4 W) @' i7 p( z7 w) D: _, s2 v
/* set default diags mask */8 ^/ B" x, u+ A9 f2 ~
var Diags = xdc.useModule('xdc.runtime.Diags');4 w; e7 R" i. p8 G- e$ {. m( ~
var Defaults = xdc.useModule('xdc.runtime.Defaults');* }0 M; g/ \& J, u

9 {5 @# N/ A! {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 Q5 I& g" ~* e9 x/ n: Y- d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& ?& z& m- a" @1 z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 Q9 h) a0 H6 Q9 M% M$ S9 C; PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 H% A6 Q0 }. e6 i4 j1 {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 s3 |0 f1 n% Z6 ~" XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  e, r' e& v) C+ e+ uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 U4 ?3 t/ Q: x4 N  pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 j" g( z0 w1 F% O) @5 e7 t6 ?* bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( P% V* h! D  x/ d7 G% {( D/ TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 t! \" u- f' u) h* MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ c; I! X' g! i. j! \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 v- S% v! G0 F: DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 i: V6 z, l  ?) P) V& LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, T6 N' R+ X+ ^  j+ s$ @9 J6 w
" i2 G  U+ x; l; k/* override diags mask for selected modules */! H: ^; r; E# u4 v7 x" k" O
xdc.useModule('xdc.runtime.Main');
7 m/ [# }. P3 C, L  c$ g% XDiags.setMaskMeta(
9 t5 N1 j, ]3 |7 Q    "xdc.runtime.Main"," R; M7 W& F' E. T" `+ ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ F- g0 t: w$ b! v: Y  n6 `
    Diags.RUNTIME_ON
1 }' w* }5 }% \% d3 D9 l! X% @/ Q);% r4 D- E4 Y, \) X
% v. J6 g6 c7 Q
var Registry = xdc.useModule('xdc.runtime.Registry');0 p. {$ _- E0 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 d- F) a- P( n- p9 v; q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  |4 |% R$ H, u# h( F; C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( r6 t1 d! z$ }3 o. @( ]0 \% ]Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ d+ O9 _7 F1 Z! [) {9 S  |- [' Q& t1 ]( s- w
/* create a logger instance */, H* l2 Y$ n7 T( {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 f5 \' R9 C" j. Q5 evar loggerBufP = new LoggerBuf.Params();
$ b* c2 k1 x0 w9 d; u' S, U. YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 w( H& h9 T+ w6 g/ I" H8 q5 @  a9 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 f8 d6 y+ D. B0 O) ~! D$ \6 s9 N3 H3 h3 X7 c/ c: a. `
var appLogger = LoggerBuf.create(loggerBufP);
* d' s, `8 Q2 @* KappLogger.instance.name = "AppLog_Core1";1 t0 G# ~! l8 O9 H# v, N  ^7 ~
Defaults.common$.logger = appLogger;
" d, @0 Y% F3 R9 y7 Z4 M* |5 ]Memory.defaultHeapSize = 0x8192;    1 e& s! q2 o; V, W& Y' t" t6 l; b. }
Idle.idleFxns[0] = "&LEDStatus";
7 G7 s( ]$ Q. o, t( z7 _& bCache.initSize.l2Size = Cache.L2Size_32K;4 m# d" @( G' C" l8 |4 C# f, L. q
. I& A/ y% e5 Q1 e' z6 d' X3 d) u4 K
回复 支持 反对

使用道具 举报

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 */
3 _8 U4 ]8 s/ V9 V8 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ N( t9 t5 I( V# e9 Hvar heapMemParams = new HeapMem.Params();) n  ~$ @$ y* E8 B0 r
heapMemParams.size = 0x4000;
) s+ q' N; F: T  l  c% U, f  ]; g( E- a' A6 X# Z- _% R3 |
var Memory = xdc.useModule('xdc.runtime.Memory');9 H. ?: [+ N1 ^) l; e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# `5 t* z. O  y" N1 i5 Y
& x4 u# k3 H" a# `4 f我大约calloc  每次共计大小为5K*16bits,  f$ I( ^1 r( V4 n  d( j% ~* R
而默认配置才0x4000、需要改大。" ]/ N; }1 u  w8 Z" O
6 I- T% W+ o7 g& _
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 k* L0 P" Q2 v  v/ g. c0 t
Program.heap = 0;
/ g* z( k. m4 Q2 V5 x8 TProgram.argSize = 100;  /* minimum size */
* J. c& T9 ^. d3 D, d7 WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 07:35 , Processed in 0.044501 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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