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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( f8 `' s4 ~  G0 |' \0 @4 h: s: M# d
4 O! d9 |" [9 E/ C. _1 R+ [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# ^  h' [4 ]* H2 y. d
1 a& t% m4 H" a, v3 B0 a( n
其他程序段。。。。。* g' U$ o6 l+ @" O+ p3 G7 m5 c0 P( o
7 W, g: S. n8 ~) l( _6 _9 `* u
   free(x_d);, e2 P% m- O: @( W, H

& R! v* C8 Y7 W; O& ^使用DSP侧单独调试功能,验证动态申请没有问题,
  \, ?- E5 f3 C) T- t, o
" r+ Y/ \' m( Y# n( F5 ~4 W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ J1 q$ s* q+ c: x

1 F) D: {1 D' y: t% @
. T3 \' ]9 Q! [; l1 B' U0 k) g7 t- i  W

; E) o6 n  l: S# n2 Q7 U0 _9 G/ \" B, c4 [7 f3 ]7 }) `- l+ j

! h' |2 j; r# |. t4 C1 I. J* g4 b9 q! v5 y5 x
; p" U, Z1 M9 _# r/ s. R2 ]
- g. Y. c/ k  I( Q% w' h
& U' R. j* Y/ Z8 v8 _& J0 j, a- a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( K/ f0 t9 O/ U; q- ]- F5 A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 C3 e+ G9 o. b, d( Q2 S7 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 z) G+ X+ Z# z* d: Q8 l2 H0 T

( c) @. i/ o$ I; b是不是需要在DSP.CFG中进行配置
) \; m+ `8 }: Y2 j# n2 e2 A1 {& \我现在的配置为) Q( u- E+ W; c5 q) m
: H- u" ?7 _+ \6 i+ @
/*
) K! O( t7 R1 p& s- s) K( N6 W *  ======== Operating System Configuration ========& h$ y% F& @0 V  y: E- V$ X
*/1 J* {5 Q7 k) _* [" ]/ f! r. T
" C1 v- |' a6 J; W. C
/* no rts heap */+ D+ E! t0 l1 B; W+ e
Program.heap = 0;7 Z0 R2 ~5 x1 z' L* z
Program.argSize = 100;  /* minimum size */
* e& Y# f+ C: i0 A, ?! NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! N0 D8 m' {& z  W+ C$ |/ {3 O

# V  D* n( }3 ~7 |% s/* create a default heap */
7 {! t; b2 s6 \0 s' {  K% nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 R( U- Z* [5 Lvar heapMemParams = new HeapMem.Params();
' c! ?  o" }* |* F: JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) Y7 q. j! S9 N2 x9 ~$ X" w* y/ M; @* f7 t& u
var Memory = xdc.useModule('xdc.runtime.Memory');
0 |; P. K- j7 U, f+ D/ ?  ~3 k! XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ v6 l8 _4 f+ g, h* {/ O) \9 E- a2 x+ F2 ]
/* configure System module */
0 c  K: F4 z9 [- d7 N% z4 ovar SysMin = xdc.useModule('xdc.runtime.SysMin');  j) t! P+ {3 v/ B* S
SysMin.bufSize = 0x1000;
# H% c4 I" T: {$ g( j: I+ tSysMin.flushAtExit = false;
# T% l+ ~8 A. y/ x
, |* U$ `! R6 V. \var System = xdc.useModule('xdc.runtime.System');. _8 f# E1 T$ j
System.SupportProxy = SysMin;
; g7 i0 U: F) T7 z
; M: Y8 ?" L$ i9 n# l/* configure SysBios to use the lower half of Timer 1 */
. Z3 ?: S$ R: Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 F+ W2 }$ C1 a+ v3 P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% G8 P/ W$ h, b- e/ [
Timer.timerSettings[1].master = true;
& E: I1 L8 `& B# j3 ~- lTimer.defaultHalf = Timer.Half_LOWER;
2 ~  C" X' \+ V1 f) R' F5 G4 R% TClock.timerId = 1;
$ h. I, l& H2 A" V( U0 H; A2 H2 E- H$ w( \$ u# u) l) u: {
0 `! b* q5 F4 Y
/*6 J2 I/ \7 G$ k- t1 o
*  ======== Miscellaneous Configuration ========
' q% W( R' }1 N0 Z6 h */& b( V! {0 Q2 Q4 s6 _8 i

  R7 W: x$ m  r7 ~6 t/* set default diags mask */
+ ?+ Y4 Q$ E, D. Fvar Diags = xdc.useModule('xdc.runtime.Diags');7 X' g7 g5 e1 G3 ~% O
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 x! z  [( ]5 q1 f, |$ ~- |5 P" O- U6 h" R1 R
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 \9 E' |4 ^& ~. W2 f2 C% }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 g1 P' p$ X" B: y" P. D/ g
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ J8 S, x! f0 K9 m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 G0 \: w/ Z) z. p% e1 N3 m+ b& s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ h8 ^2 f4 i3 g- a9 x4 R; h
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 x0 J6 _/ Y( I4 `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 b& C# @7 p9 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ ?3 B/ \/ [, s7 S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 _) h+ h" J1 Y2 `5 O
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 D2 O+ @1 R; r9 R; h. o8 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 Z5 |  J# G; c; b. d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( d. I! y2 j$ Z* v& gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" c' f9 i' P( {4 o+ e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# }% ?0 l4 ]1 G
- z( m9 D4 g! ]/ C2 E0 A3 b
/* override diags mask for selected modules */
7 \- ~5 A  U7 s. J  ~* j: Yxdc.useModule('xdc.runtime.Main');
( B$ N$ e5 J! t" @& k0 M, @Diags.setMaskMeta(" }& m& k' x7 G# p/ b# W
    "xdc.runtime.Main",
8 A- p0 R2 |: r/ c" j' W& i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% q' h7 {2 B" O/ W    Diags.RUNTIME_ON
/ Y) C- @; h+ |* O" v/ ?' Q);
' p7 R" E  V$ C8 H5 s: v- |2 u. j* H) t
var Registry = xdc.useModule('xdc.runtime.Registry');
6 ^7 p0 y9 I* p& ~( \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 N, c2 X8 P% o3 B( {! h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" P% U5 o) c5 Q1 _8 P
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) z/ O0 `9 |: Y8 d' pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  Z% m1 @- n7 B+ X2 `  A

3 g  b& e9 `2 [% o/* create a logger instance */
% g& s+ G0 `+ \, L# w$ ~( avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 v) H& L5 U. l* E+ ^1 t0 U% [
var loggerBufP = new LoggerBuf.Params();7 b* Q4 W9 `# O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 H% L. [% g* B7 M
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& ^1 \- j2 b! W# b7 [
% M; O( \2 A# D. m8 W. Y2 ~var appLogger = LoggerBuf.create(loggerBufP);" r& e+ c6 f) \7 S. e9 p
appLogger.instance.name = "AppLog_Core1";
# k* V; K3 n  `7 z1 {; ]8 \Defaults.common$.logger = appLogger;% N% ^5 g0 Z' j7 n" O/ x4 @
Memory.defaultHeapSize = 0x8192;   
4 \9 g. A9 G8 Q$ l* K9 J$ ]# hIdle.idleFxns[0] = "&LEDStatus";
0 l* V2 }7 ]3 fCache.initSize.l2Size = Cache.L2Size_32K;' z! i$ j* g- o' m6 N' `% {/ s4 i* ]
" @5 w* S3 T1 X) L# J
回复 支持 反对

使用道具 举报

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 */" s0 |+ Y. F2 N: e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. Z" t! m1 E) R8 P7 M
var heapMemParams = new HeapMem.Params();
, p. r2 y0 K  T9 a% S5 ]heapMemParams.size = 0x4000;
! ]. t/ i4 v; r2 Q, [1 T! k) |$ u5 w3 x3 s. @( R) z
var Memory = xdc.useModule('xdc.runtime.Memory');
4 r7 m4 K, B# ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* A9 s4 m0 N; j* N% a
  N5 [4 [* u  r$ W7 N3 `2 c# p我大约calloc  每次共计大小为5K*16bits,
" m! l2 p0 K& O+ a2 g) G而默认配置才0x4000、需要改大。# M: ]% ~; d( b1 Z3 \7 g; b

/ n! ^6 }4 z' ~  T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; |# }8 G' g7 n5 l; t4 A' JProgram.heap = 0;4 s" }- x9 C' p
Program.argSize = 100;  /* minimum size */
4 N0 K4 y  X/ e8 fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 12:56 , Processed in 0.042091 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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