关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 @. w+ b: B1 g- k2 w( j7 ?" [8 a0 q

, c2 G5 \( h# M1 C( B- S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. b% N& i& |4 j

: b4 |4 w1 f7 W# Q其他程序段。。。。。( s$ d# w. t* n7 j

3 {/ [5 N* w9 ?! v' H  I, Q9 N: t   free(x_d);1 C2 H* M/ o1 I$ j: S2 [, Z9 j2 |

# _$ S0 ?5 Y  x1 J) i5 E- D使用DSP侧单独调试功能,验证动态申请没有问题,! n5 y  c1 H: p! g0 A5 m- l

1 ~0 H5 j7 C6 G- \7 a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 Z9 ^; ^8 p  ~" T6 x, @) F
- y* |+ h2 ]9 ^0 C/ ^3 n$ i

) ^$ e# w. Z% p9 H- L# {" |; N
* ^6 d! n& f  J+ O. B4 Q6 R* ]& M' B2 r
+ P! b. j6 _5 `! |5 y+ F

8 l6 x* r' q. `! U
6 Y+ V1 G, }" X5 D0 {# G. Y1 m. N, ~) j8 y/ H5 R3 T9 ~
2 }% N  u8 r% c% S$ _( w& b0 U

. f5 C3 P5 J, t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; y; D# n6 Z. F2 `: ^8 ^! HProgram.heap = 0;. `& \; @7 ^8 l0 k* S. J
Program.argSize = 100;  /* minimum size */4 i2 ^+ T! [/ i" P7 I
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( B- N1 ^# k: S/ |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. L' ^) p" R9 ~1 T
var heapMemParams = new HeapMem.Params();
2 i, L  l$ j) K2 C# W; jheapMemParams.size = 0x4000;
5 l9 p0 {: ^) y: ]/ V  [. C
& Z" e; a& }" G0 k2 E( Kvar Memory = xdc.useModule('xdc.runtime.Memory');
8 [# L& s7 }! w5 ]5 `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: S$ a2 J. h! w/ m$ W( v+ S; O7 Q' d5 d6 s/ x
我大约calloc  每次共计大小为5K*16bits,
9 ?" R8 R" \2 {4 A! z. ^而默认配置才0x4000、需要改大。5 r* ^+ J( d1 ~( ?5 I- l$ c

, m7 P& P6 P, ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" {6 E- G/ p' c8 b. }8 n- R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 n( K5 M1 T! V3 T' @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ d/ p( q1 q5 r, t: @: J: q/ L6 X
& K, G* |2 D4 P  [/ u6 M+ Q
是不是需要在DSP.CFG中进行配置
7 F' W- j8 z% S, o6 r5 N5 z# [$ B我现在的配置为
3 ]. F  t3 G0 E. n* f8 O4 U& H- f2 w% W. E1 C& u4 _- B1 ]9 R
/*" |! w% v  l9 X, L8 p
*  ======== Operating System Configuration ========: j& J7 h) \$ Y3 `8 F+ _
*/2 M: T2 b5 ]7 y4 b* o( ^. i0 X

7 K8 k/ }: B- }8 `" D5 e/* no rts heap */
( t. k- F* M8 L/ F" t+ D. b. BProgram.heap = 0;, Q; a% D/ Z" O4 f: ~1 p/ F: @
Program.argSize = 100;  /* minimum size */7 [  Y. t  d9 V: J3 @- b; B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( B  R( p, r) Y% n( V- {
) M( b: L" a: Y" P$ M, v+ l
/* create a default heap *// m1 c- r3 Y0 V- S$ y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- h8 w# _8 G; v/ n% I# V/ Gvar heapMemParams = new HeapMem.Params();
) U2 ?# ~/ T  CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& d* e( \+ O8 A$ o& ?4 t9 |; @0 W, N, q  z
var Memory = xdc.useModule('xdc.runtime.Memory');5 I4 d  R$ E/ z: i; j8 v% l3 @+ G% n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. n, X( }2 r$ h+ _$ X+ L  l( I
/ |, E7 b6 l5 |2 Y1 J0 g. |& G: `/* configure System module */4 G5 S! u4 v# C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; }/ I! @  f/ PSysMin.bufSize = 0x1000;
5 @  Q8 J8 d* e& e+ ~' @SysMin.flushAtExit = false;
, l) w# p9 e& _% U- h; V8 f2 @: u3 L% L& y! J0 u
var System = xdc.useModule('xdc.runtime.System');
2 S1 O# j0 b) t. E  c6 L9 D3 R: ?System.SupportProxy = SysMin;
: `$ y$ G! E) V  x5 I6 d
" _( o6 A, l' y) m/* configure SysBios to use the lower half of Timer 1 */1 V( _; z; ]/ Z" Y; r! y) ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 I5 n, Q7 `1 v. l9 v/ j  i$ q; V3 pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' ]" ]8 l. _  Y
Timer.timerSettings[1].master = true;+ s. _! D6 Y1 G% l+ L! j- a
Timer.defaultHalf = Timer.Half_LOWER;, z( t( b( s8 Q) e' d2 S
Clock.timerId = 1;8 M- D) S* f3 F& c
% k+ e" P/ S  K5 W5 s9 H6 {

# q) ?6 N  Z3 q# Y% N/*
8 g' b  p4 N, g7 ~. v *  ======== Miscellaneous Configuration ========
; {' n2 ~+ M) S  z1 |+ y4 l */
+ E, U8 H4 R- Z5 o) H6 O; ^9 q5 B. V" w3 g- y! I
/* set default diags mask */
% c& T; x+ s  [) s" Q) x" V1 {3 K3 cvar Diags = xdc.useModule('xdc.runtime.Diags');% c3 g; {- |; e4 K$ t, l) |
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 l0 P, X/ D3 h: Y5 W- i3 S# l1 T9 K
3 J4 `$ g) Z3 Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# f6 _! n4 M1 p* z2 T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: l  ~2 P/ [. A$ b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; q  _$ v0 @! `& k5 c$ XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 X2 N# l, o3 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. n7 j% {/ M; X6 _$ `) U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 M8 C$ Z5 G6 r6 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) F* a2 J1 U6 O* PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* Z0 Z. f# Y& Q# @# [9 n) W$ a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 b2 m2 L( ~) _% UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* p( J7 i! i* G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 K6 g9 P0 p, QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 j# G3 i( h/ U# k6 A9 e4 I- O' gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 [6 G2 ]: f7 K9 H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 \' f  d! r- ?* v0 E% \, y3 l$ k0 k$ p# Q  d. `5 t. V
/* override diags mask for selected modules */
5 N! x- p) e- M& K0 M5 B4 _5 oxdc.useModule('xdc.runtime.Main');+ J2 c$ p1 f" C, L( K
Diags.setMaskMeta(  V2 M  t3 U$ H& i
    "xdc.runtime.Main",! `& c" k; h* w# ]0 u  h" [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- x9 T( a" N& c% N' H    Diags.RUNTIME_ON
/ N; `6 a5 E' O0 T! c* B);7 E) \& k5 _: N% m5 r
7 Z' ^" q7 ?% U) Q3 A3 w
var Registry = xdc.useModule('xdc.runtime.Registry');
+ Z7 |1 E6 Q, G! S3 g9 BRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* |; ]) N- b. n3 Y) ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! ~8 q' L) Q/ H7 ~; [$ w. T& u0 j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 |" r' P. j4 V9 H1 i5 s1 ~8 sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) \- U4 \1 c# d# H2 _& h$ o, E

; n9 Y9 [. t, z- M9 ^5 r/* create a logger instance */
% y; W- ]# E/ Q+ V' Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, W  B7 Q8 b" G- g! I
var loggerBufP = new LoggerBuf.Params();. C+ v" ~  q/ p- E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 Y; m8 f; Y3 q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;7 H4 X8 v/ _/ G* ^

; m+ L. @$ q$ y- N7 t5 @, s" Rvar appLogger = LoggerBuf.create(loggerBufP);; `! e* \/ u4 w& b# T% A
appLogger.instance.name = "AppLog_Core1";0 ?; J5 h* E+ u5 m
Defaults.common$.logger = appLogger;
! h& b5 c3 ]% \! ZMemory.defaultHeapSize = 0x8192;      `: G' q  e- ^3 r) U
Idle.idleFxns[0] = "&LEDStatus";
, n! i& ?: K8 RCache.initSize.l2Size = Cache.L2Size_32K;
1 F# ^. W6 U. Z) \2 M6 U' E& A( E# Z' h
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 09:43 , Processed in 0.045675 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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