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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 u! v8 ]6 d9 _3 e. ]% c4 T, ^; l1 {- U7 c: }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* W' w! F) W! P2 `
* P( [- I  J  H+ u其他程序段。。。。。' h. D: {  ~3 l, L/ P& g. Q

. R4 w" Z2 B1 w/ r0 o   free(x_d);
" B+ x& @2 ?5 L- a; d
; l$ ?4 H' \* h2 S- M使用DSP侧单独调试功能,验证动态申请没有问题,
& R$ b4 P* o; W8 C3 P8 }+ C1 J9 p" I% J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 L5 t; a& V* t9 I1 Z
! x7 Y' T& `( ]
0 w4 }9 h+ V  D

: k& ^% H/ {( ~7 F+ {. J/ o% f' j% F3 L) V/ C
9 k' r: M. R3 B  o8 e

; o# L  u3 e3 w! l0 E  l3 ^
7 S8 k- P: f; I
- A/ {+ G& ^4 G% `! x# L2 ?' `' Z$ p2 M" R3 L2 D, r
( ~, z! }) p' ]+ F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( c2 z' `% U3 J. g( ?- K, C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; w& Y, Q  y4 E* [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 `% p2 s. E$ Z& k+ |& }
1 e6 ~6 |% W1 K0 d
是不是需要在DSP.CFG中进行配置
8 C& x: Y! f3 _# u2 }4 F& S! a8 ]7 u我现在的配置为& ^6 h3 l8 h; @6 \( U. c
2 I6 z+ R# g% m1 f5 z% z0 R
/*
5 i9 `$ f! n5 I" P! R$ T *  ======== Operating System Configuration ========
# N; ^  [$ i8 k& C */4 r3 n" E$ s6 J+ B! q: r3 s
0 f* C! w- n* H' I
/* no rts heap */- l5 h+ ~9 w. ^8 I4 z
Program.heap = 0;
8 {" z9 K" ^0 N# Y; gProgram.argSize = 100;  /* minimum size */
' Y9 F( H, n2 g7 W& MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& j  E) z: n8 K6 |( V8 ]" ]6 b% O% h% J7 G5 F7 h
/* create a default heap */& s2 K' W9 O) M# O2 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 b% X0 B( m# o$ N9 {, E. Jvar heapMemParams = new HeapMem.Params();: g9 P* T5 A$ q" U2 L
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% ^, z9 I; v; V$ v

; \7 j* v2 d# g( v' O2 q
var Memory = xdc.useModule('xdc.runtime.Memory');! p+ s& U& M- a, u1 T- X. Z+ U* I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 {, v* ?3 R4 u
' m) g4 m0 Z4 K% A3 {  U/* configure System module */
0 L0 z( |# a' w7 v/ J/ fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( ~1 a; a8 D- _SysMin.bufSize = 0x1000;
% f4 ?, G' v: h1 hSysMin.flushAtExit = false;
1 A2 ?; Y' b: A. P4 y$ f$ m9 }
8 d7 m' [8 I0 P% j6 r3 ]4 B+ t; Mvar System = xdc.useModule('xdc.runtime.System');
4 U% k# _) n0 M  O% h% ySystem.SupportProxy = SysMin;
, ~- h. E% U: ~/ v7 Z: {  k" o. S
/* configure SysBios to use the lower half of Timer 1 *// j8 f1 Y" t8 M% i2 F* I% O3 T$ l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) X( ?& }3 V! G4 s9 k* O% fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ B" L% W4 \+ B- J% v; O/ _) f. B
Timer.timerSettings[1].master = true;
( M; H3 Z$ E- y/ yTimer.defaultHalf = Timer.Half_LOWER;* N/ h$ a" k: W5 g
Clock.timerId = 1;
: b" L! q  |1 |. K8 j5 ~
) r  d# b0 t% ~* ~! {1 T7 K2 X, P! x0 J
/*
9 {3 P3 Z! Y! Z2 W5 S. j *  ======== Miscellaneous Configuration ========
, Y- K2 T" L- L! k" R */0 j8 R7 Z4 Z6 j7 }8 b
4 n( y0 _3 H- ?3 O, A
/* set default diags mask */
8 M% K7 U3 R8 |6 [4 Gvar Diags = xdc.useModule('xdc.runtime.Diags');
0 o6 R: r6 ^6 W- t: ]& g2 e/ @+ Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) }1 L6 |% ^' L/ q: j( x' z" I( d% G' m" r0 _7 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# d5 ~/ H1 z2 A3 \& m  i5 v9 w# [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 o! l. C' m" K7 T0 P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ |3 R9 y, g9 H& ?- E; C# S9 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 K" v1 y3 z& C" {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, H& X( |1 n5 w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 D' L( {6 C9 ~) D) g' i+ XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) f% H7 m. i9 t0 g# `- ]3 \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 ~; T; m4 _2 p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 T! p1 O  U1 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 W. d" g/ O4 _! I# U  M0 m  EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& a/ O" S. v$ Z5 l' \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# S( n4 ^& z  E6 N9 d; r, ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; ]8 H+ q) _" W, s/ o3 fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 Q; l# D; u# g) T: P
& A% {' e  Y# |; V" m/* override diags mask for selected modules */
; P; y( i  y; J( jxdc.useModule('xdc.runtime.Main');
% U, g; t1 R0 O  g. {& WDiags.setMaskMeta(
) I7 |! B! }8 ?+ Y5 k2 ]5 n    "xdc.runtime.Main",  b: h, g+ \$ J4 g0 Y* B) f$ {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 ]% t& q) u+ z# s3 `3 [. f$ ]
    Diags.RUNTIME_ON  ?7 u& @2 ~9 @( ]
);
$ w7 w9 s* l1 ~0 A4 R" t/ @
3 V( j- R( z" Q' D' kvar Registry = xdc.useModule('xdc.runtime.Registry');  T0 l9 V7 h* I8 k6 o) k7 M$ @% W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ D9 k8 F0 \/ i! q3 FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 n( t/ o. P3 {
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 r/ O! J1 o& }4 _8 e. D6 [, KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 N: h* N- z" x- B$ g2 R8 D0 @+ U5 {

# E: }; j8 j( {1 \- ^# s: K/* create a logger instance */& U- g- E% D8 p' Z  w8 |! G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" `6 E; H* o& _5 j: a: d
var loggerBufP = new LoggerBuf.Params();
/ z5 o) F! b/ [( }8 U( t4 IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; M4 ]4 M3 F% JloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 O4 J0 G1 U7 k7 C/ j7 N' ]

' o, A- g. q4 `' P6 Hvar appLogger = LoggerBuf.create(loggerBufP);! k- O5 w9 p7 O6 T: W: {. z
appLogger.instance.name = "AppLog_Core1";6 ^! h+ a3 E/ A. M! t. Q( l( T
Defaults.common$.logger = appLogger;
* |! V6 L* i' W8 w" Z1 TMemory.defaultHeapSize = 0x8192;    ; e2 w  W- N( c3 A) F. Z
Idle.idleFxns[0] = "&LEDStatus";
0 o3 Z+ r- h3 O% K+ bCache.initSize.l2Size = Cache.L2Size_32K;
, A( f+ a5 W* D2 p0 v* _
8 E+ ]9 `0 A- ^: x7 G- P
回复 支持 反对

使用道具 举报

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 */
0 P0 e) _) q, X: N8 }9 ]+ Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 ]6 J/ M# O2 x6 L* n/ T' uvar heapMemParams = new HeapMem.Params();
1 [1 i2 W$ x) o# UheapMemParams.size = 0x4000;
& o9 p$ e: l# i% f1 {# R- D& [3 B( o) {  ]/ W* U, T  L3 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
1 S4 s9 C' c& }0 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 o- E8 `$ C# L$ h

: c. {) K8 @9 g( f/ M# f) ]我大约calloc  每次共计大小为5K*16bits,) p1 n; g2 ^, o& h6 ~9 v5 h
而默认配置才0x4000、需要改大。4 q% @. {% f. ]2 L

" E3 B5 f4 L$ o- S# |5 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 a/ f+ ^& b; `, a5 d
Program.heap = 0;
$ Z: b( R6 i3 V- K& P. CProgram.argSize = 100;  /* minimum size */
& j! ]( c, K+ FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 03:53 , Processed in 0.040203 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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