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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# N! J" s: `4 G8 B" I

& ~# M6 h5 X( D$ P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( b! E5 v" W& a8 a' I# l; }6 O

% }' X7 m3 z4 B# G其他程序段。。。。。4 \4 ^6 G0 n& F- G4 A

. r: L* \7 n2 W0 P   free(x_d);) l4 f- i7 {2 r* \7 o3 g
8 C9 s; l+ ~8 y9 v$ t
使用DSP侧单独调试功能,验证动态申请没有问题,
. J# `% s& G1 g) N( d0 f* g2 q" Q- u4 N" M& \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* i+ u, q& f( |3 L' r# C- ]' e# Q

% Z: K, o- O4 o7 D1 s- T* F+ X& b( w7 O. C( N5 r/ e( {

$ ?* I+ \/ F+ ?, l2 t6 l( t& n" U( l& T4 p( V. [

6 o5 O1 v% s. y# z$ l( ?  D! p+ s3 O2 N$ U; q- L: i6 ]& I' F

: W4 e5 l1 X' Z9 p. c$ K" ?+ _3 v4 T- L
( l! Z: V2 J3 t( |# Y( k. ^8 G2 i
: E2 D: G1 v2 p. D7 M* |8 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 L  ?+ `9 S& R- X  `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* x2 m" k0 M2 Y) s( Q2 @! w3 I
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); W* I& H+ U& T+ s* R
0 d$ e( o2 U) {$ X
是不是需要在DSP.CFG中进行配置' n8 i4 X% P9 a4 m+ H; f; J0 C7 D8 f
我现在的配置为
/ }. I4 |8 H0 W  a2 L7 c. A4 [3 D. ]( J8 `8 _5 ?: Q
/*
; n+ G* M3 R$ E! B6 w* X *  ======== Operating System Configuration ========
$ @( M  K$ a/ J" l */8 s3 v( U9 d5 v" n

' U# Y$ w3 a, |* P9 U3 b/* no rts heap */- E6 c# b9 E5 j# j  L% Y2 K* V
Program.heap = 0;
$ ?4 z# ]0 s/ J" K0 N9 AProgram.argSize = 100;  /* minimum size */6 _% p5 v0 Q/ j7 F0 `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ O+ C6 ?5 s1 o- g* U8 M7 Z! A0 ~3 N1 w& V8 I
/* create a default heap */
- W" y  e" K( a3 d, N; ~8 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- k/ A" j. T$ t1 z* v; Z9 |4 i
var heapMemParams = new HeapMem.Params();8 Y* c/ Z' X4 N: o6 X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 ^8 v5 Z# g4 A  V; @$ ?# T& S
! L$ _" W0 E  X# P0 J& i! i
var Memory = xdc.useModule('xdc.runtime.Memory');5 G6 b- K7 u0 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: O7 I. Z1 l/ h  f" j% o. S- P# S$ T4 y$ ~- |! b" ?: U/ S5 V
/* configure System module */3 G0 C$ Y$ f$ B% I4 ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: M+ }* E6 m6 @+ M; P$ d0 X& bSysMin.bufSize = 0x1000;2 v$ s; U- u7 p
SysMin.flushAtExit = false;
8 y, ^& Y- N9 O& q4 o4 z& g3 v; O
! v% Z' m# t5 N) Rvar System = xdc.useModule('xdc.runtime.System');/ ^6 {" w. b, }( L9 Z/ ]
System.SupportProxy = SysMin;4 B6 k  \6 b8 R5 \1 z3 v3 U  Q

" G* t& a% P" v( Q8 R  w# Z/* configure SysBios to use the lower half of Timer 1 */
- Q( B$ G# b5 O8 F" G& Zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 p0 Y) w# F& c, O+ Q! z0 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 e0 }# U/ ?# M' ?% tTimer.timerSettings[1].master = true;( f- H/ T. B) m5 Z# Q. _
Timer.defaultHalf = Timer.Half_LOWER;% k) k3 U4 i4 ~* b8 m/ S# m" `
Clock.timerId = 1;
5 Y$ w. O8 U& x# y
3 {. t0 F3 N' J- S% U; j4 o! T2 B. y* v( t5 Z# b" L+ v0 D
/*: X4 g2 h  n2 {+ [! E7 Y$ M% v
*  ======== Miscellaneous Configuration ========2 Z1 j$ [$ G: T7 h, Y
*/" k* A! E4 V# r7 s, G& J
  w6 k' f& x0 n. s0 Y; q
/* set default diags mask */
# x4 V* P' L: evar Diags = xdc.useModule('xdc.runtime.Diags');
' R  S% F5 l  _) Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 Q, Q5 i$ I4 T* t$ ]# V5 i
1 m) N/ U, a9 H* E* ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  p; Q1 }% a5 n6 p9 J0 a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ B/ l. X+ X* M6 n2 }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" S6 r6 n$ N; [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 q$ h+ a* r; Y8 EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& e8 i& a+ g  q4 z! k/ @0 CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( z, \5 M. f" G- D. V
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, t" J; M! A) B6 A; X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) a: Z  P, d5 V* R. B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 B* r5 |* Z8 ?3 A+ S; @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ D4 u8 N# T% t6 L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 e# z* u1 s. H; k- r2 _& H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. a, \) y" p  B) Q# s" K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ o* g) p  i% a0 `4 Q5 N% ~+ E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( E7 h! v3 C8 T. a9 s
: s: r- s' p3 z
/* override diags mask for selected modules */
5 P8 Z, M# F5 g9 w7 oxdc.useModule('xdc.runtime.Main');
/ E" _: P/ E! @: P- I0 @# }Diags.setMaskMeta(3 q6 z- V6 w( e! a$ {
    "xdc.runtime.Main",, A5 q/ Z3 }3 W, g. \
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& X  a& `7 Y* B2 n1 Q* z    Diags.RUNTIME_ON
0 V) [  d( H3 f3 Z);
# A0 t# s9 K- a6 Z; x/ a0 H3 d7 Y4 B& K- p
var Registry = xdc.useModule('xdc.runtime.Registry');. o( M1 f2 Z% j9 N# y7 b
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. p8 J5 a0 Y  S" H$ dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. U: s: s! K4 J, r9 H! t: a3 ^1 @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 H# [8 v, Q' @& O1 w" ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' Z1 I$ |0 e* J

2 s/ J6 a9 j9 ~) l/* create a logger instance */  ^( }' L2 y1 l+ f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 k+ V8 w+ I* ]7 E9 f
var loggerBufP = new LoggerBuf.Params();
3 R5 u# n: }' I9 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 d" I, b) u/ [4 \$ ~  K2 _& L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 d" w6 F! o( o6 w9 r7 l

3 `0 v6 t* M4 ?% @: nvar appLogger = LoggerBuf.create(loggerBufP);
: J& I2 Q+ i% L; j. o; p  o. R0 FappLogger.instance.name = "AppLog_Core1";/ I9 A5 z5 S! e" A3 ^( r
Defaults.common$.logger = appLogger;
! L, a  T1 {# `' r0 EMemory.defaultHeapSize = 0x8192;   
8 ?( p* P! [/ E6 X$ J& T# g* m' gIdle.idleFxns[0] = "&LEDStatus";: O6 l, s8 C' i
Cache.initSize.l2Size = Cache.L2Size_32K;
8 r6 B( ]! J* O% Q; C# r% H( f9 Z1 @) H4 a9 x4 N7 s# G( A
回复 支持 反对

使用道具 举报

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 U$ S9 `0 A0 u* T" s$ uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: S: [9 c0 V1 e1 {
var heapMemParams = new HeapMem.Params();
5 O) V  I) D. \* A. o) z/ iheapMemParams.size = 0x4000;
' t6 P$ G( j4 F0 d: ~9 K  N( t! ?0 w
% S- F, e- u1 Avar Memory = xdc.useModule('xdc.runtime.Memory');! o! V# W, K2 z' W& Y' p% r: y5 @* z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 I5 X3 J# R3 A" T

7 T, d) J# |7 e/ Q7 H& E7 @我大约calloc  每次共计大小为5K*16bits,
, Z$ A/ J, C: X- g: B* V) J2 F1 Q而默认配置才0x4000、需要改大。0 U& ?8 h- n# E% w

4 W$ }  w+ C- U' n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& D& k* O6 L9 f4 V. H* hProgram.heap = 0;
2 {3 _3 `& G1 m: @Program.argSize = 100;  /* minimum size */4 Z5 c: E6 x/ z/ d; N# E3 K
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 01:02 , Processed in 0.042193 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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