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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 v4 B0 L) O) d: O* G( N0 c5 X" j& h  @% B' m+ J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( `2 @- h, v7 ~' n0 V) W8 U( s8 f. v8 j; U" N
其他程序段。。。。。
. O, B- [, e& j9 V2 n ! d  D! Z# H' o* }( Q
   free(x_d);+ ]* k. }; F+ V0 {8 A3 h5 t2 t  K$ P; |

# d0 t: Z; D" |6 u. D使用DSP侧单独调试功能,验证动态申请没有问题,
3 B& N7 j  S- W# p; h
7 ]1 P5 _5 k% ^* p/ v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 B7 V2 ]" j2 ?: e3 U+ `% _
7 y' [6 R6 t% ^
3 X, B- P0 q& |5 N9 v  V0 h2 X
3 M. A3 K! Y5 k6 W& z* c- {

7 U+ |* X% D  h4 k7 m9 }8 n" t* {% n+ D# M6 q9 e4 k
5 V6 f2 A/ O; c0 |6 ~: e
, V; a- ~$ B% i  r# b$ e& e# E6 r

* c! ~' C) `: d' G( S4 C. x0 ^( h6 K1 y
" ^% R8 e; n3 A0 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' u- [" j  a$ E5 J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% S% v( G  A4 H, e$ x8 O( e/ O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' v1 k8 C" n5 `: i) Y, R
  l; q; V1 J4 _  Q# T
是不是需要在DSP.CFG中进行配置# U! K- p* n  c* w0 [. Y
我现在的配置为
( e. `7 l* x. S$ p/ ~0 d( K0 L
2 [- C- x' Y. ~( {- p; z$ `' b* ?  d/*% M1 h' l1 ]. W/ R8 i
*  ======== Operating System Configuration ========. @2 ^) l3 U% _" A4 O7 j/ ^7 _0 }
*/
: v- D9 M0 j1 U8 u, y
2 y4 ^' m! ~" e/* no rts heap */
  w0 X- h  Q  XProgram.heap = 0;, U  x( |# Q& R( ?& J
Program.argSize = 100;  /* minimum size */: O# ^# V+ F1 f* Q9 ^3 @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% L2 F/ ^' g- L/ }" h, U& M

# O" W8 h4 c  _. B/* create a default heap */0 i! V  S# |: h) K& i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' m( M0 D( g7 ^" D7 cvar heapMemParams = new HeapMem.Params();# J# Q2 [* Y  w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ H+ D$ W/ u8 j: h  Q( H1 l
, j; f- L' R" g5 }
var Memory = xdc.useModule('xdc.runtime.Memory');
2 }8 t" |3 U5 k8 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; e% t% d5 b7 p

: M; E' t) g! U2 @6 Q/* configure System module */
) C3 B% r6 T1 ^( D3 @% H( @var SysMin = xdc.useModule('xdc.runtime.SysMin');6 c6 {! r  q8 v
SysMin.bufSize = 0x1000;; F: Q# `7 \# |. o
SysMin.flushAtExit = false;2 s- h+ D: N+ P  R( N7 T- V
. W) a4 W1 h0 I' \8 Q" x2 S& J0 O/ U1 A
var System = xdc.useModule('xdc.runtime.System');
% F! x  ^8 U$ f+ ~1 j* G9 OSystem.SupportProxy = SysMin;+ h! D; E  r8 g- g9 N5 D
& ~( p5 o. e! P) K  W4 [7 U
/* configure SysBios to use the lower half of Timer 1 */
% y* m( ^- H5 x9 ^$ vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 C# c: H. e$ g8 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* b" V7 Q) \+ [) \1 }4 E! s1 LTimer.timerSettings[1].master = true;
2 ?3 K3 a/ i/ K$ l. N% P1 BTimer.defaultHalf = Timer.Half_LOWER;" {2 O3 B0 J5 C$ ^/ p7 H" k8 p* R
Clock.timerId = 1;
( E4 Q2 ~& Y' b- q2 b
' W" L/ {9 N/ g8 `2 y* T# K, Q
/ C- q$ l3 F( O4 x/*
' K9 x% I! n8 \, H/ X6 \* H- Z  x; U *  ======== Miscellaneous Configuration ========4 C5 ^( {3 @) V) Z
*/2 O* E8 I+ p. S  @$ l
9 I/ L; x# |& K: Y
/* set default diags mask */% C3 f6 B; h, r" W6 C! Q( j
var Diags = xdc.useModule('xdc.runtime.Diags');3 j3 H2 f5 {6 F3 n
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: ^3 v& R6 X# e- a
7 f9 o, w! Z/ ~  qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) V5 m0 @& ^( U. C) f5 P- X* tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, v" `: g1 A4 L' H. QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 ~/ F6 q4 F1 t1 S- T* lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 J3 k! g: S3 b+ v8 x! p: w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( D! i  d5 c# l' y! J* EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 N* c( x2 W+ l- L% z; a" M$ Q; sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 T" O: X7 I* M' eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# F4 h8 j* ~3 n& ^4 g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' U1 t  Y6 `9 ]7 P- C3 S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' Z: p! F+ X  W$ k9 L- RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 ]7 q. Y& F3 o. I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! u% }! e1 J$ [: V
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 p9 c, G8 \) J7 p# }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( W" j2 E6 h# s0 n! r" A: N$ d
2 h$ K# a; o' R% e+ F* ~4 Q& t
/* override diags mask for selected modules */6 T5 U$ a% w8 h" f  Q  O
xdc.useModule('xdc.runtime.Main');
1 l% G/ m, H% Y; a5 ^Diags.setMaskMeta(7 Z/ f5 k; \4 A
    "xdc.runtime.Main",2 |. f5 b7 ]9 b; _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 ]* m2 V3 H6 s# ^; N. {, Q    Diags.RUNTIME_ON  |( H/ r( N( o4 n1 p4 B$ I& D. t# M2 g
);
, r9 ?6 U& G" l' n9 l* @/ Q' d7 g* E$ P
var Registry = xdc.useModule('xdc.runtime.Registry');* `( z' g/ W( q: }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ ~' G0 Y/ u; M6 K. o, F; i1 o( P9 F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 N% J: ?9 ]/ Y$ s+ Q: @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 v0 Y+ P8 r- v0 C/ m$ d5 s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ Q4 b! g/ g" j/ E( K0 K# d, W5 r! a& Q9 {9 m4 p/ L& M9 P, b
/* create a logger instance */
" z$ A; [$ }* J: J' H; Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 h' t1 u: ?$ G
var loggerBufP = new LoggerBuf.Params();5 M3 z: t, D6 i! c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' Q# U5 [2 G9 R* _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& H; g6 r% a/ z, x# K3 |
0 U  R# B' D0 g: n5 x! xvar appLogger = LoggerBuf.create(loggerBufP);
$ }* j& I4 X) T* u0 U5 @appLogger.instance.name = "AppLog_Core1";
9 I6 i% Z9 |$ A4 @$ `) ]# M1 O3 {Defaults.common$.logger = appLogger;
) ]* ?/ B% G! A: z2 o2 J6 B1 |Memory.defaultHeapSize = 0x8192;   
6 W: Z7 H8 t; |; A& ZIdle.idleFxns[0] = "&LEDStatus";0 W3 W5 C+ x4 F* u8 g
Cache.initSize.l2Size = Cache.L2Size_32K;. p( ]0 g/ T2 x1 Y: s( j

) Y4 ?( W' J& ]: s
回复 支持 反对

使用道具 举报

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 */( A1 l  E9 u% E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 W$ c/ S: h3 L
var heapMemParams = new HeapMem.Params();: M) n3 ]% z# L6 {5 ^- S
heapMemParams.size = 0x4000;( R8 t4 s' B+ A, V; M  `+ D, y1 ?
* ~$ N5 z4 o& W4 n" ?" _9 F
var Memory = xdc.useModule('xdc.runtime.Memory');" N1 i$ s2 r, k! o  W/ E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( f' K: z8 E- z# q6 i0 ]4 }1 ^/ }( ], O, y/ h2 [, C
我大约calloc  每次共计大小为5K*16bits,
- u; ~' i! c& Z, \- ^而默认配置才0x4000、需要改大。
% o; `+ p- s& d+ t2 @8 ]' A. e2 i3 a: ?. n, c+ s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; v0 l# |9 w% _1 c& k( H' oProgram.heap = 0;
: ]$ b4 Z5 W) i1 b, ^! IProgram.argSize = 100;  /* minimum size */) |3 h3 J. S- {* j
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-17 21:49 , Processed in 0.043343 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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