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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ i6 b1 y5 W9 ]5 s6 a" L" U, o) d  _" E9 }" `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( F1 L( N  L$ X; \- D* U
. d1 m+ |7 y. x4 Y+ o6 h8 O
其他程序段。。。。。8 e: r6 k7 `+ F5 ?  m% \) ~1 r

! h8 G2 Y5 H" B  A   free(x_d);
& M8 `! ~4 c$ y" s6 O
( G, w# T8 H; V1 P3 K! @4 a使用DSP侧单独调试功能,验证动态申请没有问题,
/ q! L. M) I# a5 ]! Y% q3 y3 D8 m% S: I0 V: c: V* t. m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 ?* m' C* I0 V  z4 O8 }
. O& M; F* l. W# Q, M! {2 p

- X3 X/ U( \( p# }9 ?+ A: F
7 M2 H, W: _) z( L$ e. ]* ?- v0 G# ?! o. N2 ^0 C( n

  O: k8 F( Z6 h7 R9 a. C" j- Z9 u2 c& f
/ d" z6 r8 y' l5 K9 }2 w
- E) n# Z" I* o& @. J8 V, ^

0 C; f2 h( r. I9 p  p2 n  }6 t; _7 D/ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& D3 y0 V# W! a+ B: }: l8 X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' K' G" X& f8 c8 \; t( ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, S- F7 a- }2 Y8 \( q7 d- G" f6 d
7 z0 @. W7 ]4 l$ E
是不是需要在DSP.CFG中进行配置
  m8 d# {9 ]( M+ E  D我现在的配置为2 K3 B) Z& J/ l8 v

" G7 @" {5 C; Q& Y3 J6 S  H/*1 R% @! {0 a+ {
*  ======== Operating System Configuration ========
; [, ~- x0 p1 W" d */& _* J! C3 k/ r/ W
" H/ |3 j& H4 V9 q6 ]) z) `
/* no rts heap */
- S6 j4 g% W- tProgram.heap = 0;# D3 P  b& M3 V- [+ w, U
Program.argSize = 100;  /* minimum size */6 ~3 ?. o$ x4 ]2 ~  x* {2 U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ t2 V! c# }& `6 v5 b9 H

: k* |; j) e. D% m& x/* create a default heap */% B& u; E9 q+ S: K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ [3 S7 S! V6 p
var heapMemParams = new HeapMem.Params();
5 E6 \# q9 d4 R/ N- jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 X! V' u! J$ h- Y. ~: c( ~8 p) i
var Memory = xdc.useModule('xdc.runtime.Memory');
" Y# x4 M: D2 H3 I" O; ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 S1 ?. M, V, ]- q0 x5 S9 o

& }0 ^) i$ R& \, q8 q! _/* configure System module */
% Z7 N( ]- S( U: m/ dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
5 q' n( W, t' D$ J6 R/ }" ?' ySysMin.bufSize = 0x1000;$ ~: c, t4 q: M8 ]) `
SysMin.flushAtExit = false;
1 ^1 J$ r) K4 [) _5 z) X
; g9 q, f1 q+ }7 u$ w+ Dvar System = xdc.useModule('xdc.runtime.System');, l, R2 L  {/ K: S# x
System.SupportProxy = SysMin;: S1 s( J6 T! ?. D* J
0 r0 |& q; ~5 t, s
/* configure SysBios to use the lower half of Timer 1 */! @9 n2 k% Z  S3 ]8 i( \0 o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# O% F* }( I: y! G* nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; Y. |5 N1 i  v. f
Timer.timerSettings[1].master = true;
0 }$ t# v: Y/ ]: v  MTimer.defaultHalf = Timer.Half_LOWER;2 H  a8 F9 i1 {+ z- |: j
Clock.timerId = 1;
4 J9 Y% O; V, D" s; P0 R& B9 z$ C" D) t
, }0 I* g/ S& k1 T, @$ |
/*6 }; c8 B. l2 m
*  ======== Miscellaneous Configuration ========  c& k8 A6 i5 P/ d. l- g
*/
9 V) _( I0 H/ d: Q9 q
/ u0 V5 F1 p  H: @$ E  J/* set default diags mask */5 d4 L9 a8 N/ c& z! v
var Diags = xdc.useModule('xdc.runtime.Diags');. E' S! g( ^. u% [  W
var Defaults = xdc.useModule('xdc.runtime.Defaults');# F1 e( c1 C4 ?7 ?

5 a) \, g9 {/ f( Z# @( nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' m, V3 K& L0 k; \! fDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& U2 y( N4 X0 c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: V  g; U; m2 t; IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// f' J6 [' @* x6 k+ f3 R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 m6 `, c; W& m& J$ K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! \# T& B" p6 S. U; SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 ]3 M2 t6 F7 O' l( J5 h1 z: VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  w  }# {/ j3 E$ |. sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 R$ u9 j$ }) A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; q' C: Y2 F4 A
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& Q9 d; N3 k4 i$ l3 P" QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% h) d. u6 U7 G! A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 l7 G1 s' z# V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 L" }' E) J# U" v+ Y# {: t
' s8 ?# l, m) A( p) d
/* override diags mask for selected modules */3 P0 r; K( V9 E, [7 F
xdc.useModule('xdc.runtime.Main');
: [9 l& z9 n- N+ c* p: \Diags.setMaskMeta(9 J9 D9 T& e' g' S/ r
    "xdc.runtime.Main",
; s: x$ u8 E% _& L! x2 U; G9 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,' G. c; k2 @1 j4 Y
    Diags.RUNTIME_ON
* u% l1 A0 a+ Z);) F, V0 S9 v# @9 \

* y& y5 R+ \$ W3 }# K9 M( g! |var Registry = xdc.useModule('xdc.runtime.Registry');
$ J* C5 `! S5 t8 g5 ?) IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: x/ i( b( Z# [( t, M; ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( @; e- S, q1 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 j0 s, y0 C7 j# {* e; A& o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 t7 s1 |: P+ |4 W5 W
5 Q& `& ^' ~0 C- G; G
/* create a logger instance */- _+ S4 ]0 A+ c7 u8 {# L" }* |: Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- m/ g% x( y. u* {, gvar loggerBufP = new LoggerBuf.Params();
% P2 W; a9 K- j3 ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 T* x2 B4 }4 T2 z- W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 r. T5 l' Q# a. E+ A5 K
; q4 M$ _$ Y; U6 G7 b8 y
var appLogger = LoggerBuf.create(loggerBufP);
. B6 }" R0 R- b% m. tappLogger.instance.name = "AppLog_Core1";
7 A  `; R) T& i( y5 mDefaults.common$.logger = appLogger;
+ }. F1 f8 s& u" C% T! o7 p4 A$ gMemory.defaultHeapSize = 0x8192;   
3 t3 M5 Q7 ]: B$ I( E& QIdle.idleFxns[0] = "&LEDStatus";
/ o. e3 C, N% ]Cache.initSize.l2Size = Cache.L2Size_32K;
. M. B7 q# v; \# \* ^# y. k3 x* k# m. q3 K  v. p! E
回复 支持 反对

使用道具 举报

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 */8 Q* w* R3 J1 @/ P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 M# E6 y; j/ H" u( i
var heapMemParams = new HeapMem.Params();+ C2 m. N! V9 C7 @' w
heapMemParams.size = 0x4000;3 s) p2 Z/ a4 E0 R5 X) \
& D" p! J- b* J4 i& z# J3 J
var Memory = xdc.useModule('xdc.runtime.Memory');0 W- G6 n3 T3 s6 {$ ^* ?- z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& d! V& i$ H' [! S
) L* o) ?) d9 n6 b. |& |% @我大约calloc  每次共计大小为5K*16bits,
9 `* K3 I4 N+ ~  t2 s而默认配置才0x4000、需要改大。
( H& J2 u. q7 j. u
- P- X5 x6 `) G6 K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. a) E- n  l! i& h6 AProgram.heap = 0;. O+ i2 b# v8 A4 M  p! V9 {1 e; f
Program.argSize = 100;  /* minimum size */
- `' z- h# |8 O, P/ ]( fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 15:52 , Processed in 0.041132 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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