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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 v, O6 o3 g: w6 ~! l/ q+ O1 m9 ?) c4 P+ z+ e: T- l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% d* I% W( K& V% @; f; s! R; B/ h

9 l% g" |% g+ J2 M其他程序段。。。。。" q; X* h7 a* o" p. B" U% A+ [, ]
) P$ y8 h. M, M  F+ G+ p
   free(x_d);- q, M$ d9 r% i+ f
! o$ N0 h3 a  u! B
使用DSP侧单独调试功能,验证动态申请没有问题,% p4 B! b, A1 c

/ l  |7 K' v9 C9 X5 t5 ?3 P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 J1 g) o4 d& @* f5 ]

# P" l# h0 `: B
3 P$ `0 V" m0 f9 \' R
. b1 U; g& X( h" a0 v: C5 [* k. y9 T* H" `2 T

3 E! }: t* i! ~8 y- O
! ^3 _, D. c& W3 `4 q+ d+ c$ o9 m7 ^0 G  M
4 |3 Y' N, @$ r
# R( K& P" W6 f/ U# j4 `. ~

5 {& b' p- h% f8 _' c  l
分享到:  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% ~! T- ]. O# ^
Program.heap = 0;
: [, K7 E8 X- N% ZProgram.argSize = 100;  /* minimum size */& s  @- P* j" g1 v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  y0 k3 x* O: F* w; f+ Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* Y" k& U5 P9 Nvar heapMemParams = new HeapMem.Params();- {& Z) |/ q9 N7 u5 u- i/ }$ ?8 K
heapMemParams.size = 0x4000;
& D) b4 A, e- n2 B. ~2 w
. d$ k+ d% B7 i: [var Memory = xdc.useModule('xdc.runtime.Memory');
( g" g! e" Z$ y5 }# D5 PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% P# t" p: W# @1 U3 [7 m2 z9 A- C& P$ |2 l6 B8 J+ ~
我大约calloc  每次共计大小为5K*16bits,, {. I: ~; L3 C) L
而默认配置才0x4000、需要改大。
: ^  D* \8 {) g2 x( p
2 S. Q: g4 E' s  \
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
3 e1 T2 F: d. ]& k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: a& |! @* W1 W5 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 B' E3 ^  X, J4 p8 `7 e, V6 z
3 A, B+ O& _2 |' O/ U
是不是需要在DSP.CFG中进行配置
+ O( J, S0 L1 L- b* Y" A# V我现在的配置为* c3 D# U1 u3 m9 a

7 W) }' \( |/ {/*
/ i& b+ _, w3 c" h  u0 b1 S *  ======== Operating System Configuration ========' e' b8 K) T* P" [2 L
*/
+ v: w$ b# E$ }
7 `1 O% `# v3 o8 M3 b, @" ~$ _8 Q/* no rts heap */
- C( U& J0 K9 `1 ?6 D7 z9 |: VProgram.heap = 0;
2 Q0 c: v* q' h7 m3 Y7 cProgram.argSize = 100;  /* minimum size */
$ H5 |: ?- f$ f% o8 `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 Z1 g" Q- O5 J$ W0 R; u5 Y

! {$ h, ]9 h- U' n* [' K6 p2 d/* create a default heap */
% b# H4 ^7 a+ u8 P& dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# q0 R- n2 \( @" |) i
var heapMemParams = new HeapMem.Params();, u2 T# A$ f# s: o( B2 E2 i) f$ H4 G4 k
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 r* r: r7 i$ x

; x- Y+ y% O) U$ Z+ ?$ d) y! M
var Memory = xdc.useModule('xdc.runtime.Memory');* \5 i. V) E4 K1 e! l0 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: Z8 T2 }: k0 T; m1 E; a, h$ Z. u) H+ z1 F2 ^
/* configure System module */
: a. r3 N0 n- j' U& e' v6 c2 F# vvar SysMin = xdc.useModule('xdc.runtime.SysMin');; k6 ~: @! r; o+ n' m
SysMin.bufSize = 0x1000;$ p) e5 X$ l' ^" k& @( k0 E9 R2 w) f
SysMin.flushAtExit = false;* G, g1 U  o6 K0 U+ A# U6 C

0 T$ f  ^5 n" y% {" ~  N5 Jvar System = xdc.useModule('xdc.runtime.System');( w$ i7 R! J- t2 T* v( W2 O9 x
System.SupportProxy = SysMin;$ _1 o+ z7 }4 E& `% g7 i- |
6 h5 g8 s, E$ ~1 x
/* configure SysBios to use the lower half of Timer 1 */
, \0 g9 r- v: i. svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& j3 t+ U: `5 n# bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% a- s, W! A- B6 K. g: b: z
Timer.timerSettings[1].master = true;  M, {4 f# x: V1 q3 o  w
Timer.defaultHalf = Timer.Half_LOWER;
3 `4 a/ g* F$ }# S3 q' IClock.timerId = 1;
: k$ C2 ~2 A! T0 y0 u* d5 K2 W& B* \# z% B3 _! M8 x# b& w+ N
# b+ \& T  ]  V% J
/*
* ]: v5 J: o2 S' g0 a/ z# D5 u6 Q& W *  ======== Miscellaneous Configuration ========9 Y4 T6 |3 _# \. ?2 E
*/
. f6 f4 z' N7 ^6 _. m' \! O4 P
/* set default diags mask */
1 a: p, G6 }, yvar Diags = xdc.useModule('xdc.runtime.Diags');" L2 p% M. f1 [+ H5 l  J
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 Q/ l- x" V6 c& z! m5 t8 J2 S

9 X. a9 @5 W+ K( U0 v4 ?1 x% KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ w( A$ e% b9 x* S- f: C8 z% x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) I# E- R( _5 O; N; u" q7 XDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* e1 P3 l2 }& ^. sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! `) O  r! u' [6 oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% A2 p4 N: v7 y6 N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; x/ x- ]% H- D/ c. ^  ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 |. D+ C8 K' I1 _) @Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 N6 @. @5 R0 Q. [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 r, t% M+ K. B# l+ o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# n6 I# f- U! u( {% V1 Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 C# H, w9 p# @7 J* A5 }3 ~- q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 A- N, a3 g1 B$ e- [& u& _# u$ fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: o+ L. T# }$ l& M. g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' O# f! m- }6 b% m8 `
, q% w7 V: `; {1 w/ K/* override diags mask for selected modules */
  {0 ]! |+ d' R, B6 yxdc.useModule('xdc.runtime.Main');
1 K$ z+ e1 |" `1 @6 rDiags.setMaskMeta(
4 l# r; ~% b1 ^) t    "xdc.runtime.Main",
+ E9 I3 h' _' V( c    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 U/ x1 ^' _( H
    Diags.RUNTIME_ON  M# Z% P: s1 Q  e( u
);3 Y$ `) j. c1 k

5 F1 U1 h6 M: Rvar Registry = xdc.useModule('xdc.runtime.Registry');
: [3 q- H5 Q7 w/ b2 h0 g) qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) g, v% S! n7 q/ bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, E% m3 J1 T" L" [, M! {7 d* Y1 i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ [1 v7 U9 M; \* s# k: S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! S; J+ m/ y: v# y1 m5 R2 M! f. A# E  i) E! O, @. ~) W. f+ K+ C& r7 f
/* create a logger instance */
; i$ c% }- U' m1 I/ S) ?+ A# [& ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 A9 W, I. M! W  \! o' T
var loggerBufP = new LoggerBuf.Params();. Z7 k( Z4 q! \+ w: [, k
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 g5 X' j* L. k, y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 S9 H9 H4 u: ]* p% O2 l) \" u- T4 s+ }1 w% `4 F, d
var appLogger = LoggerBuf.create(loggerBufP);
* x3 i4 M* _3 P( {. n/ ?appLogger.instance.name = "AppLog_Core1";
" _* W6 y5 d9 L+ w8 @Defaults.common$.logger = appLogger;6 j3 }( A. Y4 j. a/ r
Memory.defaultHeapSize = 0x8192;   
" }$ c# g+ v. T2 K) rIdle.idleFxns[0] = "&LEDStatus";
  P, t5 I, |& s4 f8 b$ @  J" ACache.initSize.l2Size = Cache.L2Size_32K;+ n4 ?/ N& J# F2 n( `# p

7 U/ [) X% O: l/ N1 ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 10:29 , Processed in 0.040596 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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