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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 p! g4 i& t- }% C. y: K& H# a  D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# C+ W' \/ \3 E# j6 B% M2 U4 }& E1 b1 O+ v& G' J2 ]6 i' u
其他程序段。。。。。
& {9 @. i. G+ t, |! M
7 }- A& x" V* G' h* ?- ~   free(x_d);
9 W$ V5 y" M  M7 @
' p6 J5 [( l: ?4 f7 v使用DSP侧单独调试功能,验证动态申请没有问题,/ X' Q) t, H! r% t6 N
" b6 ~* f- H* Y1 s( N, Q2 u: Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 Y) n+ g6 Q) n" @" ?* m

; H0 M7 R( y1 ~5 I9 J+ e/ ]
1 `/ ~( }9 q, \1 o" m
( l9 d2 Q7 O5 T1 L# A
8 M0 G6 N, y9 |9 {# m3 t0 e; B5 d% O6 y

% y" o" N3 W% z1 G6 ^: z1 J$ g! f# U" E8 Y& b  q, ~" M
+ F. l7 J/ D6 @/ A8 M  Q
5 U/ v5 b: Q, V' C4 n# c
1 K. i$ x+ r5 \* K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! R6 E) w5 d) ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 T& K; O8 Y1 a* H5 x9 x! O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% A0 O( ~* P9 B
6 ]0 I1 g3 J% D- @! {' S3 ^
是不是需要在DSP.CFG中进行配置
' p9 D& @! s% l5 j( A- m3 j我现在的配置为
4 ]0 X4 n, u1 f1 q- n- t4 }- U
8 D2 L, F# N+ J1 X/*
3 p( s( D0 D! f1 _6 t *  ======== Operating System Configuration ========
. G0 E: _6 {1 p- v, N% J */
! L0 {) f7 p) K# d% ?: x3 n- s- Z5 U) W9 |
/* no rts heap */% @( d. `+ @) I" u' {' _
Program.heap = 0;
* M  }9 V# D& }/ ^* wProgram.argSize = 100;  /* minimum size */1 m) M! w5 l& v: U3 b5 V7 c- M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 p1 L  l. M# \+ A0 A
6 ~9 S" K; J1 T0 j7 P
/* create a default heap */8 {4 e. i6 q+ g2 G  M' i! h/ R' R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ N+ ~& J  l& J& z, U
var heapMemParams = new HeapMem.Params();$ D6 P" }; @8 o; ~* |8 W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 L6 X$ D( j% s9 g. n* R# C/ ~( |. ]. \
var Memory = xdc.useModule('xdc.runtime.Memory');7 j! I" c& ?0 d& ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 [; B  ^, l) r& k  I+ N# Z# `4 q9 K
/* configure System module */
" G; Y( G( B3 H7 `# Pvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% T7 u( }" t' i! TSysMin.bufSize = 0x1000;
& ?- ~( w  i# S4 ~/ Q3 ^, LSysMin.flushAtExit = false;
) k+ e$ o' r% I
* R2 Z# ^& Y0 U) O$ P& _, Pvar System = xdc.useModule('xdc.runtime.System');
7 T. S6 K+ J% `% m$ O# s, bSystem.SupportProxy = SysMin;
  v* |& e- H- o$ {. A% C9 [1 G& P. T* G( }  g4 i3 T1 A. E
/* configure SysBios to use the lower half of Timer 1 */
' ?5 X, j7 G3 m* W- C9 L' N& Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ Q  }) {! I/ |. g% zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& o" l4 S, b  h7 S# V. Y* R
Timer.timerSettings[1].master = true;
6 q/ c& l9 z# X" oTimer.defaultHalf = Timer.Half_LOWER;
" x( e1 g- `  ]/ ~4 g$ {7 g1 ZClock.timerId = 1;" @5 V; X( a0 Y. z

. e* A( C0 g0 o# q1 c  y6 n
1 f( U6 z! f% X6 Y- T2 [1 G3 H9 w/*7 F1 ~8 j% i& \- @8 D
*  ======== Miscellaneous Configuration ========. e- C! y8 W+ |
*/
% z. i. t' F/ \3 c' u8 ?" h. n) v$ f9 u0 ~; Z: M
/* set default diags mask */
' i7 Q8 H0 ^# F9 y! r$ g& gvar Diags = xdc.useModule('xdc.runtime.Diags');
: u. a" W% }1 k( f, nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 c* g7 H; }& {. x9 _. m# ~
. v: h2 A1 Q  g0 }, gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 q0 k; C$ J. e0 b, H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 g9 V5 x! c' F) H* A9 B5 CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 c( R" A  \3 y5 v5 ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 W( |6 N2 H4 C1 D8 e. d( }4 h2 R2 ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) n& b! |% F7 T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! T( `' `$ J1 R1 L1 m5 g4 h
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 h& W/ \. R; a2 g1 \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. K5 y( [3 ~0 B+ xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  f% S. a. a1 v, R: X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 g6 B- a: e6 p  N! \1 Z5 N% @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; U. U, v; \9 Q% L3 B' }, c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( ^6 i& e/ m7 H$ Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 m1 D1 c" m" s7 Y( rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* u- s4 w" e2 z. E7 E0 W, s
" _) n9 B6 z- |0 y/ K$ |& V1 M$ T$ X
/* override diags mask for selected modules */& L. N( h; o" _7 ^
xdc.useModule('xdc.runtime.Main');! J0 T4 ]: m, `$ @5 D( v/ U+ D
Diags.setMaskMeta(% E- g+ y5 P; ?9 Z: b! O5 u  X& R
    "xdc.runtime.Main",5 p3 g2 T/ V) n2 R, ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) r9 ]3 @9 S. A* H
    Diags.RUNTIME_ON
4 w4 [8 A  }# H& K  v1 T);+ d8 y- b  g+ t( w4 v. b4 G

% E, n3 }3 o( q- f4 U" v: C4 }var Registry = xdc.useModule('xdc.runtime.Registry');: K2 K, Y* y9 D( b. N- I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! D* ]9 m4 z7 W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! N1 F- z' S: q) y+ I  H6 q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ n" Y6 u$ b" {( ]# {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 `% ?$ s6 W; R7 |' h9 J: {! ~2 t8 t
' R2 `8 L8 K" L* C
/* create a logger instance */
/ E% g) D1 Q- I: u$ \; A' N+ K* H5 Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 F3 C! z7 o+ r3 F6 |9 A1 g
var loggerBufP = new LoggerBuf.Params();9 Z  m( H4 h: a/ s6 [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */# {- j0 @) Q" G4 l% R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( I- `6 I( m) s9 s- x3 B" r
3 Y' k% p5 Y. R. J8 ~& ?
var appLogger = LoggerBuf.create(loggerBufP);
* m) w+ b. i8 ?) t/ MappLogger.instance.name = "AppLog_Core1";
, ~6 W3 x5 h+ f4 p! qDefaults.common$.logger = appLogger;2 H' E+ M. m3 a. ~2 @; ^  B
Memory.defaultHeapSize = 0x8192;   
$ W, I) Y1 q0 HIdle.idleFxns[0] = "&LEDStatus";' a5 q8 Z$ e) r. Q9 C& }
Cache.initSize.l2Size = Cache.L2Size_32K;
+ ?  _; e/ q. }( ^6 [8 G3 `) ?5 O7 X" m$ K* _1 W0 H6 V! r
回复 支持 反对

使用道具 举报

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 N# _+ `0 s# p$ W- c7 U' j' e& Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! ^5 k7 w2 M- A+ \2 }  K1 kvar heapMemParams = new HeapMem.Params();* R$ a2 D7 V5 S; V, ]  B8 y' v
heapMemParams.size = 0x4000;: {1 s% [9 X' y. e# N3 Y

" p* P# ]+ I- ]1 ]2 V9 Jvar Memory = xdc.useModule('xdc.runtime.Memory');
9 E0 w3 x9 Y6 R0 UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 q2 V# q) y8 X8 q+ t8 P8 l! Z+ M* L! I# q$ l8 e
我大约calloc  每次共计大小为5K*16bits,  j" B2 O- [7 j8 ~) i3 k
而默认配置才0x4000、需要改大。
. `& Q" C* U- b8 k$ H# U
5 n3 }& d5 m/ f( _4 C; q$ v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 z$ |9 ~  i0 B, u; |Program.heap = 0;
! T+ M0 S( ~0 o5 M( o- h! D# nProgram.argSize = 100;  /* minimum size */
0 _$ ~, z) u0 ?" T  F5 OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 08:38 , Processed in 0.045794 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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