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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' G% _# ?- [; [$ [& H7 H. p
: w1 N' N5 E( n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  A2 a  d, T; F0 T- [# t) f  R5 [+ a7 E8 Q4 h1 Y- [
其他程序段。。。。。3 a9 V- P) j' `& F# F) X0 G
0 ~4 ^, P# C7 B4 W8 x; ?0 t! T. J( X
   free(x_d);% V* o0 q) K% ^. f# v/ g- J9 Q
9 G$ x  n+ [1 W( i" x
使用DSP侧单独调试功能,验证动态申请没有问题,
- l. p) d0 H& \6 O; W# ?* T- H; m% o+ V4 N! x4 P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) X5 q, v- W1 j4 c
0 ]4 v& H( d: k8 D: y

3 Y+ f% F/ A9 Y3 b# S) @# x! h# S1 D( \. `$ k! ?# K3 |

2 [( a2 m" R4 w- m
% m- @3 |. [3 d# _! j2 L+ J5 ?, t3 u' S
! ^% F1 [9 E8 g1 h) m0 q  Q
2 [4 x. h' x* h+ X3 }8 J8 \  b3 l
( `: N" U6 g) g% G% U% b& a) g
3 ^% g7 h8 N: H) T$ Z: G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 e5 B1 `0 H. R7 D1 X; }7 v  j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 D% p2 U" o( O# B! j(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 l9 A- w) D" |& c/ `+ @% T# L

$ q& ]2 P) f( s6 @是不是需要在DSP.CFG中进行配置
: o+ q1 L1 w6 |我现在的配置为
% q1 {3 W! y  E' m- F, Z8 K& c& u- }3 ]. G& `/ x; J6 I+ h  A
/*
2 V2 |5 n$ i4 c+ P. O *  ======== Operating System Configuration ========
" g4 y/ N: Z) b) Z: {* H; m */
% d2 P3 y: n* ?$ N8 f- z
, M& ^1 }, U' K0 w8 s2 k/* no rts heap */0 p' T( E' P  L, v. w
Program.heap = 0;, W. Y' [, d1 L, \% o
Program.argSize = 100;  /* minimum size *// Q% y' I% b' g/ O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) S6 ^6 {2 d* h: r* Y7 u$ G" Q! D0 C& U5 V( P6 K; G& A/ _
/* create a default heap */
$ t0 T( `" \8 W; ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 L2 G6 x6 J) D8 u9 i2 t  yvar heapMemParams = new HeapMem.Params();
4 c- r0 \: W0 n# p9 u2 R( @) FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ T+ {- z5 \+ t) x
" Q+ w( O- v" q. y
var Memory = xdc.useModule('xdc.runtime.Memory');8 t: r. q+ n4 H. s' R: S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- w5 X7 s2 ~& _! m; D. [3 |" J) E
. Z6 O+ h( V# H; q& d. y# W6 ~, J" G
/* configure System module */! F- l' Q( }# [& q/ n
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' H5 u$ O. j3 X+ dSysMin.bufSize = 0x1000;
% T+ U5 S2 R# h5 V: f) aSysMin.flushAtExit = false;
% w# N  P1 f/ i; l5 G) {+ V3 R2 \9 b2 x7 X
var System = xdc.useModule('xdc.runtime.System');) O) h$ ~/ l# e1 C0 D
System.SupportProxy = SysMin;7 N5 N" X/ u# L2 V
9 R, ?( D3 z/ ?
/* configure SysBios to use the lower half of Timer 1 */
6 |$ {) D) A: q4 r7 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: W3 _. ^" `$ w: K: h/ Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 W% f9 g; p- [0 J7 N* p9 {; d7 `
Timer.timerSettings[1].master = true;1 a2 \) Q: p" h: y& W* ]( v% D, |
Timer.defaultHalf = Timer.Half_LOWER;
4 c( ]& F, E2 iClock.timerId = 1;
+ c/ T: _; {0 S# h6 H) |+ i
) w" K2 X( t& t. \6 g& G" ?1 S3 e- W. A& }" |
/*4 d& v1 l% o% Q/ F
*  ======== Miscellaneous Configuration ========7 u' r; ^1 B, u1 b/ {$ t5 b7 ~
*/% d! q; Q+ ?/ L- J& k# {3 M

9 K8 G: H. d2 W( r$ x/* set default diags mask */
- X0 M: v: w) F' ?; _, |0 G+ o4 Rvar Diags = xdc.useModule('xdc.runtime.Diags');- X3 ?* S' _* S* j* E1 I
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. Q7 m  @" E* Z& C8 O& Q8 I
5 C" ], F5 ~$ N" KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 C' {  B- a! w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 n, \  h8 Z) _3 m* T0 r% _4 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 J$ q9 k% E- w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 y3 Z) x( D1 R% B- N* C8 v
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) x4 l6 h: `# d* @
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( P+ d2 @/ d) p0 _* h/ \8 e" g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ E. P0 ]1 r& g# N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 G) @9 M6 O# Y9 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 H8 P4 a* j4 _3 W% u- }  XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ p! M/ B/ o+ \; cDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 G, C9 l9 d0 {- J% R. l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, r' h2 S+ ]! E+ n; \" e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 L1 }* \; m, MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' P5 g+ Q/ G- v6 Z& k: y3 @& s+ G7 R
/* override diags mask for selected modules */8 r# Q2 H9 ?, d/ p2 Z) [0 l/ F
xdc.useModule('xdc.runtime.Main');
2 ], L# ]: W6 T; d, m, ODiags.setMaskMeta(
) y6 u7 W8 b7 K% t* u    "xdc.runtime.Main",) G( |! E1 P; h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, Z4 i% a& U0 g) I" ^9 Y, b    Diags.RUNTIME_ON
# Z- v6 d4 ^5 L# h$ f, U! g: `" Z);
# U7 W+ b) _. c- }7 E0 J% `/ ^8 G% h+ A$ h
var Registry = xdc.useModule('xdc.runtime.Registry');
6 F0 b$ _! U$ s' E5 fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) F# e1 W. c( a# D/ c' uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 ~! I% A! Q% BRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% y6 ^3 T: W! v" O+ ^, Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& {) e( A/ I- u* S/ P/ G* `7 i$ u
* V+ ]6 g3 [: J! I, K
/* create a logger instance */
, T+ v5 v! Y2 v) q, _; }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 ?6 x7 a- q, n$ Q9 Z% l0 Y% b" \var loggerBufP = new LoggerBuf.Params();  q( G* P4 q" T' P+ C
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ N- I& L5 i4 _) s1 T8 i  |( d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; S" g+ @; f4 i- q( H
" a4 \# y: n5 G; Q' f' c
var appLogger = LoggerBuf.create(loggerBufP);
* H9 _  D! |& y* a: }! DappLogger.instance.name = "AppLog_Core1";
1 D- U( L/ @0 m0 B, w6 KDefaults.common$.logger = appLogger;
: n8 U4 r# S+ ^; H% BMemory.defaultHeapSize = 0x8192;    ! T( b6 D5 D7 }; V; O$ X
Idle.idleFxns[0] = "&LEDStatus";, O8 d& }# Y0 j/ O* _- o* }% V
Cache.initSize.l2Size = Cache.L2Size_32K;1 |; v2 u5 U' g3 C3 @
+ p  S7 M) M+ F1 H
回复 支持 反对

使用道具 举报

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 */
9 W, A/ I1 [9 p7 N  R. Y& S' Z7 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 C4 N8 i. m' g
var heapMemParams = new HeapMem.Params();4 Z- G( r! j8 x2 c
heapMemParams.size = 0x4000;1 A( K4 E  z0 C7 e4 Y- K
8 ]6 J; U" B6 H; e% _
var Memory = xdc.useModule('xdc.runtime.Memory');& L6 x. p3 B8 D/ }. D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 |& p& e. S; y) d' y
* t6 H+ Y+ \" r+ P# Q
我大约calloc  每次共计大小为5K*16bits,  n3 U4 g+ f: Z& n! ]
而默认配置才0x4000、需要改大。
1 p1 l6 N" V" U. J& @4 q5 M
8 P! u3 p' ^8 I' _0 e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 g( M. F% Y8 ?Program.heap = 0;
7 K; _( a% X  Y1 l7 Z! n( nProgram.argSize = 100;  /* minimum size */
! I; X8 K% E/ O* K8 V6 v- a/ UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 07:34 , Processed in 0.043268 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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