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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 t, F+ k1 B" M8 x& u1 x

! u- w% H# z1 K" U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! F- i7 g. j: }4 T, V8 C# R" M0 z. V6 T6 y
其他程序段。。。。。
* h1 U+ n* C) f5 g6 G9 V! \
! `* h) C9 _6 X   free(x_d);! M; m- T/ S! q# T+ X! D! N6 S- V. k4 C
6 L( u. A* s! a# |! J4 [) y) i( T
使用DSP侧单独调试功能,验证动态申请没有问题,% a0 S7 F* x2 C9 K! `7 p1 @- p( ~) D  D
# H$ b2 X& |9 O8 o; m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 J9 n" B% o- W3 n0 W9 B+ Y+ c

" q  r7 C6 u! l7 M) I/ _' i+ }, ?0 L6 T" o/ k3 g  z  r* O) u
. i# Z/ t# q0 b- V

9 @/ S* z, }1 _& ]; i- ^
) e$ W4 \( |* \& S
9 Y8 T' j$ X! e
* k8 z6 I$ C, ~, O* B1 S5 y1 X& n) z9 D2 C7 x$ u' @" y: x( L

9 p$ V% y7 O# [) S3 |: a
  W- D6 w) U. d. @  W; S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( j% Z7 u4 H( l) ^# i9 S+ _( D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& b5 V: W$ T" X# P. |4 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  c) j( A( p2 n

/ i2 z  O; q; H, D! {是不是需要在DSP.CFG中进行配置
% L) V7 Z* ?1 V7 t$ F6 ^我现在的配置为
6 G; U; w) R7 y) B) Z
1 ?: y( _# }& B+ r# x0 \/*4 U, {7 W& m7 ]
*  ======== Operating System Configuration ========
1 g3 ?  _8 \3 L3 R6 H9 ~8 K8 L */
& K7 w* _$ b  C1 e! _, M' v* E3 B' Z2 @0 ^) t# A2 _9 E% L
/* no rts heap */( e" ^9 C- Q- x0 N, U
Program.heap = 0;
9 T* u  e5 c; I9 l. @2 O: HProgram.argSize = 100;  /* minimum size */
6 I) D: q$ ~, d3 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' o& [/ t( t# S" C1 Z5 B# k. K4 [
; t0 D! }& f: s4 H$ i! z
/* create a default heap */& j; G: n( S* b6 n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. t1 i8 F& t- ^! ]
var heapMemParams = new HeapMem.Params();  ^# e! a5 }7 z# c$ v+ ^' q1 R! @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 }( ]& ^1 E* y- F
2 ^9 W0 n8 v( }+ q# [2 {% O
var Memory = xdc.useModule('xdc.runtime.Memory');
/ Y3 o4 |( F3 ^. C1 T7 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 @3 F" l1 D2 R8 w  u3 d3 R; a

; B3 P0 Q: k# t/ P4 L" c  E/* configure System module */( u$ A4 O2 m- @2 X0 d7 ]. S
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 b' f  a3 [1 n1 v: X! B7 XSysMin.bufSize = 0x1000;% f8 @( `2 C; D: i( ^$ o
SysMin.flushAtExit = false;
( j8 ~$ N* Y9 d% c5 ^7 I7 w  A8 c; R/ X9 {
var System = xdc.useModule('xdc.runtime.System');& Y5 O6 Q: x: z- l1 V
System.SupportProxy = SysMin;
  ]8 ?! t! T8 a8 Q; D
$ g0 t+ l; [# O. G+ u/ w/* configure SysBios to use the lower half of Timer 1 */3 {: j' L0 q: p2 H% m6 F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 g- K% o* l6 F4 I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 l" z  c/ g  k! M; NTimer.timerSettings[1].master = true;" a. [/ {) b) U+ N; Z8 w2 B
Timer.defaultHalf = Timer.Half_LOWER;
7 H. A# E6 L' d" m5 d. R$ n6 PClock.timerId = 1;: U8 [4 d2 k7 @& W+ N# q
; [9 d+ \% B3 d) H" S' ^3 p

9 M+ z: r/ _: H7 ~$ h- o  \* J/*; d4 j2 v! J5 w( ~1 G
*  ======== Miscellaneous Configuration ========3 |% ?; Q$ n* O
*/
5 O! a1 p& ~! T4 m" ]& U" {; _/ r4 z) t# v8 c' ?
/* set default diags mask */
/ _2 R  q; x4 l: {1 Ivar Diags = xdc.useModule('xdc.runtime.Diags');
; H" ~9 G# F; V% R+ g7 `0 {8 e, rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, o7 H, {+ [2 Y4 M8 R8 \
2 B9 y  V0 h" m" }& P3 ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, c: N) z5 A2 B8 m; u8 e; d. v8 XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  ^0 R; c+ J' v
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 D# |6 ]+ i6 g+ G: k8 T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% Q! ^& }6 J$ x$ U( @6 b/ v& gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ h7 ]9 |. m* Q0 u0 A( CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 P( ^& S& g/ E( V7 e! F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ l1 B4 @1 f8 o- I# D1 a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ h' r3 \& a' @" k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 h, B  H' [/ i7 l' N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% _+ ^0 |! E- q8 n' D9 A, y6 c1 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 ^- @3 ]; f8 ~% Z( ~7 i. s, K8 x# _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ _2 v* y! |7 e& j9 q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 f" j% ?7 l% G! U- @3 G4 H* k8 xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 R5 o# |& g; u& z5 {9 S
* H" @  {: g. E5 y0 ~0 B
/* override diags mask for selected modules */
" S! _& Q% B; N5 ]" i7 w, r% Uxdc.useModule('xdc.runtime.Main');
) J3 y) f. `' qDiags.setMaskMeta(
% K, r' v+ r- H; r    "xdc.runtime.Main",
3 R: M% A5 |9 e& e    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 Y: `& u. Q4 g% Z3 u    Diags.RUNTIME_ON- e3 k; Z0 Q. j
);
+ P* v: b/ N8 p8 \2 p' \+ o: l* X4 Q! h  d" o
var Registry = xdc.useModule('xdc.runtime.Registry');2 T3 y( X1 v- H. `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 E& c/ n3 s+ t( n( {9 RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) w1 k) c5 z0 ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 o) z6 N+ @( ]% c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  p7 f' G* G/ y1 a4 u" m6 u) X
8 X& B. l, r& c" F
/* create a logger instance */
  B3 j. u  @% [7 Z3 H1 N; ?6 d- cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& o; N2 Y4 R  a  }2 P$ t( e. |: }
var loggerBufP = new LoggerBuf.Params();) K, ^" M7 z2 _: z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ F: \* }: l% e5 w/ }+ o' A8 E$ [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 Z; {* ~; y) G6 o  Q* A% N6 x# S% g& W# V
var appLogger = LoggerBuf.create(loggerBufP);
5 U$ W* x% H6 R- z  T; e' |appLogger.instance.name = "AppLog_Core1";
) D$ v; c- ?, N# E( @Defaults.common$.logger = appLogger;
1 h; N0 ?) E5 J# nMemory.defaultHeapSize = 0x8192;   
& x) ]9 W" A- f8 ^% W1 ^Idle.idleFxns[0] = "&LEDStatus";
( U! i* i  C  }9 ~3 V( b# U5 f% Q% CCache.initSize.l2Size = Cache.L2Size_32K;
6 H: l6 D0 e8 u2 \
9 b( k1 j/ B1 N0 `- O# P4 w
回复 支持 反对

使用道具 举报

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 */' q/ ?  D  m8 X( J* [( |, R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. R( o- H4 A/ ?8 N9 K
var heapMemParams = new HeapMem.Params();
7 _* ^* Y4 h  F, n8 N7 g8 ~heapMemParams.size = 0x4000;4 u5 \# R1 ~. v& s, G% \6 i

) X( ]" T/ p) Y3 G3 t2 }& B' _var Memory = xdc.useModule('xdc.runtime.Memory');( |9 |" A, z% q+ c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 f5 X5 O3 B# C( B, n1 I9 l
& c2 F9 L) F3 B3 n7 @! P
我大约calloc  每次共计大小为5K*16bits,( z. R4 Z- u4 ^; f
而默认配置才0x4000、需要改大。
6 L# \2 A% V3 r; i6 s4 b  t! t" M6 _7 A- ^% y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  g& [: D! @) z, p8 ZProgram.heap = 0;) s) m, }( ]  ^. O* }; Q: t
Program.argSize = 100;  /* minimum size */3 ~" m8 D. |4 S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 07:55 , Processed in 0.042604 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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